最近朋友在玩这个游戏,拿来以后觉得还不错,因为游戏不能双开。。。所以额。。
本人也菜,除了用工具脱基本手动就是白痴。。。对于我这样的菜鸟,只能马马虎虎脱脱小软件咯~~
不多说了,程序分析如下:
程序直接OD载入,取消分析,经PEID查看为
yoda's cryptor 1.x / modified
00647060 > pushad
00647061 call 00647066
00647066 pop ebp
00647067 sub ebp, 00401E0F
0064706D mov ecx, 957
00647072 lea edi, dword ptr [ebp+401E57]
00647078 mov esi, edi
0064707A lods byte ptr [esi]
0064707B clc
0064707C rol al, 4E
0064707F sub al, 0DC
00647081 rol al, 42
00647084 rol al, 85
00647087 sub al, cl
00647089 jmp short 0064708C
0064708B retn 90F9
怎么办呢,找工具去,名字叫
CDW's Dark Side Stealth Detector & Shield Destroyer 可以轻松脱掉yoda这个恶心的壳壳。。
接着重新打开我们脱好的主程序,又要求分析。。。难道是双重壳?于是又用PEiD打开了一下。。。
果然发现
ASProtect 1.2X,这个嘛,继续找工具
stripper v2.07 (final with HT)。脱完以后再用OD载入就正常了。。
双层壳到此脱掉~~~~~~
------------------------------------------------华丽的分割线-------------------------------------------------
OD载入最终的EXE,后
0064A000 >mov ebx, 320
0064A005 jmp 0064A073
0064A00A nop
0064A00B nop
0064A00C nop
奇怪的OEP入口点,怀疑是脱壳之后有问题,但是程序照样可以正常执行。
我们既然要双开,就肯定要查找模块名称的,程序经过我的分析,不是通过CreateMutex互斥来防止多开,而是使用了FindWindow。。。
我们在命令行里面输入
bpx FindWindowA 然后F9
程序跳到这里
004039C8
jmp short 004039CA
004039CA mov esi, dword ptr [<&user32.Fi>; USER32.FindWindowA
004039D0 push ebx ; /Title => NULL
004039D1 push 005CEA78 ; |Class = "D2MainWindow"
004039D6 call esi ; \FindWindowA
004039D8 test eax, eax
004039DA
jmp short 004039DC
004039DC lea ecx, dword ptr [ebp-294]
004039E2 push ecx ; /Title
004039E3 push ebx ; |Class => 0
004039E4 call esi ; \FindWindowA
004039E6 test eax, eax
004039E8
jmp short 004039F1
004039EA mov byte ptr [ebp-295], 1
004039F1
mov eax, dword ptr [6262C0]
大家的程序也许和我看到的会不一样,对,因为蓝色部分是我已经修改好的代码,改成这个样子程序最后就可以双开了
这段代码的大概意思就是查找窗口如果有相同的标题或Class,就跳出返回并连续弹出了三个恶心的对话框。。。
其实,最终的主要目的还是红色的那一句,要把006262C0地址里面的数据传入eax
这样,程序终于可以双开,大功告成^^
总结:双层壳比较恶心,尝试了手脱一直不会搞,都脱了以后的话,双开自然就好搞了,无非就是那几个函数,高级一点的会QueryProcess,无所谓啦,好象CreateMutexA也可以拦截,大家多试试呗,不行就用我这个笨方法吧^^
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课