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

2015-12-02 782844人围观 ,发现 20 个不明物体 系统安全

本文原创作者:VillanCh

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

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

另外,本站也整理了26款优秀的Android逆向工程工具,需要自取~

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

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

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

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

文中软件及原视频下载地址 密码: x3tv

无壳的实例

目标:破解软件功能限制

工具: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年的软件,但这是我们破解的第一款真正的软件!所以今晚好好庆祝一下吧,我们在下一篇教程里再见!!

*原创作者:VillanCh,本文属FreeBuf原创奖励计划文章,未经作者本人及FreeBuf许可,切勿私自转载

更多精彩
相关推荐

这些评论亮了

  • shentouceshi (4级) http://www.cnblogs.com/SEC-fsq... 回复
    @ gloomytime  我觉得这个都没关系,哪怕只是把别人的视频拿过来整理一下,只要对读者有帮助,都是值得鼓励的,况且作者还加入了自己的东西。
    )13( 亮了
  • ETenal 回复
    链接如下:http://yun.baidu.com/s/1eQAuQ6A
    )9( 亮了
  • ag2312 (1级) 回复
    好文!希望作者多分享一些,感谢作者。
    )9( 亮了
  • VillanCh (5级) Be quiet and listen more! 回复
    @ gloomytime  其实fishc的做法不是这样的吧,它好像是直接绕注册部分。和这个做法是不同的喔
    )9( 亮了
  • RipZ (3级) 安装TC130精神扰乱装置 回复
    niub
    )8( 亮了
发表评论

已有 20 条评论

取消
Loading...

特别推荐

文章目录

    文章目录

      推荐关注

      官方公众号

      聚焦企业安全

      活动预告

      填写个人信息

      姓名
      电话
      邮箱
      公司
      行业
      职位
      css.php