мы вышли из функции 401AB8 и сейчас стоим на адресе 401418.
глянув адрес ebp+60h, увидим введенный сериал.. убираем бряк (`bc 0`) и
трассируем до:
0177:00401464 CALL [004021B4] 0177:0040146A ADD ESP,0C 0177:0040146D LEA ESI,[ESP+2C] 0177:00401471 LEA EAX,[ESP+10] 0177:00401475 MOV DL,[EAX] 0177:00401477 MOV BL,[ESI] 0177:00401479 MOV CL,DL 0177:0040147B CMP DL,BL 0177:0040147D JNZ 0040149D 0177:0040147F TEST CL,CL 0177:00401481 JZ 00401499 0177:00401483 MOV DL,[EAX+01] 0177:00401486 MOV BL,[ESI+01] 0177:00401489 MOV CL,DL 0177:0040148B CMP DL,BL 0177:0040148D JNZ 0040149D 0177:0040148F ADD EAX,02
Перед нами первая проверка.. в EAX заносится адрес введенного сериала, а в ESI какое-то меняющееся при новом запуске число.. (возможно, просто random`ное.. лень копаться.. :] )
Эта проверка, видимо, вставлена, чтобы запутать неопытного
ломальщика, т.к. для того, чтобы ее не пройти, надо постараться.. =)..
спокойно переходим к следующему участку кода:
0177:004014A6 LEA EDI,[ESP+10] 0177:004014AA OR ECX,-01 0177:004014AD XOR EAX,EAX 0177:004014AF REPNZ SCASB 0177:004014B1 NOT ECX 0177:004014B3 DEC ECX 0177:004014B4 CMP ECX,04 0177:004014B7 JBE 00401505
В ECX получаем длину введенной строки.. если она <=4, то это не есть гут.. тоже условие, которое в принципе, ничего не дает..
Двигаемся далее:
0177:004014B9 MOV ESI,004032AC 0177:004014BE LEA EAX,[ESP+10] 0177:004014C2 MOV DL,[EAX] 0177:004014C4 MOV BL,[ESI] 0177:004014C6 MOV CL,DL 0177:004014C8 CMP DL,BL 0177:004014CA JNZ 004014EA 0177:004014CC TEST CL,CL 0177:004014CE JZ 004014E6 0177:004014D0 MOV DL,[EAX+01] 0177:004014D3 MOV BL,[ESI+01] 0177:004014D6 MOV CL,DL 0177:004014D8 CMP DL,BL 0177:004014DA JNZ 004014EA 0177:004014DC ADD EAX,02 0177:004014DF ADD ESI,02 0177:004014E2 TEST CL,CL 0177:004014E4 JNZ 004014C2 0177:004014E6 XOR EAX,EAX 0177:004014E8 JMP 004014EF
Вторая, и последняя (как выяснится позже :] ) проверка..
В ESI заносится адрес некой константы, с которой и сравнивается наш
сериал.. ничего здесь хитрого нет.. автор опять-же решил кого-то
напугать таким немалым кодом, который можно заменить несколькими
строками.. в результате, если совпадение введенного сериала (с
66139364353) состоялось, то EAX обнуляется (иначе становится равным
-1).. теперь он анализируется..
0177:004014EF TEST EAX,EAX 0177:004014F1 JNZ 00401505 0177:004014F3 PUSH EAX 0177:004014F4 PUSH 00403134 0177:004014F9 PUSH 00403118 0177:004014FE MOV ECX,EBP 0177:00401500 CALL 00401AB2 0177:00401505 POP EDI
если EAX не 0, то мы прыгаем на коварный (еще из первой проверки)
адрес 401505. иначе, формируется оконце, которое заставляет не лучшим
образом подумать о группе `ORiON` и их “hard”-кракмисе.. =)
..настраивался на кейген.. а пришлось довольствоваться лишь сериалом: 66139364353
Автор: Deu$
|