WinRAR
寻找切入点
预览程序,寻找切入点:
两个点:一个是窗口上有 评估版本 字样,另一个是有广告弹窗。
我感觉从 setwindowtext
入手好像要简单一些。
开始调试
用x64dbg调试,运行到 entrypoint
切换到 符号
窗口,选择 winrar.exe
,搜索 setwindowtext
下断。
运行到断点位置,在栈窗口寻找函数调用地址
返回到程序领空,此刻按 ctrl+a
分析当前函数块,来到函数开始位置下断
重载程序,运行到上述断点位置后,F8
单步跟进,很快便发现了一个带括号的字符,函数下方就是一个条件判断,再下方就是括号字符,留意这个数据段内存值,继续向下单步。
很显然,这个函数是关键函数,目前程序还没有启动起来,这个函数应该就是启动时的一个注册与否的校验,数据段内存值也就是关键值。我们下一个存取硬件断点,来观察一下广告弹出是否也与之相关。
按 F9
观察硬件断点断下的位置,很快就发现了一个链接,上面有 winrar
的国区域名,广告链接应该来源于此。在函数开始位置下断,用来验证修改关键内存之值后,会不会跳过广告。
保持断点启用,重载程序,运行到第一个硬件断点处,发现了一个赋值操作。
在上方call函数下断,手动将内存值改为1,然后运行下去,注意观察内存值是否变化。
在上方call函数下断,手动将内存值改为1,继续运行下去,注意观察内存值是否变化。最后会发现在硬件断点处一直循环触发,观察下方程序窗口,发现已经有两个窗口出来了,禁用硬件断点,观察窗口结果如下:
程序经过了两次赋值,然后窗口就都启动起来了,断点窗口观察:
重载程序,进入核心判断函数,发现整个函数很短,mov al,1
这条语句实在是很扎眼,上方的 je
也在诱惑着我,上方的 call
更是怂恿着我先来一次大胆的尝试。
修改 je
为 jne
在此处下断,然后禁用除弹窗入口函数的断点以外的断点,包括硬件断点,运行程序。
结果发现除了弹窗没有去掉,注册也没有显示非商业版了。
在刚才的运行过程中,发现弹窗函数入口地址的断点,仅经过了一次,程序就正常启动起来了,也就是说,ret
掉也没关系了吧。观察整个函数的内容,似乎也是用来提供广告弹窗这个功能的,不过在硬件断点处,和 r15
寄存器的比较,判断是否继续跳转广告,我觉得应该是某个地方引用 r15
来判断是否是合法注册用户的标识,既然函数功能单一,就没有必要继续追下去了。运行结果如下:
结语
个人认为应该只需要修改一处的,但我还是修改了两处,看来技术还不不过关啊
因为制作的补丁360会报毒(滑稽脸),我就不分享了,我使用的是从果核那边下载的dup2制作的,我资历尚浅,并不知道有没有问题,另外大家有好用的补丁制作工具欢迎分享,偏移补丁的数据贴上了。