前阵子重装系统,顺手下了一个免费的WinRAR(32位 版本号5.01)。用了没多久发现这货带NAG窗口,关闭NAG窗口后居然还跳出广告窗口,如下图,不胜其扰下决定去除NAG窗口。

毕竟WinRAR是商业软件,鬼知道有没有反调试机制,先把它拖进WinDIE发现无壳,还是c++代码,可以动手(商业软件居然不加保护,你跟鬼收钱啊)!

windbg(32位程序用windbg x86调试,如果用windbg x64进行调试,由于Wow64子系统的存在会影响分析过程)启动WinRAR(事后才发现用windbg调试虽然是无心之举,但给我省了很多事,后面会解释原因),等到WinRAR跳出NAG窗口时,break调试器,查看所有线程调用栈:

0:043> ~*kb0  Id: 1bfc.19f8 Suspend: 1 Teb: 00b14000 Unfrozen# ChildEBP RetAddr  Args to Child
00 00cf7a60 74629004 00040cca 00000001 00000000 win32u!NtUserWaitMessage+0xc
01 00cf7aa0 74624b0a 00000000 00000001 ffffffff USER32!DialogBox2+0x103
02 00cf7ad0 74624a22 00080bf2 0148e4b0 00000000 USER32!InternalDialogBox+0xdf
03 00cf7ae8 7466b2e5 013e0000 01592404 00080bf2 USER32!DialogBoxIndirectParamAorW+0x32
*** ERROR: Module load completed but symbols could not be loaded for WinRAR.exe
04 00cf7b14 0144db3d 013e0000 014bc27c 00080bf2 USER32!DialogBoxParamW+0x55
WARNING: Stack unwind information not available. Following frames may be wrong.
05 00cf7b34 77a9de96 77b00000 b51aa700 00000002 WinRAR+0x6db3d
06 00cf7b38 77b00000 b51aa700 00000002 00000002 ntdll!_SEH_epilog4_GS+0xa
07 00cf7b6c 6f772e62 325f726d 6a706928 3e4c3a6e ntdll!RtlpHpStackTraceAllocAdd+0x225

线程19f8的#04栈帧打印了程序进入了USER32!DialogBoxParamW函数,看来是这个线程弹出的对话框!目光集中在这个线程,再看下#05栈帧,WinRAR+0x6db3d是WinRAR调用USER32!DialogBoxParamW的偏移。把WinRAR拖进IDA,定位到调用处的偏移:

附带一句,由于ida给出的地址和windbg的实际运行的地址不同,所以在IDA中定位代码段类似做代码重定位,方法如下:

1).windbg给出的偏移是从程序加载的基址开始计算,像WinRAR+0x6db3d这个返回地址,其距离加载基址0x6db3d字节;

2).ida默认从.text节开始加载,对于未加壳的Win32程序,.text节所在地址减去0x1000得到程序加载的基址;

在View-"Open subviews"-Segments窗口中,IDA列出了各个节加载的地址(默认不显示PE头所在节),从中获得.text节的位置,如下图:

对于WinRAR,它在IDA中加载的地址是0x13E0000。

3.从2中获得的基址,加上windbg给出的偏移,得到代码段在IDA中的地址:0x13E0000+0x6db3d=0x144DB3D。这正是我截图中的地址。

回到正题,这个代码片会弹出NAG窗口,而再往上的一个代码片,它的作用是直接退出函数:

.text:0144DAFC loc_144DAFC:                            ; CODE XREF: PopActiveDialog+29↑j
.text:0144DAFC                 mov     ecx, [esp+101Ch+var_4]
.text:0144DB03                 xor     ecx, esp
.text:0144DB05                 call    @__security_check_cookie@4 ; __security_check_cookie(x)
.text:0144DB0A                 add     esp, 101Ch
.text:0144DB10                 retn    8

而唯一调用这个代码片的代码居然是在整个函数的入口附近:

PopActiveDialog         PopActiveDialog proc near               ; CODE XREF: sub_144DB60+4F0↓p
PopActiveDialog                                                 ; sub_1491860+7B3↓p ...
PopActiveDialog
PopActiveDialog
PopActiveDialog                         mov     eax, 101Ch
PopActiveDialog+5                      call    __alloca_probe
PopActiveDialog+A                      mov     eax, ___security_cookie
PopActiveDialog+F                      xor     eax, esp
PopActiveDialog+11                     mov     [esp+101Ch+var_4], eax
PopActiveDialog+18                     cmp     byte_1541414, 0
PopActiveDialog+1F                     jz      short loc_144D76F
PopActiveDialog+21                     cmp     [esp+101Ch+arg_4], 0
PopActiveDialog+29                     jz      loc_144DAFC

如此可见,winrar判断自身是否被激活就在函数入口的两个jz指令上。根据我的调试,进入函数后byte_1541414的值等于1;程序不会跳转,会向下执行准备弹NAG窗口。所以要去除NAG窗口就很简单了,把第1个jz改成jnz即可!准备上ollydbg!

然而上了ollydbg,才发现WinRAR针对ollydbg做了反调试:F9运行后,调试器会收到源源不断的异常事件,根本没法继续调试。

明明windbg运行的一马平川,为什么ollydbg就运行的这么艰难?我查了一下ollydbg和windbg异常处理的差异发现:

