freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

逆向实战——32位和64位WinRAR破解及去广告
2019-11-21 09:19:57

32位winrar破解及去广告

首先要破解的是32位的WinRAR

众所周知每当我们在用WinRAR解压文件的时候都会弹出这个讨厌的广告页面,今天我们要解决的就是这个广告页面。

破解工具:OD,SPY++

我们通过用spy++可以看到广告窗口的class为RarReminder,这个我们先记住等下用来筛选断点使用。

1.jpg

      因为要弹出广告窗口,所以我们可以猜测创建窗口的API,然后下API断点,例如:我们可以猜测他使用的API为CreateWindowExW或CreateWindowExA等API,那么我们就可以根据我们的猜测来下API断点

      打开OD调试winRAR,我们先在下方的Command命令窗口输入bp CreateWindowExW下API断点,按下回车观察断点列表窗口是否下断成功

2.jpg

点击查看断点窗口,发现下断成功,然后按F9运行程序

3.jpg

      发现程序在此处断下来,然后我们通过栈回溯找到调用此函数的代码处,在下方箭头所指位置处按回车键进入

4.jpg

然后鼠标向上滑动看到CreateWindowExW函数,按CTRL+A系统分析出函数的参数数据

5.jpg

     我们通过查看函数原型可知,第二个参数Class即为指向注册类名的指针。

6.jpg

      根据我们上面用spy++查看的广告窗口的类名咱们可以用这个下条件断点来做出筛选,让程序在类名为RarReminder的地方断下来,我们返回刚才CreateWindowExW断点断下来的地方添加条件输入[UNICODE[ESP+0X8]]=="RarReminder"

7.jpg

然后按F9运行程序,程序就会断下来,此时堆栈显示如下

8.jpg

      说明我们正确断到了广告窗口的创建,然后在通过栈回溯点到上面的CALL到CreateWindowExW按回车,返回调用此函数的地方然后按下Ctrl+A分析一下,如下图所示

9.jpg

      此时我们就可以通过修改汇编代码让其不执行创建广告的CreateWindowExW,直接跳到CreateWindowExW的下一行指令。在上图的13FA879处按下空格

      直接输入下图的汇编指令然后确定,在修改后的的汇编指令上面点击会发现如下图椭圆形圈出来的地方,显示直接跳到了 CreateWindowExW函数的下一条指令

10.jpg然后我们点击右键复制到可执行文件——》所有修改——》全部复制  在出来的窗口右键,点击保存

11.jpg

      我起的名字是WinRAR去广告版,此时我们点击打开,已经看不到广告页面的弹出了,我们去广告就大功告成了。12.jpg

      但是此时我们的软件只是去掉了广告而已,并不是永久免费版的,随着时间的流逝软件会弹出一个这么令人讨厌的窗口如下图所示(PS:如果没有弹出的往后话修改下系统时间比如往后修改一年):

13.jpg

这就让人很难受啦,怎么办,搞掉它啊!!!!

      因为通过观察可以知道,弹出的这个东西是模态的而且里面也有文本和很多按钮,所以我们猜测可能是使用了DialogBoxParamA/W然后我们可以通过和上面方式一样的API断点来试试

把我们去广告版的winRAR拖入OD:下API断点回车,然后F9运行

14.jpg

发现断点断下如图,在下图箭头所指位置按回车回溯到调用此函数的地方:

15.jpg

按回车后按Ctrl+A分析一下:

16.jpg

函数原型为此,5个参数和OD上面显示的对应。

17.jpg

我们往上分析发现有一个JE指令。

18.jpg

这表明当TEST AL,AL使得ZF=1的时候才跳转:

19.jpg

      此时点击观察室跳转到上面,即不执行下面的创建提示购买窗口的代码,那么我们直接让其不需要判断跳转,直接改JE跳转为JMP跳转不就可以了吗

我们试一试

20.jpg

      此时修改完保存,运行发现注册购买窗口不见了,再次修改系统时间测试也不会再次弹出,此时就算真正的大功告成啦。

      但是又会有强迫症的同学就会说啦,我看着上面的标题(非商业个人版)不顺眼,我要改成我的名字才罢休,可以,没问题,话不多说,我们来搞。

21.jpg

      因为根据设置窗口标题的API我们猜测应该是使用了SetWindowTextW这个API,所以我们下API断点。根据以往的步骤找到调用此函数的代码处如图所示:

22.jpg

在这里我介绍两种修改标题的方法,

第一种:此方法修改汇编代码之前必须先去掉程序的随机基址。

          去掉随机基址的方法如下:把我们的程序用010Editer打开点击下面箭头所指的NtHeader然后在上方变蓝的数据块内找到4081,然后修改为0081即可(懂得PE文件的朋友可以也可以一层一层自己找到这个字段,就是WORD IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE这个字段 ,把值1改为0即可);Ctrl+S保存

23.jpg

我们此时回到OD:这是SetWindowText函数原型,参数如下图描述

24.jpg

这时我们就知道了Text参数即为窗口标题

