sdprtf 发表于 2007-12-15 23:27:25

简单脱双层壳+注册机编写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 编辑 ]

blitz 发表于 2007-12-16 16:23:18

呵呵..支持你.要不我们一起研究算法吧?..好像挺复杂的.40行有的.

sdprtf 发表于 2007-12-16 21:15:45

好啊,一起研究下!

xxfby 发表于 2007-12-18 05:00:50

好!

偶学习学习!

爱民 发表于 2007-12-18 21:21:25

,...能做个教程就更好了..

magic659117852 发表于 2007-12-24 20:38:57

/:001 按步骤来一遍,,看看结果如何

magic659117852 发表于 2007-12-24 21:33:07

/:014 没看文章前自己玩了一下。。。发现直接用OD插件的来脱,,不用修复。。

不懂这个‘msvcrt._mbscmp函数,是比较的’

跑到   ‘004015F5请输入完整信息!’前面的call下断。。。一路F8下来真辛苦 /:001/:001   最后也成功了。。。

dytgt 发表于 2007-12-26 23:20:40

能做个教程就更好了/:L /:L

fbi007r9 发表于 2008-1-4 08:32:28

学习了,:victory: :victory:

bsuc 发表于 2008-2-22 10:33:39

学习,学习,初学者拜师啊
页: [1] 2
查看完整版本: 简单脱双层壳+注册机编写CrackMe分析(高手路过)