好友
阅读权限20
听众
最后登录1970-1-1
|
【Blog】http://zzm139138.blog.163.com By:Kernel2008
【用到工具】OD,Peid,Keymaker
【调试平台】雨林木风ghost xp sp3
【目标程序】XXX邮件群发系统V2008build080606
【破文记录】Kernel2008
【软件下载】http://www.newhua.com
【破解记录】
使用Peid查壳,显示为:ASProtect 1.2x - 1.3x [Registered] -> Alexey Solodovnikov
使用Peid插件重新扫描下,显示为:Version: ASProtect 2.3 SKE build 04.26 Beta [3]
开始时我也是使用脚本在OD下脱掉目标程序上的壳,可是脱壳修复后发现该程序有自校验,一者为了省时,我就试着去调试该目标程序,结果发现可以调试(当然要用高点版本的OD并要使用插件隐藏OD才可以躲过该壳的检测,结果我成功了,庆幸下^_^!)下面就是具体的追码过程了,记录如下:
运行程序出现注册对话框,先看看程序的界面吧,我们就点击试用,程序标题有未注册的字样,好,我们关闭程序,尝试注册看看,输入假码Kernel2008,点击验证注册,提示要重启程序以验证注册。明显是重启验证注册类型,我们先不急,到它的安装目录看看敌情,发现目录下文件Setup.ini里有我们输入的假码Kernel2008,好,我们有了思路。载入目标程序于OD中,使用OD插件隐藏OD,接着在OD命令行下下拦截INI文件断点bp GetPrivateProfileStringA,回车,F9运行程序,此时注意堆栈窗口,我们按两次F9后就到达返回时机了。
2次F9后堆栈窗口中出现下面数据,即是开始读取Setup.ini文件了,数据信息如下-------->
0012F3B8 00C89F40 /CALL 到 GetPrivateProfileStringA
0012F3BC 01770890 |Section = "REGINFO"
0012F3C0 01779074 |Key = "REGNO"
0012F3C4 0050D8BC |Default = "01010101"
0012F3C8 0012F560 |ReturnBuffer = 0012F560
0012F3CC 00000800 |BufSize = 800 (2048.)
0012F3D0 01779188 \IniFileName = "C:\Documents and Settings\Administrator\桌面\200853094639428\Setup.ini"
0012F3D4 0050D340 ASCII "t8F"
F2取消断点,Alt+F9返回到程序领空,代码如下-------->
00C89F40 50 PUSH EAX
00C89F41 51 PUSH ECX
00C89F42 52 PUSH EDX
00C89F43 89E0 MOV EAX,ESP
00C89F45 B9 13000000 MOV ECX,13
00C89F4A 8B10 MOV EDX,DWORD PTR DS:[EAX]
00C89F4C 81C2 FB14FB14 ADD EDX,14FB14FB
00C89F52 85D2 TEST EDX,EDX
继续使用F8往下单步跟踪来到下面的代码-------->
0050D737 50 PUSH EAX
0050D738 8B0D 9C6A5100 MOV ECX,DWORD PTR DS:[516A9C]
0050D73E 8B09 MOV ECX,DWORD PTR DS:[ECX]
0050D740 8B15 5C6C5100 MOV EDX,DWORD PTR DS:[516C5C]
0050D746 8B12 MOV EDX,DWORD PTR DS:[EDX]
0050D748 A1 2C935100 MOV EAX,DWORD PTR DS:[51932C]
0050D74D 8B18 MOV EBX,DWORD PTR DS:[EAX]
0050D74F FF13 CALL DWORD PTR DS:[EBX]
0050D751 8B55 E0 MOV EDX,DWORD PTR SS:[EBP-20] //单步到这里,此时注意堆栈窗口,出现可疑数据
堆栈窗口出现的可疑字符串,不用怀疑,这里的00D4189CD6就是我们的机器码,而3AA094AF54CD0A4A183820E435A26CA2就是注册码了。F8继续往下单步跟踪吧。
0012FDCC 017791DC ASCII "Kernel2008"
0012FDD0 01779188
0012FDD4 01776394 ASCII "30"
0012FDD8 01779088 ASCII "00D4189CD6"
0012FDDC 01779074 ASCII "REGNO"
0012FDE0 01770890 ASCII "REGINFO"
0012FDE4 01773B24 ASCII "3AA094AF54CD0A4A183820E435A26CA2"
使用F8继续往下单步跟踪下去,看看有什么发现的,我们会来到如下代码-------->
0050D754 A1 BC6F5100 MOV EAX,DWORD PTR DS:[516FBC]
0050D759 E8 5273EFFF CALL e-mail.00404AB0
0050D75E 33C0 XOR EAX,EAX
0050D760 5A POP EDX
0050D761 59 POP ECX
0050D762 59 POP ECX
0050D763 64:8910 MOV DWORD PTR FS:[EAX],EDX
0050D766 68 7DD75000 PUSH e-mail.0050D77D
0050D76B A1 2C935100 MOV EAX,DWORD PTR DS:[51932C]
0050D770 E8 F363EFFF CALL e-mail.00403B68
0050D775 C3 RETN
0050D776 ^ E9 816BEFFF JMP e-mail.004042FC
0050D77B ^ EB EE JMP SHORT e-mail.0050D76B
0050D77D A1 D06A5100 MOV EAX,DWORD PTR DS:[516AD0]
0050D782 8B15 18725100 MOV EDX,DWORD PTR DS:[517218]
0050D788 8B12 MOV EDX,DWORD PTR DS:[EDX]
0050D78A E8 2173EFFF CALL e-mail.00404AB0 // 注意,寄存器窗口出现注册码
0050D78F A1 406C5100 MOV EAX,DWORD PTR DS:[516C40]
0050D794 8B15 BC6F5100 MOV EDX,DWORD PTR DS:[516FBC]
0050D79A 8B12 MOV EDX,DWORD PTR DS:[EDX]
0050D79C E8 0F73EFFF CALL e-mail.00404AB0 // 读取我们输入的假码kernel2008
0050D7A1 A1 386E5100 MOV EAX,DWORD PTR DS:[516E38]
0050D7A6 8B15 406C5100 MOV EDX,DWORD PTR DS:[516C40]
0050D7AC 8B12 MOV EDX,DWORD PTR DS:[EDX]
0050D7AE E8 FD72EFFF CALL e-mail.00404AB0
0050D7B3 A1 386E5100 MOV EAX,DWORD PTR DS:[516E38]
0050D7B8 8B00 MOV EAX,DWORD PTR DS:[EAX]
0050D7BA 8B15 D06A5100 MOV EDX,DWORD PTR DS:[516AD0]
0050D7C0 8B12 MOV EDX,DWORD PTR DS:[EDX]
0050D7C2 E8 A176EFFF CALL e-mail.00404E68 //这个是关键Call,下面的跳转即是关键跳!
0050D7C7 75 45 JNZ SHORT e-mail.0050D80E //传说中的关键跳,实现则验证注册失败,反之成功
0050D7C9 A1 386E5100 MOV EAX,DWORD PTR DS:[516E38] //下面没有价值往下跟踪分析了,到此可关闭OD了
在我机器上,我追码的结果如下:
机器码:00D4189CD6
注册码:3AA094AF54CD0A4A183820E435A26CA2
完成上面的操作,我们想做的当然就是使用keymaker制作个注册机了,好,我们找到关键CALL如下:
0050D7C2 E8 A176EFFF CALL e-mail.00404E68
那么制作注册机的相关信息可以如下(不唯一):
中断地址:0050D7C2
中断次数:1
第一字节:E8
指令长度:5
寄存方式:EDX
呵呵,好的,我们制作好了注册机,那运行注册机看看能否捕获我们的注册码。不妙,太可惜了,被ASProtect壳检测到,并以之为调试器而根本不让程序运行,如此这样对我们这些菜菜就无能为力了,只有搞懂该软件的注册算法,只有我们自己来写注册机了,可是目前的情况是不可能的了,至少对我来说,算法是个盲区。就这样吧,以后抓紧好好学习下算法。再见!(要得到注册码我们可以把目标程序载入OD,再用OD插件隐藏OD,再OD命令行下断点BP 0050D7C2然后F9几下程序就断下来了,注意寄存器窗口,就可以发现我们的注册码了,仅此!) |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|