频道栏目
首页 > 资讯 > 加密解密 > 正文

逆向工程(三):实例破解

16-01-27        来源:[db:作者]  
收藏   我要投稿

本系列文章将讲解逆向工程的各种知识,难度由浅入深。 

补课:《逆向工程(一):汇编、逆向工程基础篇》(/Article/201511/451363.html)、《逆向工程(二):从一个简单的实例来了解PE文件》(/Article/201511/451761.html)

这次我们将破解一款真正的商业程序。

为了避免一些不必要的麻烦,选择的这款商业程序在2001年就停止维护了,所以我们可以放心大胆的破解学习!

(不要在这里灰心,即便是2001年的软件,仍有我们值得学习的地方!!)

这个软件也许我们在有些地方看过,很多教程都喜欢拿这个软件做靶子,但是我们还是要努力玩出一点花样,对不对,简简单单的破解当然学到的不会太多。

文中软件及原视频下载地址:http://pan.baidu.com/s/1ntlJ4Q9

无壳的实例

目标:破解软件功能限制

工具:OD

安装好这款软件打开如图:

 

这款软件有诸多功能限制,如:

 

当我们选择Add Group,提示没有注册只能创建3个Group:

 

选择Add,提示没有注册只能添加4个联系人:

 

 

我们打开About PixtopianBook,弹出未注册版本信息。

我们将其载入OD(建议下载一个原版OD#www.ollydbg.de#,我们尝试手动配置忽略异常)如图:

 

点击运行后,并没有出现程序界面,而是抛出了异常:

 

我们手动开启忽略异常:

 

打开后选择 exception:

 

勾选如上,再点击Add lase exception。

 

配置完成后点击OK。

 

配置完成后重新载入程序,点击运行,成功打开了程序。

 

正式开始!

1、Group

将软件载入OD,点击Add Group。

 

我们在其弹出消息框后暂停OD。

此时状态栏显示:暂停,我们此时需要返回到程序领空,快捷键Alt+F9。

 

然后点击消息框 确定 此时状态栏显示:返回到用户

 

我们成功返回到程序领空,向上翻。

 

看到了一个MessageBox,这就是我们刚才确定的那个消息框。

向下我们将

 

这个命令将带我们返回到调用CALL处。所以我们继续向下执行。

 

进行retn:

 

我们跳出了call,返回到了调用处、

我们看到:

1.这个Call就是我们刚才进入的Call,加入我们能跳过这个call,就能避免跳出消息框。

2.查看这个ascii码,正是消息框的标题和内容,在这里被压入栈,等待调用。

3.这里有一个cmp,比较eax与3大小(即Group是否等于3),如果小于就跳转到(JL)00408B34,如果已经有3个Group了,就执行call弹出未注册消息框。

 

你一定已经知道我们将要干什么了!

 

将JL(小于则跳转)改为jmp(强制跳转)。

这样我们就成功跳过了GROUP验证。

我们将其保存:

 

测试一下:

 

哈哈,已经可以自由添加Group了!!是不是很有成就感啊!学习逆向成就感很重要哦。

2、联系人

 

默认未注册用户只能添加四个联系人,我们采取同样方法:

1、弹出消息框后暂停

2、Alt+F9执行到用户代码

3、点击确定

 

跳转到这个位置,我们向上翻,看到同样的MessageBox,如下:

 

通过retn跳出call,回到调用处,向上翻:

 

1、这个call调用了MessageBox,弹出了消息框;

2、这句话同我们看到的一样,确定程序在这里将其压入栈;

3、比较eax与4的大小(联系人是否已经有4个),如果小于等于(JL)4个,那就跳过消息框,否则弹出未注册消息框。

我们同样修改jl为jmp,强制其跳转:

 

 

保存后测试一下:

 

我们又成功搞定了一个功能!这个阉割版已经成了注册版,不过还有一些美中不足的地方。比如:

 

 

那我们就开始让它从里到外都是注册版!

3、更改版本信息

 

标题,版本文字在代码区是找不到的,我们直接在内存中找

 

 

输入查找关键字UNREGISTERED:

 

如果ASCII没有搜索到就用UNICODE

(这里ASCII也可以搜索到,不过不是版本信息,UNICODE下搜索到版本信息,点击确定):

 

记录下004D4830,在dump面板跳转:

 

跳转之后成功找到需要修改的内容:

 

我们选择要修改的内容,右键编辑:

 

编辑为自己想写的字符,如下:

 

4、DIY标题

 

同样是在内存中查找,在弹出的搜索框里输入关键字:(UNREGISTERED VER

(一般情况下是不知道要搜索的文字是ascii还是unicode,我们会都尝试搜索一次。


 

 

记下004E4BE6,在dump窗口跟随:

 

找到需要修改的字符然后编辑:

 

确定后如下图所示:

 

5、更改提示注册文字

 

同理,我们在内存中搜索:

 

首先尝试UNICODE,没有搜索到结果。

再尝试ASCII搜索:

 

成功搜到了字符串:

 

记录下位置48F974,并跳转到该处:

 

用同样的方法编辑ASCII码:

 

编辑完成后如下:

 

在所有工作做完之后,不要忘记保存:

 

 

保存后我们查看效果:

 

 

6、结尾

我们仍发现了一些美中不足的地方。

在进入程序时,首先是欢迎信息:


 

几秒后变为:

 

我们想让它更加简洁,一直显示welcome信息,该怎么操作呢?

那我们开始进行最后一步!!

通过上面的操作我们已经知道了注册文字在48F974处,在dump(数据窗口)窗口右键跳转到48F974

 

我们需要知道程序哪一段调用了这段字符串。

我们右键选择查找参考(Ctrl+R)(个人觉得做汉化翻译得有点问题,这个命令的英文是Find references,意思应该是查找引用,参考这个词不太合适):

 

找到一处引用,我们双击进入:

 

我们来到如图所示的代码位置:

 

发现上面有一处cmp和jnz(cmp与jnz组合代表:如果不相等,则跳转),如果ebp等于907,则将这串字符压入栈(可以猜测,907代表未注册),我们根据跳转向上翻:

 

向上翻到这里:

 

又有一处cmp和jnz,意思是如果ebp不等于906,就要跳转回0040C22F处。

(我们可以猜测,906代表注册过)

这个程序我们已经完全弄清楚了,我们直接在0040C235的jnz处进行强制跳转,让其不会将这串字符压入栈:

 

修改后,我们最后一次保存:

 

打开:

 

整款软件已经被我们完全破解了!!

虽然这是一款2001年的软件,但这是我们破解的第一款真正的软件!所以今晚好好庆祝一下吧,我们在下一篇教程里再见!!

相关TAG标签
上一篇:Windows 10下注册表如何隐藏?
下一篇:Sniffly: 利用HSTS和CSP嗅探浏览器历史纪录
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站