witam
Poszukuje artykulu lub przykladowego kodu przedstawiajacego sposob dodawania do tabeli importow nowej dll'ki.
Przyklad jaki znalazlem http://sandsprite.com/CodeStuff/iat_hook.zip
niestety nie pokazuje w jaki sposob tablica importow zostala zmodyfikowana.
Pozdrawiam
Znaczy się chcesz aby loader załadował dodatkową bibliotekę podczas ładowania całego programu?
Jeśli tak to pomocna Ci będzie dokumentacja Microsoftu na temat formatu PE i COFF
http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
Poczytaj o PE
http://win32prog.republika.pl/ebook/wk.pdf
Mhm thx za info.
"Znaczy się chcesz aby loader załadował dodatkową bibliotekę podczas ładowania całego programu?"
Dokladnie tak.Takze jak by ktos mial kod zrodlowy aplikacji o takim dzialania to byl bym wdzieczny.
niestety nie pokazuje w jaki sposob tablica importow zostala zmodyfikowana.
Nie została zmodyfikowana .
Przykład zawiera dwa programy , bez dołączonej biblioteki Hook i z Hook_IAT.
Biblioteka Hook_IAT została dołączona do programu w trakcie kompilacji .
W trakcie uruchamiania programu następuje ładowanie MSVCRT.dll , następnie
ładowanie Hook_IAT.dll . Uruchomienie Hook_IAT.dll powoduje zamianę adresu
'strcmp' oryginalnego na adres funkcji w Hook_IAT.dll.
Adres w tablicy przekierowania do 'strcmp' jest uzyskany po deasemblacji oryginalnego
kodu programu , jmp , i tam jest wpisywany adres funkcji m_strcmp z biblioteki Hook_IAT.dll.
Czyli jest to zrobione na piechotę .
Teraz trzeba się zastanowić jak to zrobić w sposób dynamiczny .
czyli załadowac Hook_IAT.dll do pierwszej wersji programu i wykonać kod m_strcmp .
Nie jest to proste zadanie .
Resztę muszę przemyśleć .. [green]
Zeby sprawa byla jasna, chcĘ uzyskac taka sama funkcjonalosc jak LordPE w tym tutku
http://www.craigheffner.com/tute/tute3.html
:-D No niezłe jaja , to może być trochę kodu , napisz maila niech przyśle żródła .
To stary Haker , myślisz że ten problem można rozwiązać postami na forum ?
Może ktoś poda linki , bo temat jest morderczy i za rozwlekły .
Ja bym spróbował inaczej , załadować program Hook-owany własnym programem i spróbować
wcisnąć bibliotekę do jego przetrzeni adresowej , to masa kombinacji .. może mi się zechce,
nie robiłem jeszcze takich wynalazków.
To bardziej mi się podoba , bo jak pomyslę o przebudowie gotowego .exe to robi mi się słabo .
Zresztą Lord napisał już taki program :-D .
Z wstrzyknieciem dllki do procesu nie ma problemu :-) ,chcialem po prostu przetestowac sposob ktory prezentuje autor tego artykulu.No ale of course bez uzycia LordPE ;-) .
Yhy , ale i tak nie obedzie się bez dokładnego grzebania w PE nawet z poziomu uruchomionego
procesu , niestety z mojej strony były by to na razie eksperymenty okupione czasem spędzonym
na kodowaniu , ciekawy temat ale na razie nie sądzę abym mógł to wykonac w jakimś określonym czasie ,
tak że pozdrowienia i
miłego czekania na propozycje .
Właściwie to spróbuję przerobić podany przez ciebie przykład na "dynamiczny" .. ale nie wiem ile
zajmie to czasu .Tzn podstawienie własnej biblioteki do programu i podpięcie się pod funkcję
systemową .
Kontynuacja :
http://4programmers.net/Forum/viewtopic.php?id=104080
Idzie się zarypać :-D , cos może wymyślę , ale fajnie by było jak by ktos jeszcze
wrzucił jakieś propozycje ...
Pozdro [green]
Ale nie na ch.. się mordowac .
Jeśli interesują Cię te tematy to przejrzyj Ziny z tej strony
W jednym jest o dodaniu funkcji zabezpieczjącej program , czyli zmiana Punktu
Wejścia do .exe dołączenie własnej .dll , wykonanie kodu i powrót do programu (o ile pamiętam ).
Zależy jaką funkcjonalność chcesz uzyskać .
Bo wygodniej jest dodać nową sekcję do .exe a nie grzebać sie w jego przebudowie .
Oj zmian dokonywanych przez LordPE nie jest zbyt wiele.Wrzuc sobie zmienionego notepada i orginalenego np do HexWorkshop'a i porownaj ;-)
Domyślam się że nie ale luknij tu :
Moja strona :
http://win32prog.republika.pl/asm/asm.html
http://win32prog.republika.pl/
I na 4programmers
http://4programmers.net/Forum/viewtopic.php?id=104575
to zobaczysz w jakie g.. sie pakujesz .
Na razie nie dokończyłem rozważań na temat PE i zanim dojdę do importów to miną
miesiące [green]
Namiar na Ziny który Ci podałem jest OK . Sciągnij wszystko i przejrzyj , jest trochę
grzebania , ale mysle że znajdziesz coś ciekawego.
Zresztą widze Deusa on posiada więcej wiedzy na ten temat ...
Pozdro
dzejo napisał(a)
Zresztą widze Deusa on posiada więcej wiedzy na ten temat ...
widać, rzucam się w oczy [rotfl]
OK, przejdę może do rzeczy: w C ostatnio piszę rzadko, do tego temat jest bardziej hm... niskopoziomowy więc będę się wspierał asmem.
W plikach PE występuje sporo różnych katalogów /a konkretnie to w nagłówku/, m. in. importów. Zanim przejdę do jego omówienia wspomnę czym jest RVA. RVA to mówiąc łopatologicznie adres liczony względem początku modułu. Mały przykład: powiedzmy, że nasz program znajduje się w pamięci pod adresem 0x400000 /standardowy IMAGE_BASE dla plików exe, IMAGE_BASE to też uchwyt do modułu... tak, w tym przypadku uchwyt jest wskaźnikiem/ natomiast jakaś_funkcja jest pod adresem 0x4010FF /czyli od bajtu 0xFF pierwszej sekcji... chyba, że adres pierwszej sekcji będzie niestandardowy/. RVA tej funkcji wynosi więc 0x4010FF - 0x400000 czyli 0x10FF. Należy pamiętać, że RVA nie zawsze jest równe offsetowi w pliku binarnym - sekcje mogą mieć inny /większy/ rozmiar w pamięci niż w pliku, np. sekcja '.bss' zawierająca wyłącznie dane niezainicjowane nie istnieje fizycznie w pliku - istnieje tylko wpis w nagłówku określający jej charakterystykę i rozmiar w pamięci.
Po dokładny opis wszystkich struktur i pól odsyłam na msdn, opiszę tylko to, co jest nam potrzebne do podstawowych operacji na tablicy importów /forwardowanie chyba sobie odpuszczę/. Katalog importów to tablica struktur składających się z 5 dwordów. Pierwsze 3 pola w sumie nas nie interesują /charakterystyki, info o czasie i forwardowaniu/. Pole 4 to RVA nazwy modułu, zaś 5 to również RVA/w sumie jak wszystkie adresy w strukturach PE/, który wskazuje na tablicę struktur IMAGE_THUNK_DATA /chyba tak to się nazywało... nie chce mi się sprawdzać... po padnięciu dysku nawet Lorda nie mam/. Katalog importów /jak każdy inny/ musi być wyrównany do 0x20, kończy go zaś pusty wpis - wszystkie 5 dwordów wyzerowane /ew. -1.../. Tyle jest wymagane do działania samego katalogu.
Teraz kolejna tablica /czy też może tablice/ wskazywana przez 5 dword katalogu. Jej zawartość to dwordy, sama również kończy się pustym /zerowym/ dwordem. Każdy wpis można interpretować na 3 sposoby, jako adres nazwy forwardowanej funkcji /to nas nie obchodzi aktualnie/, jako numer funkcji z pliku dll /ordinal, każda exportowana funkcja ma przypisany przy eksportowaniu numer/, bądź jako wskaźnik na... kolejną strukturę zawierającą hint /word, w sumie zbędny... zwykle 0/ i nazwę funkcji. Wskaźniki jak się pewnie domyślacie to RVA, ordinal zaś ma wartość 0x80000000 + numer_funkcji /czyli najwyższy bit dworda ustawiony - znacznik ordinala/. Thunki są podmieniane przez systemowy loader na adresy importowanych funkcji. Dobra, trochę namieszałem... Mały przykład w asm /pod fasma/:
format PE Console
section '.deus' code readable executable
entry $
jmp $
align 0x20
data import ; oznacz adres jako poczatek katalogu importow
dd 0, 0, 0, RVA _nazwa_liba1, RVA _thunki_liba1
dd 0, 0, 0, RVA _nazwa_liba2, RVA _thunki_liba2
dd 0, 0, 0, 0, 0 ; pusty wpis - koniec
end data ; oznacz jako koniec
_nazwa_liba1 db 'libek1.dll', 0
_nazwa_liba2 db 'jakis_inny_libek.dll', 0
_thunki_liba1:
Proc_1_z_liba dd RVA __Proc1_z_liba1 ; import porzez nazwe
Proc_2_z_liba dd RVA 0x80000020 ; import poprzez ordinal funcji o numerze 0x20
dd 0 ; koniec wpisow dla tej biblioteki
_thunki_liba2:
inna_procka dd RVA __inna_procka
dd 0
__Proc1_z_liba1 dw 0 ; hint - podpowiedz dla loadera /ordinal/
db 'jakas_procka_z_libek1', 0
__inna_procka dw 0
db 'insza_procka_z_inszego_liba', 0
ok, omawiamy... a jest co omawiać? Wszystko zgadza się z tym co napisałem wcześniej, ale co tam... W katalogu importów widzimy 3 wpisy /3 jest pusty - koniec katalogu/. Zbędne dla nas pola są wyzerowane. Pierwszy wpis powoduje załadowanie biblioteki o nazwie 'libek1.dll' /jak widzimy nazwa dll'a to zwykły ansi string zakończony nullem/. Z 'jakis_inny_libek.dll' jest podobnie. Tablica _thunki_liba1 zawiera 2 wpisy + terminator. Pierwszy wskazuje na strukturę costam_IMPORT_BY_NAME /nie chce mi się szukać ;P/, drugi dword to ordinal - najwyższy bit ustawiony oznacza, że niższy word jest numerem, z jakim dana funkcja została wyeksportowana i wedle którego na zostać zaimportowana /w tym wypadku 0x20/. Teraz ostatni element układanki czyli IMPORT_BY_NAME - word na początku /hint/ sugeruje jaki ordinal ma dana funkcja, ale to tylko podpowiedź /aby system najpierw sprawdził czy funkcja o tym ordinalu jest poszukiwaną zamiast przeszukiwać wszystko po kolei... zwykle i tak musi ;P/ , znaczenie ma tutaj nazwa zapisana po nim. Wielkość liter ma znaczenie! I tu może wtrącę małą uwagę: autor tematu się myli - IAT to tablica adresów importowanych funkcji, nie katalog importów. W naszym przypadku IAT to obszar od _thunki_liba1 do __Proc1_z_liba1. OK, może teraz jakiś działający program?
format PE GUI
push 0
push 0
push _info
push 0
call [MessageBoxA]
push 0
call [ExitProcess]
_info db 'Mam recznie zbudowana tabele importow!?', 0
align 0x20
data import ; oznacz adres jako poczatek katalogu importow
dd 0, 0, 0, RVA _kernel32, RVA ExitProcess
dd 0, 0, 0, RVA _user32, RVA MessageBoxA
dd 0, 0, 0, 0, 0 ; pusty wpis - koniec
end data ; oznacz jako koniec
_kernel32 db 'kernel32.dll', 0
_user32 db 'user32.dll', 0
; poczatek IAT
ExitProcess dd RVA _ExitProcess
dd 0
MessageBoxA dd RVA _MessageBoxA
dd 0
; koniec IAT
_ExitProcess dw 0 ; hint - i tak w kazdej wersji dlla sa inne ordinale
db 'ExitProcess' ; za nulla robi hint z _MessageBoxA
_MessageBoxA dw 0
db 'MessageBoxA'
W przypadku braku informacji o entry poincie fasm ustawia na poczatek pierwszej sekcji. Jeżeli sekcja nie jest zdefiniowana fasm tworzy sekcję '.flat' o uniwersalnych atrybutach /ERW/. Co robi nasz programik? Wyświetla messageboxa i kończy proces /można też wrócić do kernela poprzez ret jeżeli jest to jedyny wątek/. Jak już pisałem loader windowsowy podmienia wpisy w thunkach /IAT/ na adresy importowanych funkcji. W sumie to to są dla mnie oczywiste rzeczy ale większość pewnie nie wie, gdzie góra a gdzie dół więc pytać :-) Jak widać IAT i katalog importów nie są zbyt skomplikowane /exporty są 'ciekawsze'/. Jak dodać własny wpis do katalogu - dll'kę? Można sprawdzić czy za katalogiem nie ma przypadkiem 20 bajtów /czyli jeden wpis/ wolnej przestrzeni... ale można sobie odpuścić - jeszcze nie widziałem execa /może za wyjątkiem tych cudów z borland'ów/, który miałby tam odpowiednio luźno, zwykle są 'tam' za wąskie ;P. Co nam pozostaje? Najprościej to będzie powiększyć ostatnią sekcję i na jej koniec przenieść katalog powiększony o jeden wpis... ale sam katalog, z powyższego kodu chyba jasno wynika, że thunków ruszać nie wolno /no... prawie, bo dać się da wszystko/. Ew. można też zobaczyć czy na końcu wspomnianej sekcji nie ma odpowiedniej liczby zer. Trzeba sprawdzić, czy rozmiar w pamięci nie jest większy od fizycznego - "takie niby .bss", dopisanie czegoś mogłoby spowodować różne dziwne zachowania programu jeżeli autor zapomniał o inicjowaniu - program zamiast 0 może odczytać np. fragment nazwy naszego liba... a jak tam miał być wskaźnik to się wysypie :>. Jedyne wyjście to dodanie nowej sekcji /kiedyś można było umieścić katalog w nagłówku pliku, ale teraz to już raczej nie trybi/. I tu znów trzeba na uważać - Overlay czyli doklejenie danych na końcu execa, często stosowane przez samorozpakowywacze i inne takie - w nagłówku pliku jest pole SizeOfImage określające rozmiar obrazu wykonywalnego, wszystko co 'wystaje' jest przez system ignorowane i może być potem przez program wygodnie wczytywane. Dobra, tyle teoretyzowania. Jakieś podstawy podałem, potem napiszę mały programik dodający nowy wpis. W sumie to temat jest bardzo rozległy /jeżeli chodzi o budowę plików PE/, to co napisałem jest niezrozumiałe bez podstawowej wiedzy o PE... żeby tą wiedzę podać musiałbym napisać ze 4x więcej i opisać kilkanaście struktur... to już innym razem. OK, piszcie czego nie rozumiecie, ja się zajmę swoimi sprawami a jak będę miał chwilę to rzucę kawałkiem kodu /może nie na wszystkie metody, ale.../.
IAT to tablica adresów importowanych funkcji
Tak właśnie działał przykład zamieszczony przez "przechodzień" .A biblioteka nie była
dodawana lecz wkompilowana w .exe . Modyfikowany był tylko wpis dotyczący 'strcmp' poprzez
bibliotekę .
Więc zapytam dla pewności , wystarczy jedynie aby program załadował .dll
i wykonał kod z niego , bez mieszania w importach .
@Deus
Pytanie ignoranta .
Czy koniecznie trzeba zamieszczać nazwy funkcji zawartych w dodanym .dll ,
czy wystarczy dodać tylko informację o nazwie biblioteki a resztę olać .
I czy jest szansa że wtedy wykona się kod inicjujący bibliotekę , bo to chyba by wystarczyło .
Wystarczyło ... to się kurcze rozlazie wszystko bo nie ma miejsca .. :|
Ale bez szczegółów , Tak - czy Nie :-D
Nie grzebałem na razie tak dokładnie w Importach ,z tąd pytanie .
na razie przeryłem budowę PE , sekcje , dodawanie kodu , i takie tam pierdoły
wątek wyprzedził trochę to co do tej pory przeanalizowałem.
Biorę się za lekturę bo mnie to zaciekawiło...
Musi być co najmniej jeden import. Ale całość można zmieścić w 28 bajtach+lib:
- 20 bajtów - wpis
- 2 thunki /ordinal + null/
- nazwa
Ordinala można spisać dowolnego /ważne, żeby taki być w bibliotece/. Mnie jeszcze nigdy ord = 2 nie zawiódł ;P
Hmmm... na Windows Server 2003 wystarczy tylko pusty thunk :| Z tego co pamiętam to większość wersji Win wymaga jednak pojedynczego wpisu - zawsze się jeden zostawia w packerach ze statycznym ładowaniem bibliotek /wszystkie liby ładowane przez oryginalne importy są zawarte w importach unpackera/.
czyli na 2k3 przejdzie takie coś:
dd 0, 0, 0, RVA $ + 28, RVA $ + 4
dd 0, 0, 0, 0, 0
db 'lib.dll', 0
czyli pierwszy dword wpisu jest jednocześnie jedynym thunkiem a nazwa jest za ostatnim wpisem. 20 bajtów + nazwa :>
@poniższy post - dll to Dynamic Link Library, więc brak exportów mija się z celem przy ładowaniu statycznym /przez tablicę importów/.
p.s. piszcie mnie z małej litery :>
No dobra , trochę dziwne bo biblioteka wcale nie musi udostępniać jakichś funkcji
dla .exe , może zostać załadowana wykonać swój kod i podziękować .
p.s. piszcie mnie z małej litery
A niby czego ? , nie bądz taki skromny w SPACJA końcu można się dowiedzieć paru reczy
z tego co piszesz :-D .
Moge tylko polecac ten link http://www.tuts4you.com/blogs/download.php?list.30
:D naprawde wiele dobrych tutoriali :-) .Bardzo przejrzyscie i elegancko, sposob dodania nowej sekcji do kodu pokazuje "Manually Adding A Section", goraco polecam. :-P
Przeprowadziłem procedurę ze strony LordaPE dodania dll do Notepad .
Niestety nie mam co dalej wnikać w ten sposób bo program po modyfikacji
wywala się na ryja , czyli do niczego .Nie jest tak cudownie jakby się wydawało .
Dodaje sekcję do pliku , przebudowuje importy - ale Notepad po odpaleniu nie działa
zmiana Entry Point na wszelkie inne nie pomogła , lipa....
A dlaczego ? może dla tego :
Ponieważ Notepad w wersji XP ( jak i inne pliku wchodzące w skład ) zawiera tzw. Bound Import .
Utrudnia to wszelkie manipulacje na pliku bo wpisy w katalogach są zablokowane
nazwami Bibliotek i wszelkie manipulacje na pliku kończą się źle .
Czyli zamiast sekcji import pliki .exe zawierają wpisy ( bo to nawet nie sekcja) o bibliotekach
jakich program używa .
Nie można do takiego pliku dodać żadnej dodatkowej sekcji ,fizycznie można ale nie da się jej
uruchomić , bo nie ma miejsca przez
ten cholerny Bound Import na dodanie wpisu-katalogu o nowej sekcji , dodanie takiego
katalogu uszkadza plik .
Natknąłem się kiedyś na ten problem pisząc wirusa PE , dodającego sekcję do pliku .
Musiał on ostatecznie rozpoznać pliki z Bound Import i odpuścić je sobie .
No chyba że jest jakaś metoda aby to ominąć .
Ale z tego co oglądałem w Hex edytorze , to Notepad po zabiegu LordemPE jest
po prostu zrypany .
Nasuwa się więc inne rozwiązanie , do plików które nie zawierają Bound Import ,
można go dodać z wpisem o bibliotece którą chcemy załadować , spróbuję właśnie
tak ...
oj dzejo, dzejo... a próbowałeś może usunąć katalog Bound Import z pliku? Ustaw offset i rozmiar na 0 i wtedy spróbuj dodać, boundy są opcjonalne... Na moje oko obszar Bound Import po wyzerowaniu i wyrównaniu adresu do 0x20 świetnie nadaje się do umieszczenia katalogu importów. W każdym razie Notepad z WinServ2k3 sp1/identyczny - albo prawie - jak w XP sp2/ po takiej operacji ładuje dodatkowy pakuneczek aż miło... /normalnie, bez usunięcia boundów faktycznie się sypał/ :>
Ale jeśli są , to są brane pod uwagę przy ładowaniu pliku .
Miełem jednak nadzieję że dodanie bound będzie łatwiejszym sposobem na załadowanie
biblioteki ,
dodałem więc ręcznie dane o bibliotece , ale dupa , i tak musi być jeszcze powiązanie
z symbolami w importach i na razie utknąłem .
Idę odpocząć bo mi oczy zgwożdziały od tych Hexów 8-O .
Ale jeśli są , to są brane pod uwagę przy ładowaniu pliku .
właśnie, jeżeli są - wywal wpis o katalogu bound z nagłówka - katalog importów zawiera wszystkie informacje potrzebne do załadowania modułu... a przynajmniej taki mi się wydaje... SOA#1: u mnie działa ;P
Tu jest problem , grzebanie w importach na piechotę nie bardzo mi się uśmiecha,
chciałem ominąć to dziadostwo jak najmniejszym kosztem , No bo jak LordPE się na tym wyp.. to może być trudniej
niż myslałem :-D .
najpierw bierzesz lordem wpisy o katalogu bound zerujesz, zapis, edycja importów, zapis... chodzi ;P
No chodzi , walnąłem się przy przróbce calla .
Sory Lord ;-( .
Jednak ta metoda mnie przerasta , właściwie trzeba importy zrobić od nowa ..
Właściwie to ja bym się tak nie męczył , łatwiej dodać kod ładujący bibliotekę ( LoadLibrary )
ustawić nowy entry point i z głowy . Tą metodę jestem wstanie "ogarnąć" , ale
nic pomęcze się jeszcze trochę [rotfl] .
Rzeczywiście można spokojnie wywalić Bound Import i nic się nie dzieje , a szkoda :-D .
ok, wpadłem na ciekawy pomysł - jak zmniejszyć, 'usunąć' thunk :>
dd 0, 0x80000000+numer, 0, RVA _nazwa, RVA $-0x0c
timestamp może przecież przyjmować dowolną wartość - może także ordinala oznaczać, następny dword zaś robi za terminator :> Sprawdzone - działa. Może zabiorę się za implementację odpowiednich funkcji do dodawania bibliotek, coraz ciekawsze się to robi.
Pan Lord PE ustawia adres w katalogu Import symbols na
nową dodaną sekcję , jednak opis w katalogu Virtuall Address różni
się od opisu w sekcji .
Po dodaniu biblioteki do Notepad w katalogu jest
Virtuall Address (Import symbol nowa sekcja ) == 1301F
a w Opisie sekcji dodanej
VirtualAddress jest == 13000 ????
Co jest ?
Zrzut z RHead.exe
http://www.win32prog.republika.pl/winapp/rhead.zip
Sekcja numer : 3 War.Hex IntelHex
0258-025F 0170-0177 00-07 BYTE Name[8] .Katja
0260-0263 0178-017B 08-0B union{DWORD PhysicalAddress,
DWORD VirtualSize}Misc 0000-1000 0010-0000
0264-0267 017C-017F 0C-0F DWORD VirtualAddress 0001-3000 0030-0100
0268-026B 0180-0183 10-13 DWORD SizeOfRawData 0000-00FB FB00-0000
026C-026F 0184-0187 14-17 DWORD PointerToRawData 0001-0600 0006-0100
0270-0273 0188-018B 18-1B DWORD PointerToRelocations 0000-0000 0000-0000
0274-0277 018C-018F 1C-1F DWORD PointerToLinenumbers 0000-0000 0000-0000
0278-0279 0190-0191 20-21 WORD NumberOfRelocations 00-00 00-00
027A-027B 0192-0193 22-23 WORD NumberOfLinenumbers 00-00 00-00
027C-027F 0194-0197 24-27 DWORD Characteristics C000-0040 4000-00C0
Import Symbols:
War.Hex IntelHex
IMAGE_DATA_DIRECTORY 1
VirtualAddress DWORD 0001-301F 1F30-0100
Size DWORD 0000-00C8 C800-0000
z tego co widzę Lord umieszcza na początku sekcji nazwę nowej biblioteki, thunki i dopiero tablice importów... Hm, dziwne, że tablica nie jest wyrównana do 0x20. Swoją drogą Lord nie potrafi obliczyć adresów danych umieszczonych za tablicą, żeby takie dziwne konstrukcje stosować!?
Faktem jest że to jednak działa , kolejnym to że biblioteka zaszczepka musi
zawierać przynajmniej jedną fun, moż być nie używana ( tak jak opisałeś wcześniej).
Jeszcze wspomnę o boundach :
Oryginalny plik Notepad :
1.Zawiera katalog Bound Import
2.Nie zawiera wpisów o Sekcji ?? importów
3.Lecz zawiera tylko wpis w katalogu Import symbol.
Po dodaniu Biblioteki przez LordPE
Katalog Import symbols zawiera wskazanie ( trochę nietrafione )
na sekcję dodaną "Katja" [ to pewnie jego laska :-D ]
Oraz plik zawiera pełny opis sekcji "Katja" .
W oryginalnym Notepad więc loader musi po usunięciu Bound
czytać informację z katalogu , bo o sekcji nie ma danych .
Ciekawe jaka jest kolejność zbierania danych o Sekcjach przy ładowaniu .
Moje nadzieje na podpięcie się pod Bounda się trochę rozwiały.
Biblioteki ładowane w ten sposób nie mogą "zachodzić na siebie adresami bazowymi + rozmiar
bibl. w przestrzeni adresowej procesu " ,
poza tym i tak musi być dodany jakiś symbol do importów.. na razie się wywala..
Kontrolowany jest także przez Loader "DateTimeStamp" to można uzupełnić
ale i tak wyskakuje bład " inicjalizacja aplikacji się nie powiodła" , Loader odnalazł
bibliotekę - czyli wpis jest prawidłowy ( brak komunikatu o braku biblioteki )
sekcje w sumie służą tylko określeniu atrybutów obszarów pamięci - jak widziałeś w podanym przeze mnie przykładzie cały program może zawierać się w jednej sekcji.
p.s. u mnie nowa sekcja nazywa się '.Silvana', hm, obrotny facet, nie ma co ;P
Niestety w takim przypadku zostają mu Lachony na max 8-em liter :-)
Oj 7-em , zapomniałem o '.' .
Kropka to punkt wejścia do () , muszę zmienić imię swojej żony , złe nie śpi ,
na razie mam go tylko w komputerze , ale jak zapuka do drzwi ... :d
..
Odnośnie sekcji przyjęcie opcji dodania nowej sekcji przy zmianie importów
może wynikac z braku możliwości modyfikacji oryginału ,
Być może na wyrost , z obawy przed przekroczeniem rozmiaru nowych danych
wynikających z zaokrąglenia (SectionAlignment) ..
Dodanie nowej sekcji jest bezpieczniejsze , w przypadku dodawania danych do sekcji
gdy jej rozmiar( jest bliski - >równy] "wyrównania danych w pliku " modyfikacja nie powiodła by się .
Kolejny arykul godny polecenia:
"Understanding RVAs and Import Table"
http://people.freenet.de/sun-shine/tut_rvait.zip
Dzieki niemu juz wiem dokladnie jak LordPE zmodyfikowal importy :-)