估计这个版本的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。
x.com