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

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

2010-3-23 11:59
5399
【文章标题】: 帮一个破解不干净的程序擦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的:
(如果哪位斑竹能帮忙删掉最好了,谢谢!)

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

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

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