Küsimus:
Windowsi käivitatava faili laadimine - ootamatud andmed lisatakse pärast mällu laadimist jaotiste algusesse
ruby_object
2013-11-29 00:11:45 UTC
view on stackexchange narkive permalink

Mõni päev pärast küsimuse esitamist mõistsin, et tõlgendasin oma algseid tulemusi valesti. Tundub, et faili .rdata jaotis kopeeritakse otse mällu, kuid seejärel kirjutab laadija IAT RVA abil kõigepealt 36 baiti. Vale küsimus lisatud 96 baiti kohta tuleneb sellest, et ma ei märganud, et failides korratakse minu testides kontrollitud baitide järjestust.

See, mida ma just ütlesin, ei pruugi ikkagi olla 100% täpne. Uurimist jätkatakse järgmistel päevadel.

Algne küsimus

Püüan kirjutada programmi Windowsi käivitatavate failide analüüsimiseks. Eeldasin, et käivitatava faili sektsioonid kopeeritakse otse mällu. Olen mitmes programmis märganud kummalist käitumist.

Üks näide on crackme12.exe . Kui kontrollin mäluga laaditud siluri .rdata sektsiooni, näen, et mingil põhjusel on mällu laaditud sektsiooni alguses lisatud 96 baiti, mida käivitatavas failis polnud. Olen veetnud kaks päeva Windowsi käivitatava dokumentatsiooni lugemiseks, kuid ma ei leia selgitust, miks see juhtub.

Lisateave

Proovin seda faili Linuxi laadida veini all. Silur, mida kasutan, kannab nime OllyDbg. Faili allalaadimise link: http://www.reversing.be/easyfile/file.php?show=20080602192337264

Püüan programmi kirjutada Common Lispi. See on link testfailile: https://github.com/bigos/discompiler/blob/master/test/lisp-unit.lisp

Olen proovinud laadige sama crackme Windowsi alla ja sain veel ühe üllatuse. Ekraanipilt saidil https://github.com/bigos/discompiler/blob/fc3d8432f10c8bd5dfd14a8b5e2b113331db15df/my-reference/images/differences%20between%20lin%20and%20win. png näitab Windowsi ja Wine'i kõrvuti.

Aadressilt x402060, punases ekraanipildis esile tõstetud, kuvatakse faili jaotisest kopeeritud andmed. Operatsioonisüsteemi laadimisel sisestati 96 baiti. Minu üllatuseks on Wine loader sisestanud erinevaid andmeid. Kui võrrelda Wine'i ja Windowsi erinevusi, näete, et kaks esimest rida erinevad. Kas keegi saab mind valgustada, mis toimub?

Järeldus

Selgub, et imporditabeli RVA ja IAT RVA paigutati aadressidele vahemikus x402000 kuni x402060. Seega näib, et laadija kopeerib jaotise pärast neid tabeleid mällu.

Lisasin oma väikesesse programmi natuke koodi ja sain järgmise väljundi:

RVAs: (((320 "Import Table RVA "8228) (324" Impordi tabeli suurus "60)" mälus vahemikus "" 402024 "" kuni "" 402060 ") ((328" Ressursitabeli RVA "16384) (332" Ressursitabeli suurus "1792)" mälus "" 404000 "" kuni "404700") ((408 "IAT RVA" 8192) (412 "IAT suurus" 36) "mälus" "402000" "" "402024"))

See võib olla seotud laadimisprotsessiga: ümberpaigutamine, import, eksport ... vajame valimi või täpsemat kirjeldust.
üks vastus:
Ange
2013-11-29 21:11:33 UTC
view on stackexchange narkive permalink

See on imporditud aadresside tabel, mis sisaldab imporditud funktsioonide virtuaalseid aadresse.

Kuna DLL-id on laaditud erinevatele aadressidele (ühel juhul 7bxxxxxx, teisel juhul 76xxxxxx), siis imporditakse Aadressitabel on täidetud erinevate DWORD-väärtustega.



See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 3.0-litsentsi eest, mille all seda levitatakse.
Loading...