Dodanie do IAT wlasnej Dll'ki

0

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

0

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

0

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.

0

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]

0

Zeby sprawa byla jasna, chcĘ uzyskac taka sama funkcjonalosc jak LordPE w tym tutku
http://www.craigheffner.com/tute/tute3.html

0

:-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 .

0

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 ;-) .

0

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

http://www.ctrl-d.prv.pl

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 .

0

Oj zmian dokonywanych przez LordPE nie jest zbyt wiele.Wrzuc sobie zmienionego notepada i orginalenego np do HexWorkshop'a i porownaj ;-)

0

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

0
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.../.

0

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...

0

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 :>

0

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 .

0

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

0

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 ...

0

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ł/ :>

0

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 .

0

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

0

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 .

0

najpierw bierzesz lordem wpisy o katalogu bound zerujesz, zapis, edycja importów, zapis... chodzi ;P

0

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 .

0

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.

0

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
0

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ć!?

0

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 )

0

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

0

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ę .

0

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 użytkowników online, w tym zalogowanych: 0, gości: 1