RE FORUM
[REVERSE ENGINEERING] => Programming => Topic started by: Conflict on December 16, 2005, 10:58:33 PM
-
Uz delsi dobu jsem resil problem "Jak to sakra ten Olly dela, ze umi najit skutecnou vzdalenost instrukce v EXE?"
skutecnou = na HD
Pro nazornost ukazka instrukce targetu v pameti
- obrazek vlevo
a ta sama instrukce targetu na HD
- obrazek vpravo
Chtel sem tedy zjistit jak Olly prekopal 0044D3BF -> 0004C7BF.
Na netu se mi hledat nechtelo, tak mi nezbylo nic jinyho nez to vyresit sam.
Vickrat uz to neudelam, nestoji to za to :rolleyes:
Reseni:
RAW = skutecna adresa instrukce v souboru
VA = adresa instrukce v pameti
secP2RD = IMAGE_SECTION_HEADER.PointerToRawData
secVA = IMAGE_SECTION_HEADER.VirtualAddress
RAW = VA - ImageBase - secVA + secP2RD
RAW = 0044D3BF - 00400000 - 1000 + 400
RAW = 0004C7BF
Kdyz treba potrebuje zjistit adresu instrukce(na HD) v .CODE sekci, tak
secP2RD = CODE.PointerToRawData
secVA = CODE.VirtualAddress
kdyz chcete znat adresu instrukce(na HD) v .DATA sekci, tak
secP2RD = DATA.PointerToRawData
secVA = DATA.VirtualAddress
tot vse, vidim ze vas to obohatilo :D
-
A čo takýto príklad...?
[B]Optional header[/B]
# Section alignment Entry point File alignment Image base
02 00001000 0000101C 00000200 00400000
[B]Section headers[/B]
name Virtual size Virtual address Size of raw data Pointer to raw data
0 00004000 00001000 0000000C 0000001C
1 00002004 00006000 00000D03 00000200
Aký je raw offset pre entrypoint?
-
Podle uvedeneho postupu to vyjde:
RAW = RVA - secVA + secP2RD
RAW = 101C - 1000 + 1C
RAW = 38h = 56d
Docela maly cislo.
To mi pripomina
http://www.phreedom.org/solar/code/tinype/tiny.97/
-
Hmm, vypočítaný raw offset 0x38 pre entrypoint sa mi nepozdáva byť správnym výsledkom.
-
a duvod?..
-
Prejdi si tú tabuľku e?te raz, a pozorne. Je tam jedna dôle?itá hodnota. Určite na to príde?...