这个软件是tElock1.0的壳脱了好久,一开始找到OEP之后,软件可以打开但是弹出错误提示框,以为是有自校验,后来论坛有人告诉我是脱壳后IAT没修复好。然后参考论坛的一篇文章开始脱壳,无奈在修改magic跳之后总是到达伪oep,所以求助各位大侠。。
下面是我的脱壳过程:
首先OD载入程序,设置除了忽略kernel32异常之外,其他异常全部不忽略,插件隐藏OD
入口代码
0093E09D >^\E9 5EDFFFFF jmp RED_MC.0093C000
0093E0A2 0000 add byte ptr ds:[eax],al
0093E0A4 00B9 5EE6BBE5 add byte ptr ds:[ecx+E5BBE65E],bh
0093E0AA E0 53 loopdne short RED_MC.0093E0FF
0093E0AC 0000 add byte ptr ds:[eax],al
0093E0AE 0000 add byte ptr ds:[eax],al
0093E0B0 0000 add byte ptr ds:[eax],al
0093E0B2 0000 add byte ptr ds:[eax],al
0093E0B4 0005 E15300F5 add byte ptr ds:[F50053E1],al
0093E0BA E0 53 loopdne short RED_MC.0093E10F
0093E0BC 00ED add ch,ch
0093E0BE E0 53 loopdne short RED_MC.0093E113
0093E0C0 0000 add byte ptr ds:[eax],al
0093E0C2 0000 add byte ptr ds:[eax],al
0093E0C4 0000 add byte ptr ds:[eax],al
0093E0C6 0000 add byte ptr ds:[eax],al
0093E0C8 0012 add byte ptr ds:[edx],dl
然后shift+F9运行,经过17次异常后到最后一次异常处
0093DC6B 64:FF31 push dword ptr fs:[ecx]
0093DC6E 64:8921 mov dword ptr fs:[ecx],esp
0093DC71 FF01 inc dword ptr ds:[ecx]-----------------到这里
0093DC73 ^ EB E8 jmp short RED_MC.0093DC5D
0093DC75 33C2 xor eax,edx
0093DC77 40 inc eax
0093DC78 2BC9 sub ecx,ecx
0093DC7A 64:8F01 pop dword ptr fs:[ecx]
0093DC7D 59 pop ecx
0093DC7E E8 00000000 call RED_MC.0093DC83
0093DC83 98 cwde
0093DC84 8B2C24 mov ebp,dword ptr ss:[esp]
0093DC87 58 pop eax
0093DC88 81ED 3F294100 sub ebp,RED_MC.0041293F
0093DC8E 98 cwde
0093DC8F 2BF6 sub esi,esi
0093DC91 81C6 34767D80 add esi,807D7634
0093DC97 81F6 515E3C80 xor esi,803C5E51
0093DC9D 33C5 xor eax,ebp
此时看堆栈的值:
0012FF40 0012FFC4 指针到下一个 SEH 记录
0012FF44 0093DC63 SE 句柄----------------------看这里
0012FF48 00000000
0012FF4C 00000000
0012FF50 0053AA24 RED_MC.0053AA24
在CPU窗口ctrl+G到:0093DC63
0093DC63 8B6424 08 mov esp,dword ptr ss:[esp+8]----这里F2下断
0093DC67 EB 0C jmp short RED_MC.0093DC75
0093DC69 2BC9 sub ecx,ecx
0093DC6B 64:FF31 push dword ptr fs:[ecx]
0093DC6E 64:8921 mov dword ptr fs:[ecx],esp
0093DC71 FF01 inc dword ptr ds:[ecx]
然后shift+F9运行,取消断点
将鼠标向上拖到代码的最顶上处
0093C000 000400 add byte ptr ds:[eax+eax],al----------这里
0093C003 006469 74 add byte ptr ds:[ecx+ebp*2+74],ah
0093C007 694D 5A 5000020>imul ecx,dword ptr ss:[ebp+5A],20050
0093C00E 0000 add byte ptr ds:[eax],al
0093C010 04 00 add al,0
0093C012 0F00 ??? ; 未知命令
0093C014 FFFF ??? ; 未知命令
于是在命令行下:tc eip<0093c000,中断在OEP处
007E4FDC 55 push ebp
007E4FDD 8BEC mov ebp,esp
007E4FDF B9 05000000 mov ecx,5
007E4FE4 6A 00 push 0
007E4FE6 6A 00 push 0
007E4FE8 49 dec ecx
007E4FE9 ^ 75 F9 jnz short RED_MC.007E4FE4
007E4FEB 53 push ebx
007E4FEC 56 push esi
007E4FED 57 push edi
007E4FEE B8 10467D00 mov eax,RED_MC.007D4610
007E4FF3 E8 38ACC2FF call RED_MC.0040FC30
007E4FF8 8B1D 40437F00 mov ebx,dword ptr ds:[7F4340] ; RED_MC.007FA3EC
007E4FFE 33C0 xor eax,eax
007E5000 55 push ebp
007E5001 68 D9527E00 push RED_MC.007E52D9
007E5006 64:FF30 push dword ptr fs:[eax]
007E5009 64:8920 mov dword ptr fs:[eax],esp
007E500C A1 5C457F00 mov eax,dword ptr ds:[7F455C]
007E5011 66:C780 BE00000>mov word ptr ds:[eax+BE],2E
在这里脱壳,然后修复的时候指针全部无效,用用ImportREC的level 1还是level 2、level 3及tElock插件都无法搜索到有效的函数,IAT已经被加密了
之后我就卡在这里了,本人菜鸟,求教大侠如何解密IAT
未脱壳软件地址:
http://pan.baidu.com/share/link?shareid=1132602126&uk=1780446887
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!