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
- 1
- 2
- Rejestracja:ponad 21 lat
- Ostatnio:prawie 2 lata
- Postów:2692
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

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
Poczytaj o PE
http://win32prog.republika.pl/ebook/wk.pdf

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
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

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
:-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 .

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
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 .

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
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

- Rejestracja:prawie 21 lat
- Ostatnio:ponad 12 lat
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.../.

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
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...

- Rejestracja:prawie 21 lat
- Ostatnio:ponad 12 lat
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 :>

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
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

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
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 ...

- Rejestracja:prawie 21 lat
- Ostatnio:ponad 12 lat
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ł/ :>

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
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 .

- Rejestracja:prawie 21 lat
- Ostatnio:ponad 12 lat
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

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
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 .

- Rejestracja:prawie 21 lat
- Ostatnio:ponad 12 lat
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.

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
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

- Rejestracja:prawie 21 lat
- Ostatnio:ponad 12 lat
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ć!?

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
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 )

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
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 :-)
- 1
- 2