首页
社区
课程
招聘
[原创]帮一个破解不干净的程序擦PP(《加密与解密》第三版学习实践)
2010-3-23 11:59 4987

[原创]帮一个破解不干净的程序擦PP(《加密与解密》第三版学习实践)

2010-3-23 11:59
4987
【文章标题】: 帮一个破解不干净的程序擦PP(《加密与解密》第三版学习实践)
【文章作者】: coolfrog
【作者邮箱】: coolfrog@gmail.com
【加壳方式】: 无壳
【编写语言】: VC++ 6.0
【使用工具】: PEiD、VDebug
【作者声明】: 仅为学习研究之用,新人第一次学破解,属于现学现卖型,请大家批评指正。另外,感谢appleibm,我抄了你的文章格式:)
【背景介绍】:
一个朋友的SQL Server数据库MDF文件损坏,于是找了些工具帮着恢复,花了很长时间终于找到一个好用的工具,也找到了对应的patch文件(crack文件,老外做的,修改原始可执行文件,并随意填写License文件等,绕过检验,使其开放相关功能——演示版不具备的功能)。
结果很悲剧的是,在使用中发现,这个patch只是完成了“软件注册”这个环节的工作,该软件打开MDF文件让它处理时,它会根据“是否注册”来选择是否提供“修复文件”功能,如果未注册,将仅展示数据,但并不恢复文件供用户使用(就是只能看到自己的数据,但无法使用);
patch帮我们注册好了,所以它允许我们选择“修复文件”;
但是,这个工具在用户选择好待恢复文件及相关配置功能、存储位置之后,在预检测结束之后、真正恢复之前,还会检查一下license文件(KeyFile保护),如果文件不正确,就终止恢复操作。
郁闷啊!翻了几天《加密与解密第三版》,决定自己动手、丰衣足食!自己DIY破解破解吧。虽然汇编不熟悉,但是爆破还是可以尝试的嘛!
感慨:于对待技术真要严谨啊,国外的老兄发布破解程序前好歹要完整测试一下嘛,可不能看到大概行了就发布了……

【思路整理】
该程序运行过程如下:
1、        程序启动后,选择需要恢复的已损坏文件XXX.MDF(包括SQL Server版本);
2、        程序检查是否为注册版本(检查license文件等一系列信息),如果是未注册版本,就直接进行恢复,但是并不保存相关数据,而只是允许在界面上查看数据内容;如果是注册版本,就让用户选择将数据恢复到什么目录;——因为老外的patch帮我们完成了这个绕过工作,所以可以进行到这一步;
3、        一切就绪后,程序会做一些初始化工作,然后再次检查licesne文件等,如果正确,就进行真正的恢复;如果不正确,就报错,停止操作;——哈哈,如果爆破,就要找这个关键点啦!
4、        因此我们要找到上述关键跳,然后修改之,即可;
5、        当然,这里还有其他办法,例如上述2,可以查看数据但它不保存,我们也可以尝试去把它缓存的数据直接保存下来,等等,本文不研究这个,我还是初学者嘛。
--------------------------------------------------------------------------------
【详细过程】
  1、安装好程序,使用PEiD查壳,发现是VC++ 6.0,基本无壳;先用老外的patch修补之,我在这个基础上继续修补;

   2、使用VDebug加载程序,按F5执行程序,出现程序运行窗口;
  3、结合上述背景描述,知道这个程序肯定是在最后操作前,检查了一下Keyfile,因此,根据书上所说,对于CreateFileA设置一个断点,看看能不能发现些什么;
先在程序中选择需要恢复的MDF数据库文件,再选择恢复好之后需要存放的位置,不急着“确定”,回到VDebug中,设置断点:

检查断点

   4、回到程序窗口点确定,让它执行,中断后回到VDebug界面;

   5、用F10继续跟踪,这个过程不多说了,关键是要找到转向处理假license文件的那个“跳转”,所以每一个跳转都要留心看它下一步到底出现什么;
一路跟到程序报错:

到VDebug里面看看它的当前指令:

   6、这时候要注意了,跟踪到这里的前一步,其实就是我们要找的跳转(细心点跟踪,就会发现);

   7、因为程序已经提示license错误并终止操作,所以我们在上图的0040EB87附近设个断点(我设在前面一个指令那里了):

同时,取消之前设的断点:

   8、重新开始执行程序,到我们设的断点处中断了:

   9、来到我们怀疑的跳转地址前了,我们先把0040EB87处的跳转指令用NOP替换(内存填充),一会儿看看程序能正常工作不;



   10、记得把断点都取消了:

   11、回到VDebug,F10单步步过一下,看看指令对不对:

   12、看上去没问题,就直接F5执行下去啦,从应用程序界面看,工作正常:)

   13、退出VDebug,用LordPE查看程序镜像基址为00400000,使用Ultra Edit,换算内存地址0040EB87为文件地址0000EB87,查找到地址后,将E9FB090000改为9090909090,保存后即可:

   14、运行修改后的文件,OK啦,一切正常!


  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 不可违法使用,转载请注明作者并保持文章的完整,谢谢!

Coolfrog 与那些和我一样初学破解的朋友们共勉
2010-03-22

注意:下面有个图片,是之前传错的,我不知道怎么彻底删除,请新人不要点击下载,会扣Kx的:
(如果哪位斑竹能帮忙删掉最好了,谢谢!)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
打赏
分享
最新回复 (6)
雪    币: 6288
活跃值: (3234)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chinarenjf 2010-3-23 14:09
2
0
顶......
雪    币: 15578
活跃值: (3064)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hbkccccc 2010-3-23 16:58
3
0
thanks your sharing
雪    币: 421
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
大头和尚 2010-3-24 09:33
4
0
平时习惯OD了,VDebug没使用过,过程写的很详细。感谢
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
zhuwg 11 2010-3-25 11:58
5
0
不知道vdebug怎样使用?
雪    币: 928
活跃值: (26)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
coolfrog 2 2010-3-25 12:31
6
0
哦,不好意思,这个帖子是用的VDebug,这是我的一位好朋友以前自己写的一个调试器,因为其使用习惯和微软VS是一致的,所以很多时候我们喜欢用它(主要是快捷键的习惯方面);其本质和OD是一样的,也支持插件;我google了一下,他好像没有发布在网上,只是自己使用而已。网上可以找到另外一个VDebug(名称相同:),好像是一位做病毒引擎的同仁的作品。

如果有朋友感兴趣我可以另外介绍一下这个小工具。
雪    币: 1841
活跃值: (821)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
yijun8354 12 2010-3-25 15:06
7
0
是觉得看到眼生,原来是自己的呢
游客
登录 | 注册 方可回帖
返回