1.ollydbg默认在异常的first chance期间,将异常状态标记为Handled。由于异常状态标记为Handled,程序的异常处理部分被跳过,处理结果交给OS重新执行失败的指令;但是由于异常没有真正的解决,OS再一次将异常抛出给ollydbg处理,导致WinRAR反反复复的处理异常。

2.windbg默认在异常的first chance期间,将异常状态标记为UnHandled。由于异常状态标记为UnHandled,程序的异常处理代码开始工作,处理了异常并交给OS,所以能顺利的往下执行代码。

知道了这个差异后,就好解决了,设置ollydbg调试选项,让调试器忽略这些异常(交给WinRAR去处理),设置后ollydbg就能运行到NAG窗口:

修改汇编指令后,NAG窗口不再出现,连同广告窗口也没了,完美搞定~

去除WinRAR 5.01(32位) NAG窗口相关推荐

  1. WinRAR 4.10 32位 / 64位 + 注册机 + 烈火版

    WinRAR 是一款功能强大的压缩包管理器,它是档案工具RAR 在 Windows 环境下的图形界面.该软件可用于备份数据,缩减电子邮件附件的大小,解压缩从 Internet 上下载的 RAR.ZIP ...

  2. 最新Winrar 32位中国代理版爆破笔记

    winrar中国代理版本每次运行都会弹出广告窗口,并且主窗口标题栏会有许可到期时间的提醒,爆破的目的是去掉这两项. Winrar解压缩软件32位(5.71)版本下载地址: http://www.win ...

  3. WinRAR 6.01 官方中文正式版

    Winrar是一款功能强大的文件压缩解压缩工具.WinRAR64位支持目前绝大多数的压缩文件格式,包含强力压缩.分卷.加密和自解压模块,简单易用.WinRAR包含快速打开信息和服务记录的压缩文件提供了 ...

  4. WinRAR 6.01 官方版

    winrar官方版是一款功能非常强大的压缩包管理器,winrar支持多种压缩格式,如rar.zip等类型.winrar操作简单,界面友好,是我们电脑上必备的解压缩工具.如果你需要winrar解压缩工具 ...

  5. win10 计算机32位转64位,win1064位能改成32位吗_怎样把win10 64位转换为32位系统

    通常电脑如果是内存4G以上的话,都会安装64位系统,如果内存太小的话安装64位系统可能会出现卡顿的情况,有win1064位系统用户发现电脑配置低,运行又很卡,就想要改成32位系,不知道win1064位 ...

  6. nag在逆向中是什么意思_OD 实验(四) - 去除 NAG 窗口的几种方法

    程序: 运行 弹出一个窗口,说要注册 点击确定,到主窗口 关闭主窗口 然后弹出提醒注册的对话框 逆向程序 用 OD 打开程序 GetModuleHandleA 获取程序模块的句柄,程序在内存中的基址 ...

  7. 【Android 逆向】IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )

    文章目录 一.IDA 32 位 / 64 位 版本 二.汇编代码视图 IDA View-A 三.字符串窗口 Strings window 一.IDA 32 位 / 64 位 版本 IDA 安装完毕后 ...

  8. 4. OD-去除烦人的nag窗口(去除提醒用户购买正版的警告窗口)

    所有函数返回值均放入eax中 扩展修改nop 选中语句->右键菜单->二进制->用nop填充 三种方式 1. 修改标志位je为jmp 2. 扩选判断语句+call,全部改为nop 3 ...

  9. windows环境下32位汇编语言程序设计 90盘_Python 0基础详细教程 环境安装01

    Python语言有什么用,首先让大家了解Python语言的基本知识: Python语言是一种解释型,面向对象,动态数据类型的高级程序设计语言,Python语言是数据分析师的首选数据分析语言,通过数据挖 ...

最新文章

  1. LINUX下的21个特殊符号 转
  2. android 网络广播 类似QQ动态检查网络
  3. sudo自动键入密码
  4. 网站程序IIS布署问题备忘录
  5. Windows获取CPU、内存和磁盘使用率脚本
  6. 【实战 Ids4】小技巧篇:自定义登录页操作
  7. 2018年云计算大调查:五成开发者月入过万 阿里云称霸公有云市场
  8. 程序10 VC编写批量重命名工具
  9. c语言中'.'与'-'的区别
  10. 【POJ3277】City Horizon,线段树
  11. (90)FPGA比较器设计
  12. 为什么PHP能够受到大家追捧和喜爱,又为什么饱受嘲讽?
  13. linux远程仿真,11.5 仿真的远程桌面系统: XRDP 服务器
  14. Navicat Premium11连接Oracle出现ORA-28547:connection to server failed
  15. Ubuntu菜鸟入门(五)—— 一些编程相关工具
  16. 《GO语言实战》笔记
  17. my top visited webs
  18. 2. java压缩tar文件
  19. java 学生学籍管理系统_JAVA测验—学生学籍管理系统
  20. Python 面向对象解决跳马问题

热门文章

  1. 这段Rap火了!「中本聪VS汉密尔顿」谁有道理?(附视频)
  2. 自动驾驶之车辆运动学与动力学模型
  3. Elasticsearch 断路器报错了,怎么办?
  4. 微信又更新了,这次新增了一个大家喜闻乐见的新功能?
  5. UnityShader水体渲染
  6. 步进电机的使用教程以及步距角和细分讲解
  7. 区块链难理解?这里有一篇初学者指南
  8. bzoj 1064 noi2008 假面舞会题解
  9. cn.sample.mnn.detect A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid
  10. 6个超实用的自媒体工具,百万博主都在用