The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Kao i drugi deo treci se svodi na ovo:<br />
e[7] = d[7] xor ESI xor t[3]<br />
e[8] = d[8] xor ESI xor t[3]<br />
e[9] = d[9] xor ESI xor t[3]<br />
Sledeca dva poddela se malo razlikuju u odnosu na dosadasnja tri.<br />
00407EC7 |. 8858 08 MOV BYTE PTR DS:[EAX+8],BL /*Sub 4-1<br />
00407ECA |. 8B45 FC<br />
MOV EAX,DWORD PTR SS:[EBP-4]<br />
00407ECD |. 33DB<br />
XOR EBX,EBX<br />
00407ECF |. 8A58 09<br />
MOV BL,BYTE PTR DS:[EAX+9]<br />
00407ED2 |. 33DE<br />
XOR EBX,ESI<br />
00407ED4 |. 335D F4<br />
XOR EBX,DWORD PTR SS:[EBP-C]<br />
00407ED7 |. 8D45 FC<br />
LEA EAX,DWORD PTR SS:[EBP-4]<br />
00407EDA |. E8 D9BAFFFF CALL NAG-RAR.004039B8<br />
00407EDF |. 8858 09 MOV BYTE PTR DS:[EAX+9],BL */<br />
00407EE2 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] /* Sub 4-2<br />
00407EE5 |. 33DB<br />
XOR EBX,EBX<br />
00407EE7 |. 8A58 0A<br />
MOV BL,BYTE PTR DS:[EAX+A]<br />
00407EEA |. 33DE<br />
XOR EBX,ESI<br />
00407EEC |. 335D EC<br />
XOR EBX,DWORD PTR SS:[EBP-14]<br />
00407EEF |. 8D45 FC<br />
LEA EAX,DWORD PTR SS:[EBP-4]<br />
00407EF2 |. E8 C1BAFFFF CALL NAG-RAR.004039B8<br />
00407EF7 |. 8858 0A MOV BYTE PTR DS:[EAX+A],BL */<br />
00407EFA |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] /* Sub 4-3<br />
00407EFD |. 33DB<br />
XOR EBX,EBX<br />
00407EFF |. 8A58 0B<br />
MOV BL,BYTE PTR DS:[EAX+B]<br />
00407F02 |. 33DE<br />
XOR EBX,ESI<br />
00407F04 |. 335D F0<br />
XOR EBX,DWORD PTR SS:[EBP-10]<br />
00407F07 |. 8D45 FC<br />
LEA EAX,DWORD PTR SS:[EBP-4]<br />
00407F0A |. E8 A9BAFFFF CALL NAG-RAR.004039B8<br />
00407F0F |. 8858 0B MOV BYTE PTR DS:[EAX+B],BL */<br />
Vidimo da je princip isti samo se malo razlikuju koraci 2 i 3 u odnosu na<br />
prethodne pododeljke. Za sledeca dva puta vaze sledece formule:<br />
e[10] = d[10] xor ESI xor t[1]<br />
e[11] = d[11] xor ESI xor t[2]<br />
e[12] = d[12] xor ESI xor t[3]<br />
e[13] = d[13] xor ESI xor t[1]<br />
e[14] = d[14] xor ESI xor t[2]<br />
e[15] = d[15] xor ESI xor t[3]<br />
I konacno imamo formulu po kojoj se dekriptuje enkriptovani d[x] string.<br />
Sledi deo koji se odnosi na proveru a nalazi se ovde:<br />
00407F5A |. 33D2 XOR EDX,EDX /* Check<br />
00407F5C |. B8 01000000 MOV EAX,1<br />
00407F61 |> 8B4D FC /MOV ECX,DWORD PTR SS:[EBP-4]<br />
00407F64 |. 0FB64C01 FF |MOVZX ECX,BYTE PTR DS:[ECX+EAX-1]<br />
00407F69 |. 03D1<br />
|ADD EDX,ECX<br />
00407F6B |. 40<br />
|INC EAX<br />
00407F6C |. 83F8 0A<br />
|CMP EAX,0A<br />
00407F6F |.^ 75 F0<br />
\JNZ SHORT NAG-RAR.00407F61<br />
00407F71 |. 81FA 24030000 CMP EDX,324<br />
00407F77 |. 75 2B JNZ SHORT NAG-RAR.00407FA4 */<br />
Kao sto se vidi ovaj loop se ponavlja 9 puta i unutar tog loopa se sabiraju sva<br />
slova iz “dekriptovanog” stringa i njihov zbir se poredi sa 0x324. Ovde se<br />
namece jedan problem... Naime sabiraju se samo 9 slova iz imena a string je<br />
dugacak 15 karaktera. Ovo znaci da ce postojati veliki broj tacnih serijskih<br />
brojeva ali da ce samo jedan dekriptovati string na bas pravi nacin. Ovo<br />
takodje znaci da ce program za neke serijske govoriti da su tacni iako to<br />
<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 278 <strong>of</strong> 293