简单脱双层壳+注册机编写CrackMe分析(高手路过)
虽然来PYG好久了,但这是我的处女作,希望大家支持,随便找了一个CrackMe,是PYG的,加了双层壳,下面我写一下脱壳加简单追码和注册机的编写,有可能有人写过了,不过这都是我自己的实践,呵呵,不多说了,开始。老规矩PEID 0.94查壳(图见附件),
nSPack 2.2 -> North Star/Liu Xing Ping加了两层壳(分步来脱的话还会有UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo这个壳)。
用OD载入停在jmp 00422FC5处,F8步进,来到这里
00422FC5 9C pushfd
00422FC6 60 pushad
00422FC7 E8 00000000 call CrackMe0.00422FCC
00422FCC 5D pop ebp
这就是壳的入口了,再按F8,发现寄存器窗口中ESP变化了,
EAX 00000000
ECX 0013FFB0
EDX 7C92EB94 ntdll.KiFastSystemCallRet
EBX 7FFD9000
ESP 0013FFC0
EBP 0013FFF0
ESI FFFFFFFF
EDI 7C930738 ntdll.7C930738
下硬件断点hr 0013FFC0,再按F9运行至
0042323F - E9 1CC5FFFF jmp CrackMe0.0041F760
00423244 8BB5 1FFEFFFF mov esi,dword ptr ss:
0042324A 0BF6 or esi,esi
0042324C 0F84 97000000 je CrackMe0.004232E9
同上F8步进,来到这里
0041F760 60 pushad
0041F761 BE 00B04000 mov esi,CrackMe0.0040B000
0041F766 8DBE 0060FFFF lea edi,dword ptr ds:
0041F76C 57 push edi
0041F76D 83CD FF or ebp,FFFFFFFF
0041F770 EB 10 jmp short CrackMe0.0041F782
继续F8发现ESP又变了,
EAX 00000000
ECX 0013FFB0
EDX 7C92EB94 ntdll.KiFastSystemCallRet
EBX 7FFD9000
ESP 0013FFA4
EBP 0013FFF0
ESI FFFFFFFF
EDI 7C930738 ntdll.7C930738
先清除上一个断点 hd 0013FFC0,然后下hr 0013FFA4,F9运行至
0041F8B8 ^\E9 B921FEFF jmp CrackMe0.00401A76
0041F8BD 0000 add byte ptr ds:,al
0041F8BF 0000 add byte ptr ds:,al
再按一下F8便来到
00401A76 55 push ebp
00401A77 8BEC mov ebp,esp
00401A79 6A FF push -1
00401A7B 68 40254000 push CrackMe0.00402540
00401A80 68 FC1B4000 push CrackMe0.00401BFC ; jmp to msvcrt._except_handler3
00401A85 64:A1 00000000 mov eax,dword ptr fs:
00401A8B 50 push eax
00401A8C 64:8925 00000000mov dword ptr fs:,esp
00401A93 83EC 68 sub esp,68
这便是典型的VC程序的入口特征,所以OEP=401A76-400000=1A76。
用LordPE Dump后保存为dumped.exe,然后Import REC ,填入OEP,IAT AutoSearch,改size为1000,Get Imports, Fix Dump,选择dumped.exe, 修复好的程序保存为dumped_.exe.
现在OD载入dumped_.exe,查找字符串,出现如下图窗口,点击注册成功,来到
00401726 8B7424 48 mov esi,dword ptr ss:
0040172A 8B46 64 mov eax,dword ptr ds:
0040172D 50 push eax
0040172E FF15 C4214000 call dword ptr ds:[<&msvcrt._mbscmp>]; msvcrt._mbscmp
00401734 83C4 38 add esp,38
00401737 85C0 test eax,eax
00401739 75 12 jnz short dumped_.0040174D
0040173B 50 push eax
0040173C 68 2C304000 push dumped_.0040302C
00401741 68 20304000 push dumped_.00403020
00401746 8BCE mov ecx,esi
00401748 E8 BD020000 call <jmp.&mfc42.#4224>
0040174D 6A 00 push 0
现在大家应该看到了上面有一个msvcrt._mbscmp函数,是比较的,毫不犹豫,F2下断,Ctrl F2,重新运行,F9运行出现注册窗口,填入用户名和随意注册码,确定,至中断处,这时大家看到了什么?
不用怀疑,那就是注册码!!!
下面做内存注册机,用KeyMaker,其他,内存注册机,载入原带壳程序,点添加,如下图添加数据即可,点生成,选择界面,保存为Keygen.exe。
现在打开Keygen.exe,同样填入相同信息,出现如下图界面,复制注册码即可注册成功(如图)!
[ 本帖最后由 sdprtf 于 2007-12-15 23:40 编辑 ] 呵呵..支持你.要不我们一起研究算法吧?..好像挺复杂的.40行有的. 好啊,一起研究下! 好!
偶学习学习! ,...能做个教程就更好了.. /:001 按步骤来一遍,,看看结果如何 /:014 没看文章前自己玩了一下。。。发现直接用OD插件的来脱,,不用修复。。
不懂这个‘msvcrt._mbscmp函数,是比较的’
跑到 ‘004015F5请输入完整信息!’前面的call下断。。。一路F8下来真辛苦 /:001/:001 最后也成功了。。。 能做个教程就更好了/:L /:L 学习了,:victory: :victory: 学习,学习,初学者拜师啊
页:
[1]
2