目标软件:TMG Clone CD 4.0.0.1 Keygen - 2nd Edition 目标文件:Clonecd4.0.0.1kg.exe 加壳方式:tElock v0.99 EGOiSTE//TMG shuffled 使用工具:SoftIce, LordPE, ImportREC 估计这个版本的telock应该还算新,而且里面包含椭圆曲线的keygen,想学椭圆曲线加密算法的可以拿来研究一下 用fi打开,显示 tElock v0.99 EGOiSTE//TMG shuffled, 启动si,然后bpint3,运行程序,会停在42E08C: .0042E084: 33C0 xor eax,eax .0042E086: 64FF30 push d,fs:[eax] .0042E089: 648920 mov fs:[eax],esp .0042E08C: CC int 3 .0042E08D: 90 nop .0042E08E: 8BC0 mov eax,eax .0042E090: F9 stc .0042E091: 90 nop .0042E092: 8D045D34120000 lea eax,[00001234][ebx]*2 .0042E099: F8 clc .0042E09A: 90 nop .0042E09B: C1EB05 shr ebx,005 ;"?" .0042E09E: FC cld .0042E09F: 90 nop .0042E0A0: C1C007 rol eax,007 ;"?" .0042E0A3: 90 nop .0042E0A4: 90 nop .0042E0A5: 33DB xor ebx,ebx .0042E0A7: F7F3 div ebx .0042E0A9: 64678F060000 pop d,fs:[0000] .0042E0AF: 83C404 add esp,004 ;"?" .0042E0B2: 66BE4746 mov si,04647 ;"FG" .0042E0B6: 66BF4D4A mov di,04A4D ;"JM" int3的处理代码在42E0C5(如下),这一段应该是对当前程序的调试状态进行检查。正是由于这一段代码,导致在si里面g和bpm都不能用,因为在后面会修改堆栈中的一段结构,将一个值修改为42E090,如果有g或bpm都会让si在42E090停下来,而实际上正常运行时应该跳到42E091,也就是没有stc,我对这些结构还不熟悉,所以也不敢在这里妄加分析。 .0042E0C5: 8B442404 mov eax,[esp][04] .0042E0C9: 8B4C240C mov ecx,[esp][0C] .0042E0CD: FF81B8000000 inc d,[ecx][000000B8] .0042E0D3: 8B00 mov eax,[eax] .0042E0D5: 3D940000C0 cmp eax,0C0000094 ;"└ ?" .0042E0DA: 7524 jne .00042E100 -----↓ (1) .0042E0DC: FF81B8000000 inc d,[ecx][000000B8] .0042E0E2: 33C0 xor eax,eax .0042E0E4: 214104 and [ecx][04],eax .0042E0E7: 214108 and [ecx][08],eax .0042E0EA: 21410C and [ecx][0C],eax .0042E0ED: 214110 and [ecx][10],eax .0042E0F0: 816114F00FFFFF and d,[ecx][14],0FFFF0FF0 ;"??? .0042E0F7: 81611800DC0000 and d,[ecx][18],00000DC00 ;" ▄ .0042E0FE: EB60 jmps .00042E160 -----↓ (2) .0042E100: 3D04000080 cmp eax,080000004 ;"? ?" .0042E105: 740C je .00042E113 -----↓ (3) .0042E107: 3D03000080 cmp eax,080000003 ;"? ?" .0042E10C: 7412 je .00042E120 -----↓ (4) .0042E10E: 6A01 push 001 .0042E110: 58 pop eax .0042E111: EB4D jmps .00042E160 -----↓ (5) 所以停在int3后,把bpm都禁掉,然后bpx 42E091,F5,停在42E091后禁掉所有bpx的断点(后面会有crc校验),然后下bpm 12ffa4(在程序入口处跟完那个pushad后记下的esp值,如果壳会恢复堆栈的话就可以这样做,但新版aspr不会),F5,ok了,现在停下来的地方就是oep的前一条跳转指令jmp [esp-30] .0042F7B1: FF6424D0 jmp d,[esp][-30] 在这里把程序dump下来,修改oep,修复imp表,脱壳即告完成。 这里面用到了很多anti技术和内存/文件校验,如果想提高技术的话,最好自己慢慢跟到入口,可能会比较麻烦,小心那些pushf。 谁有空研究一下上面那个int3的处理再报告大家吧 |