本文适合新人学习讨论。在看雪我也是新人一个,研究加解密也有一两年时间了,在这里写编文章希望能得到邀请码和各位大牛多多指教。
运行软件,试着查看软件的加密方式,在菜单的帮助—注册使用任意码注册看看有什么提示,如图:
有错误提示,这些提示也许就是我们对该软件分析的突破口了,使用peid v0.95查壳-,是ASPack 2.12 -> Alexey Solodovnikov,如图:
既然有壳,那我们就从脱壳开始吧,od加载软件,入口代码为:
00AE0001 > 60 pushad
00AE0002 E8 03000000 call KHRMS.00AE000A
00AE0007 - E9 EB045D45 jmp 460B04F7
00AE000C 55 push ebp
00AE000D C3 retn
00AE000E E8 01000000 call KHRMS.00AE0014
00AE0013 EB 5D jmp XKHRMS.00AE0072
00AE0015 BB EDFFFFFF mov ebx,-0x13
00AE001A 03DD add ebx,ebp
00AE001C 81EB 00006E00 sub ebx,KHRMS.006E0000
下面就用ESP定律脱壳,按F8一次单步,此时右边寄存器ESP的值为0012FFA4,点击0012FFA4再 右键—数据窗口中跟随,如图:
到这里,就要到数据窗口下硬件访问断点了,操作如图所示:
下好断点,直接F9运行,程序来到地址为00AE0416处被断了下来,此时就要取消硬件断点了,菜单的调试—硬件断点—删除—确定。再F8单步走,到了007CFFB4 55 push ebp,那就是程序的OEP了。
在该地址上右键---用OD脱壳调试进程,弹出窗口按“脱壳”,把程序保存下来,关闭OD,脱壳完毕,运行脱壳后的软件一切正常,peid查是Borland Delphi 6.0 - 7.0。
Od加载脱壳后的程序,利用在反汇编窗口“右键—中文搜索引擎--搜索ASCII”的方法找找到了注册码错误提示的地方,代码段如下:
0079BE92 |. 8B55 E8 mov edx,[local.6]
0079BE95 |. 58 pop eax
0079BE96 |. E8 5193C6FF call tuo.004051EC
0079BE9B |. 0F85 E8000000 jnz tuo.0079BF89
0079BEA1 |. A1 14C17E00 mov eax,dword ptr ds:[0x7EC114]
0079BEA6 |. 8B00 mov eax,dword ptr ds:[eax]
0079BEA8 |. 8B90 94080000 mov edx,dword ptr ds:[eax+0x894]
0079BEAE |. 8D45 F8 lea eax,[local.2]
0079BEB1 |. B9 00C07900 mov ecx,tuo.0079C000 ; Setup.ini
0079BEB6 |. E8 3192C6FF call tuo.004050EC
0079BEBB |. 8B4D F8 mov ecx,[local.2]
0079BEBE |. B2 01 mov dl,0x1
0079BEC0 |. A1 48794400 mov eax,dword ptr ds:[0x447948]
0079BEC5 |. E8 2EBBCAFF call tuo.004479F8
0079BECA |. 8BF0 mov esi,eax
0079BECC |. 8D55 DC lea edx,[local.9]
0079BECF |. 8B83 0C030000 mov eax,dword ptr ds:[ebx+0x30C]
0079BED5 |. E8 5A9CCEFF call tuo.00485B34
0079BEDA |. 8B45 DC mov eax,[local.9]
0079BEDD |. E8 220BC7FF call tuo.0040CA04
0079BEE2 |. D805 0CC07900 fadd dword ptr ds:[0x79C00C]
0079BEE8 |. 83C4 F4 add esp,-0xC
0079BEEB |. DB3C24 fstp tbyte ptr ss:[esp]
0079BEEE |. 9B wait
0079BEEF |. 8D45 E0 lea eax,[local.8]
0079BEF2 |. E8 8D09C7FF call tuo.0040C884
0079BEF7 |. 8B55 E0 mov edx,[local.8]
0079BEFA |. 8D4D E4 lea ecx,[local.7]
0079BEFD |. A1 14C17E00 mov eax,dword ptr ds:[0x7EC114]
0079BF02 |. 8B00 mov eax,dword ptr ds:[eax]
0079BF04 |. E8 DF610000 call tuo.007A20E8
0079BF09 |. 8B45 E4 mov eax,[local.7]
0079BF0C |. 50 push eax
0079BF0D |. B9 18C07900 mov ecx,tuo.0079C018 ; VersionInfo
0079BF12 |. BA 2CC07900 mov edx,tuo.0079C02C ; Register
0079BF17 |. 8BC6 mov eax,esi
0079BF19 |. 8B38 mov edi,dword ptr ds:[eax]
0079BF1B |. FF57 04 call dword ptr ds:[edi+0x4]
0079BF1E |. A1 14C17E00 mov eax,dword ptr ds:[0x7EC114]
0079BF23 |. 8B00 mov eax,dword ptr ds:[eax]
0079BF25 |. C780 AC080000>mov dword ptr ds:[eax+0x8AC],0x2
0079BF2F |. B2 01 mov dl,0x1
0079BF31 |. 8BC6 mov eax,esi
0079BF33 |. 8B08 mov ecx,dword ptr ds:[eax]
0079BF35 |. FF51 FC call dword ptr ds:[ecx-0x4]
0079BF38 |. BA 40C07900 mov edx,tuo.0079C040 ; 软件已注册
0079BF3D |. A1 BCC37F00 mov eax,dword ptr ds:[0x7FC3BC]
0079BF42 |. E8 1D9CCEFF call tuo.00485B64
0079BF47 |. A1 BCC37F00 mov eax,dword ptr ds:[0x7FC3BC]
0079BF4C |. 8B80 10030000 mov eax,dword ptr ds:[eax+0x310]
0079BF52 |. BA 54C07900 mov edx,tuo.0079C054 ; 感谢您的注册,使用中遇到任何问题,欢迎咨询客服。
0079BF57 |. E8 089CCEFF call tuo.00485B64
0079BF5C |. A1 BCC37F00 mov eax,dword ptr ds:[0x7FC3BC]
0079BF61 |. 8B80 0C030000 mov eax,dword ptr ds:[eax+0x30C]
0079BF67 |. 33D2 xor edx,edx
0079BF69 |. 8B08 mov ecx,dword ptr ds:[eax]
0079BF6B |. FF51 64 call dword ptr ds:[ecx+0x64]
0079BF6E |. 6A 40 push 0x40
0079BF70 |. 68 88C07900 push tuo.0079C088 ; 提示
0079BF75 |. 68 90C07900 push tuo.0079C090 ; 注册成功,感谢您的注册!
0079BF7A |. 8BC3 mov eax,ebx
0079BF7C |. E8 3B06CFFF call tuo.0048C5BC
0079BF81 |. 50 push eax ; |hOwner
0079BF82 |. E8 A5CAC6FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
0079BF87 |. EB 26 jmp Xtuo.0079BFAF
0079BF89 |> 6A 10 push 0x10
0079BF8B |. 68 ACC07900 push tuo.0079C0AC ; 错误
0079BF90 |. 68 B4C07900 push tuo.0079C0B4 ; 注册失败,请检查注册序列号是否填写正确!
0079BF95 |. 8BC3 mov eax,ebx
0079BF97 |. E8 2006CFFF call tuo.0048C5BC
0079BF9C |. 50 push eax ; |hOwner
0079BF9D |. E8 8ACAC6FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
0079BFA2 |. 33D2 xor edx,edx
0079BFA4 |. 8B83 0C030000 mov eax,dword ptr ds:[ebx+0x30C]
0079BFAA |. E8 B59BCEFF call tuo.00485B64
0079BFAF |> 33C0 xor eax,eax
经过简单的分析,初步断定地址0079BE96的call 为关键call,地址0079BE9B的跳为关键跳。我们就带着这问题,在0079BE9B处按F2下断,F9运行程序,再试着任意码注册。程序在0079BE9B被断了下来,看反汇编代码如果跳转成功,程序提示注册码错误,如果不跳,程序提示注册成功。在0079BE9B处,右键--二进制--用nop填充。修改前,如图:
修改后,如图:
F9直接运行程序,程序提示注册成功,再一次点击注册的时候,序列号处已经成为真正的注册码了,到了这里,就剩下最后一步了--把修改好得程序保存下来。
回到刚才修改代码的地方,右键--复制到可执行文件--所有修改--全部复制,在弹出窗口中右键--保存文件。(这步其实可以略的,因为正确的注册码已经写到ini文件了,注册码保存在安装目录下得ini文件里。)
运行原程序,查看注册信息(偶尔也试过不成功,如果是就用真正注册码在源程序注册一下就好了),感受自己成功的喜悦。
接下我会抽空把招聘管理系统最新3.5版的加密与解密分析也写写,3.5版比起3.4版难度可大多了。我希望我能申请到邀请码,让我也喜悦喜悦,
祝大家在看雪学习愉快!!!
[课程]Android-CTF解题方法汇总!