25.jpg

      我们因为修改了随机基址(如果不修改随机地址,就需要自己重定位,算出压入字符串的地址,然后再 Push),所以我们可以直接修改ECX里面所存的内容即可,比如我想改为---郑小伦专用版,那么我们先Ctrl+B搜索一片为0的空间来存我们的新标题

26.jpg

然后点击确定然后在为00的汇编代码上双击到内存窗口写入我们的新标题,记住这个字符串的首地址

27.jpg

28.jpg

因为此API为SetWindowTextW所以我们要把我们的标题写在unicode里面。

然后我们返回刚才的Text位置

29.jpg

然后如前面所示,复制到可执行文件,然后运行即可看到,效果如下:

30.jpg

大功告成,下面我们介绍一种不需要去掉随机基址修改标题的方法。

第二种修改标题的方法:

我们还是Ctrl+B找一块为0的空间写上我们想要的标题,记住我们储存的字符串的首地址

31.jpg

       此时我们返回刚才的位置,修改获取字符串的方式,把原代码的 00BE3770 . 8D8C24 040400>LEA ECX,DWORD PTR SS:[ESP+0x404]处的汇编代码修改,修改如下

32.jpg

        因为我们没有去掉程序本身的随机基址,所以利用第一种方法的直接修改地址是行不通的,我们就采用相对位置来找到我们自己定义的字符串区域,因为相对位置无论基址怎么改变,2条指令的相对距离是不会变的,所以我们上图用 call 0x00BE3775(也就是下一跳指令的地址处),这样的话就把下一条指令的地址压入堆栈了,然后我们跳到个没用的空地处(上图选择JMP到了0x00BE3797处)然后POP ECX此时就相当于把刚才压入堆栈的那个地址赋给了ECX,然后我们用我们自定义的字符串的首地址(0xC1CCB6)减去ECX的地址(也就是0xBE3775)得到相对差值为0x39541,所以我们就ADD ECX,0x39541,找到我们的字符串的位置,存到ECX里面,然后再JMP回到PUSHECX,PUSH EDX的地方,这样传入的参数TEXT也就是ECX就是我们自己定义的字符串啦,这样就达到了随机基址下修改标题的功能啦。运行程序看下效果:

33.jpg

修改成功,至此就算真正的大功告成啦。

当然我们也可以用ResHack等软件来达到修改软件标题的目的,在我们这里就不再赘述啦。

64位winrar去广告

       新出的64位的winrar把广告页面直接换成了每日看点,而且有时候弹出来的界面很闪眼,不堪入目,所以说这个东西比以前单纯的一个广告页面还讨厌,所以说今天我们就把他给去除。

  34.jpg

 

首先我们要把WinRAR.exe拖入x64dbg

 

35.jpg

 

然后我们一直按F9运行,直到下图所指位置显示运行中,不是已暂停

 36.jpg

 

此时可以看到可恶的广告窗口果然弹出来了

 37.jpg

 

       此时我们在x64dbg中下一个 DestroyWindow 的API断点 ,如下图输入bp DestroyWindow然后按回车,然后可以查看断点列表确认是否下断成功

 

 38.jpg

       然后我们点击关闭广告页面,此时断点会断下来,然后我们在下图所示位置按回车,进行栈回溯,找到调用destorywindow的函数

 

39.jpg40.jpg

 

       然后我们分析一下这个函数,因为call DestoryWindow 这句指令的位置是0x00007FF676DCFC0B,我们可以先把这个地址复制出来备用,在指定指令上点击右键-->复制—>地址即可复制出来,到时候我们可以找个合适的位置直接跳到这个复制出来的地址,这样就可以直接执行销毁窗口函数了,也就达到了去广告的目的。

 360截图1672040178108117.jpg

        我们找到调用DestoryWindow函数的这个函数的开始位置,也就是鼠标网上划一直划到下图位置,我们往下看可以看到好多je跳转,这里没有具体分析都是什么情况下跳哪里,我们就直接把第一个je改为 jmp 0x00007FF676DCFC0B 也就是我们刚才找到的calldestorywindow那条指令的位置

 

42.jpg43.jpg

 

        修改完成之后点击下图像创可贴的那个图标进行保存为exe即可,然后替换原来的WinRAR.exe,然后此时打开就会发现,可恶的广告页面已经被消除了,这样我们每次解压文件就会快一秒,10次就会快十秒,那么1000次就会多出来一小时了,想想真是赚翻了呢~44.jpg45.jpg

PS:此帖只为小伙伴们解决一些生活上的小烦恼,不是什么技术贴,因本人写此帖子的时候也还是个学生,如有错误,还请大牛们多多指点,小弟感激不尽。(●'◡'●)


关注我们

Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。

想了解更多Tide安全团队,请关注团队官网: http://www.TideSec.com 或长按二维码关注公众号:

ewm.png

本文作者:, 转载请注明来自FreeBuf.COM

# 破解 # 逆向分析
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
评论 按时间排序

登录/注册后在FreeBuf发布内容哦

相关推荐
  • 0 文章数
  • 0 评论数
  • 0 关注者
登录 / 注册后在FreeBuf发布内容哦
收入专辑