The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
004010DB |> /8033 11<br />
004010DE |. |83E9 01<br />
004010E1 |. |43<br />
004010E2 |. |83F9 00<br />
004010E5 |.^\75 F4<br />
XOR BYTE PTR DS:[EBX],11<br />
SUB ECX,1<br />
INC EBX<br />
CMP ECX,0<br />
JNZ SHORT unpackme.004010DB<br />
Sada imamo dovoljno informacija da bismo mogli da napravimo patch. Iz ova<br />
dva loopa smo saznali da se adrese od 004010F5 xoruju prvo sa 44h a onda<br />
sa 11h. Posto posle dekripcije bajtovi od 004011B4 do 004011C7 moraju da<br />
budu 90 uradicemo reversni xor 90h xor 11h xor 44h = C5h a kao rezultat<br />
cemo dobiti bajt koji treba da se nalazi na svim adresama izmedju 004011B4<br />
i 004011C7. Ove izmene mozemo da uradimo pomocu Ollyja i da ih snimimo.<br />
Kada ovo uradimo startovacemo novosnimljeni fajl i videcemo da smo<br />
zaboravili na cinjenicu da ovaj kripter ima<br />
mogucnost provere modifikacije koda<br />
ispod adrese 004010F5. Ali ono sto ovaj<br />
kripter nema je mogucnost provere CRCa<br />
iznad adrese 004010F5 a bas ovde se<br />
nalazi kod za proveru modifikacije sekcije<br />
koda. Posto bi bilo previse lako samo<br />
modifikovati skok JE u JNE ja sam kao<br />
uslov zadatka postavio da se ovaj skok ne sme modifikovati. Iako ovo zvuci<br />
komplikovano uopste nije. Otvoricemo patchovani program pomocu Ollyja i<br />
doci cemo do CMP komande koja se nalazi odmah iznad ovog skoka. Ovde<br />
smo:<br />
00401062 . 81FA B08DEB31 CMP EDX,31EB8DB0<br />
Primeticemo da se sadrzaj EAXa (F9B35572) poredi sa 31EB8DB0. Stoga<br />
cemo samo logicno promeniti CMP komandu u<br />
00401062 81FA 7255B3F9 CMP EDX,F9B35572<br />
Pre nego sto ovo uradimo moramo da nadjemo kako se adresa na kojoj se<br />
nalazi CMP komanda dekriptuje. Odgovor lezi ovde:<br />
004010BE |. BB 07104000<br />
004010C3 |. B9 7F000000<br />
004010C8 |> 8033 07<br />
004010CB |. 83E9 01<br />
004010CE |. 43<br />
004010CF |. 83F9 00<br />
004010D2 |.^ 75 F4<br />
Odnosno dekriptcija bajtova izgleda ovako:<br />
86 xor 7 = 81 81 xor 7 = 86<br />
FD xor 7 = FA<br />
FA xor 7 = FD<br />
B7 xor 7 = B0 72 xor 7 = 75<br />
8A xor 7 = 8D 55 xor 7 = 52<br />
EC xor 7 = EB<br />
B3 xor 7 = B4<br />
MOV EBX,unpackme.00401007<br />
MOV ECX,7F<br />
/XOR BYTE PTR DS:[EBX],7<br />
|SUB ECX,1<br />
|INC EBX<br />
|CMP ECX,0<br />
\JNZ SHORT unpackme.004010C8<br />
36 xor 7 = 31 F9 xor 7 = FE<br />
gde je prva kolona originalna dekripcija a druga patchovana enkripcija. U<br />
prevodu treba samo patchovati bajtove na adresi 00401062 u<br />
86FD7552B4FE da bismo prilikom dekripcije na istoj adresi dobili:<br />
00401062 81FA 7255B3F9 CMP EDX,F9B35572<br />
Posle ovog patchovanja mozemo pokrenuti patchovani fajl i videti da se na<br />
ekranu sada ne pojavljuje NAG. Dakle, uspeli smo !!!<br />
<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 273 <strong>of</strong> 293