-
-
tElock 0.98 校验求助
-
发表于:
2004-10-4 13:52
4174
-
tElock0.98利用了Drx进行解码,下面这段是唯一用到Drx的代码(因为在此前下硬件断点都会导致校验值检查失败,但在这之后就不会),但是我看不出它在那里计算了校验值,哪位兄弟分析过帮忙看一下 //bow
;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
0101007A E8 00000000 CALL teNOTEPA.0101007F
0101007F 5D POP EBP
01010080 8D45 46 LEA EAX,DWORD PTR SS:[EBP+46]
01010083 50 PUSH EAX ;SEH handler -> 10100C5
01010084 33C0 XOR EAX,EAX
01010086 64:FF30 PUSH DWORD PTR FS:[EAX]
01010089 64:8920 MOV DWORD PTR FS:[EAX],ESP
0101008C CC INT3 ;INT 3 引发异常
0101008D 90 NOP
0101008E 8BC0 MOV EAX,EAX
01010090 F9 STC ; -> Dr3断点
01010091 90 NOP
01010092 8D045D 34120000 LEA EAX,DWORD PTR DS:[EBX*2+1234]
01010099 F8 CLC ; -> Dr2断点
0101009A 90 NOP
0101009B C1EB 05 SHR EBX,5
0101009E FC CLD ; -> Dr1断点
0101009F 90 NOP
010100A0 C1C0 07 ROL EAX,7
010100A3 90 NOP ; -> Dr0断点
010100A4 90 NOP
010100A5 33DB XOR EBX,EBX
010100A7 F7F3 DIV EBX ;除零异常
010100A9 64:67:8F06 0000 POP DWORD PTR FS:[0]
010100AF 83C4 04 ADD ESP,4 ;恢复SEH链
010100B2 66:BE 4746 MOV SI,4647
010100B6 66:BF 4D4A MOV DI,4A4D
010100BA 8A85 99000000 MOV AL,BYTE PTR SS:[EBP+99]
010100C0 E9 9C000000 JMP teNOTEPA.01010161
01010161 2C 04 SUB AL,4
01010163 8885 99000000 MOV BYTE PTR SS:[EBP+99],AL
01010169 8B95 AF1B0000 MOV EDX,DWORD PTR SS:[EBP+1BAF] ;取GetModuleHandleA的地址(OS装载的两个函数之一)
0101016F 81E2 0000FFFF AND EDX,FFFF0000
01010175 8BC4 MOV EAX,ESP ;这里EAX的值被覆盖。。。
01010177 33E4 XOR ESP,ESP
01010179 8BE0 MOV ESP,EAX
0101017B 66:813A 4D5A CMP WORD PTR DS:[EDX],5A4D ;开始扫描DOS MZ头部
;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
这里检查CRC
01011031 5F POP EDI
01011032 F7D0 NOT EAX
01011034 3387 8ED34000 XOR EAX,DWORD PTR DS:[EDI+40D38E]
0101103A 35 6137E43C XOR EAX,3CE43761
0101103F 3385 FED34000 XOR EAX,DWORD PTR SS:[EBP+40D3FE]
01011045 F7D0 NOT EAX
01011047 2B85 82D34000 SUB EAX,DWORD PTR SS:[EBP+40D382]
0101104D 61 POPAD
0101104E 0F85 27020000 JNZ teNOTEPA.0101127B ;这里跳了就说明CRC校验失败
[课程]Android-CTF解题方法汇总!