前段时间,下载了一个软件(见附件),是个智能手机的商业计划书,点击运行,看了一段时间后,出现一个对话框,上面提示:
预览时间结束,您需要 输入密码 才能继续浏览。
免费获取密码的方式:
第一步:注册成为论坛用户
第二步:访问以下地址网页,申请信息认证
第三步:访问以下地址网页,获取密码
正准备注册,突然想到,为何不将它破解?于是使用PEID先查壳:
Upx 0.89.6-1.02/1.05 – 1.24(delphi) stub -> markus & laszlo [overlay]
于是调入OD,先进行脱壳,脱壳过程不再细说,一直使用F8,碰到向上的跳转则在下个指令处使用F4跳过,最后来到:
004C1625 61 popad
004C1626 8D4424 80 lea eax,dword ptr ss:[esp-80]
004C162A 6A 00 push 0
004C162C 39C4 cmp esp,eax
004C162E ^ 75 FA jnz short 智能手机.004C162A
004C1630 83EC 80 sub esp,-80
004C1633 ^ E9 686CFDFF jmp 智能手机.004982A0
004982A0就是OEP了,F8下一步到达:
004982A0 55 push ebp
004982A1 8BEC mov ebp,esp
004982A3 83C4 F0 add esp,-10
004982A6 B8 A07F4900 mov eax,智能手机.00497FA0
004982AB E8 48E7F6FF call 智能手机.004069F8
004982B0 A1 5CB34900 mov eax,dword ptr ds:[49B35C]
004982B5 8B00 mov eax,dword ptr ds:[eax]
004982B7 E8 9C1EFDFF call 智能手机.0046A158
熟悉DELPHI的人一看就知道这是DELPHI程序的入口特征了。然后使用LOADPE脱壳,修正文件大小,完整脱壳的步骤不必细说;脱壳完成后,使用importREC_Fix进行修复,这个过程也很顺利,也不详细说描述。修复完成后,运行程序,不妙,提示:“文件已经破坏,无法播放”。
再回到刚开始用PEID查壳的地方,看到什么:Upx 0.89.6-1.02/1.05 – 1.24(delphi) stub -> markus & laszlo [overlay]------------------ [overlay]已经告诉我们了,有附加数据。再看脱壳后的文件大小:804 KB,原文件大小:905 KB,脱壳后的文件比原文件还小,这清楚不过了,要处理附加数据。
附加数据的一般处理方法:原程序最后一个区段的ROFFSET+RSIZE就是附加数据的起始地址!使用PEID查看加壳程序的区段:
起始地址=0003FC00+00004000=00043C00,使用WINHEX拷贝吧。
用WINHEX打开加壳的原程序,找到00043C00,从这里最末尾的数据全部复制(要定义块的开始和结束),再用WINHEX打开脱壳修复后的程序,拉到文件的最后,粘贴(WINHEX的用法自己找资料学习哦)!!!然后保存成另外一个名字吧。
运行最后修复的程序,OK了,用PEID查:Borland Delphi 6.0 - 7.0 [Overlay]。
最后一步,破解。破解的思路是什么呢?常规的方法是在注册窗口中输入用户名和密码后,根据提示进行跟踪算法或者暴力破解,我这里采用了另外一个方法。因为我注意到运行一段时间后才出现那个注册窗口,也在那个软件压缩包中的一个文件里找到这么一段话:
“本EXE文档是由 XX设计天下网WWW.XXXX.COM 制作的。用户可预览100s,预览结束后,需要输入密码才能继续浏览。”
猜想程序里一定有个定时器,定时器的时间一到就会触发一个函数提示注册,那只要找到这个函数的地址,将第一条指令改成C3(RETN),不就达到目的了么?!怎么找到这个函数的地址呢?对于DELPHI程序,亮出DEDE利器吧。
用DEDE载入脱壳修复后的文件,在过程标签里找到playtimeTIMER事件,如下图:
用OD载入脱壳修复后的文件,CTRL+G输入:004962E8,看到:
004962E8 55 push ebp
004962E9 8BEC mov ebp,esp
004962EB 33C9 xor ecx,ecx
呵呵,什么也不要再想了,将第一条指令:55 改成 c3吧,保存。
运行,一切搞定。感谢黑鹰。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!