6、软件漏洞挖掘与防护---去除未注册版软件的使用次数限制

项目六 去除未注册版软件使用次数限制

一、 项目环境

VMware Workstation Pro 安装 Windows Server 2008 Datacenter 操作系统。

二、 项目软件工具

1.未注册版软件 VisualSite Designer(一款视觉网站设计软件)
2.软件安全动态分析工具 OllyDbg

三、 项目实践

项目需求:通过 OllyDbg 软件去除未注册版软件 VisualSite Designer 的使用次数限制和广告窗口,使得使用该款软件的用户不受使用次数的限制和看不到烦人的广告窗口。
项目操作:

1.运行 VMware Workstation Pro 的 Windows Server 2008 操作系统,进入操作系统后运行 VisualSite Designer.exe 软件程序,发现软件有使用次数限制,如图 6-1 所示。关闭软件后会弹出烦人的广告窗口,如图 6-2 所示。

在这里插入图片描述
图 6-1 软件使用次数限制
在这里插入图片描述

图 6-2 广告窗口

2.当我们再次运行软件程序,会发现使用次数在上次使用的基础上减一,现象结果如图 6-3 所示。

在这里插入图片描述
图 6-3 使用次数减一

3.运行 OllyDbg 软件,按下快捷键 F3 打开程序,选择 VisualSite Designer.exe

程序文件所在位置打开,如图 6-4 所示。
在这里插入图片描述
图 6-4 OllyDbg 打开程序

4.接下来我们需要找到图 6-1 的 NAG 窗口调用处位置,逆向思路是一路按 F8 单步执行,当遇到弹出 NAG 窗口的 call 指令时停止,按下 F2 设置断点,然后Ctrl+F2 重新加载程序,按下 F9 运行至该断点处,再 F7 单步步入到该 call 函数里面。按照该思路去调试程序会遇到第一个死循环,我们只需将图 6-5 所示中的 je 跳转指令影响的 ZF 标志位值该为 1,便可以跳过第一个死循环。然后继续F8 往下执行,如图 6-6 所示为第一个 call 指令位置。

在这里插入图片描述
图 6-5 跳过死循环
在这里插入图片描述
图 6-6 第一个 call 函数

5.重新加载完程序,按下 F9 运行到图 6-6 第一个断点处的 call 函数,再按 F7 步入到该函数里面,然后老样子一路按 F8 往下执行,这时有些人觉得一路按 F8 往下执行按的好累,此时可以使用组合键 Ctrl+F8 让程序自动 F8 往下执行,直到遇见第二个 call 指令位置停止,此时下第二个断点,如图 6-7 所示。然后 Alt+B 打开断点窗口,删除上一个断点(后续删除断点操作同理),如图 6-8 所示。

在这里插入图片描述
图 6-7 第二个 call 函数

在这里插入图片描述
图 6-8 删除上一个断点

6.Ctrl+F2 重新加载程序,按下 F9 运行至图 6-7 第二个断点处的 call 函数,再按 F7 步入该 call 函数,此时会进入动态链接库(系统)领空的位置,然后按 F8 继续往下执行,直到遇见第三个 call 指令位置停止,此时下第三个断点,如图6-9 所示,打开断点窗口,删除上一个断点,再重新加载程序,运行至该处。

在这里插入图片描述
图 6-9 第三个 call 函数

7.按下 F7 步入到图 6-9 的 call 函数中,然后使用组合键 Ctrl+F8 让程序自动执行,执行到第四个 call 函数位置停止,如图 6-10 所示。此时,该 call 函数还需要 F7 步入吗?这是我们要思考的问题。我们观察到该 call 函数下方有一条比较指令“cmp eax,1”判断 eax 寄存器值是否为 1,之前课程内容我们提到,汇编语言中函数返回值存放在 eax 寄存器当中,因此我们可以判定该 call 函数就是我们要破解的位置。

在这里插入图片描述

图 6-10 第四个 call 函数

8.上图中 call 函数就是调用使用次数提示的 NAG 窗口,该 call 语句执行有两件事情:①计数器减 1,即剩余使用次数减 1;②弹出 NAG 窗口,返回值 1。那我们破解的思路就是将 NAG 窗口除去,自然也就除去了使用次数限制,然后只保留返回值 1,由于我们知道返回值都是保存到 eax 寄存器中,所以我们可以对该 call 语句进行汇编,更改为“mov eax,1”,如图 6-11 所示。

在这里插入图片描述
图 6-11 修改位置

9.修改完毕后,选中修改的指令,右键选择[复制到可执行文件]→[备份]→[保存数据到文件],保存文件名为 VisualSite Designer1,如图 6-12 所示。

在这里插入图片描述

图 6-12 保存文件

10.打开新保存的 VisualSite Designer1 程序,按下 F9 运行程序,发现不会在弹出提示使用次数限制的 NAG 窗口,直接进入到软件程序的主界面当中,说明去除使用次数限制成功,如图 6-13 所示。

在这里插入图片描述
图 6-13 去除使用次数限制成功

11.接下来我们需要去除广告窗口,关闭软件主界面,弹出广告窗口,在 OD 主界面按下暂停键(或按下 F12),使用组合键 Alt+K 打开堆栈窗口,发现只有一个来自应用程序的堆栈,其它的都是动态链接库(系统)的堆栈,选中应用程序的堆栈,然后右键选择在堆栈中跟随地址,如图 6-14 所示。

在这里插入图片描述
图 6-14 堆栈中跟随地址

12.回到 CPU 窗口,在右下角堆栈数据中右键选择反汇编窗口中跟随,如图 6-15

所示。

在这里插入图片描述

图 6-15 反汇编窗口中跟随

13.找到调用广告窗口的 call 指令,如图 6-16 所示,然后将该 call 指令 nop 掉,保存程序,程序名为 VisualSite Designer2 。再打开新保存的程序VisualSite Designer2,F9 运行程序,关闭程序后广告窗口就没有了。

在这里插入图片描述
图 6-16 广告窗口消除修改

14.以上是程序行为未发生改变时的破解,接下来讲程序行为发生改变后的破解。程序行为发生改变是指注册前和注册后的行为发生改变,或者说表现在程序可用 和程序不可用时的行为有什么不同。例如本项目中的程序,如果把限制的使用次 数用完会发生什么事情?很简单,程序就不给我们打开了呗!那程序不给我们打 开了,它的代码走的路线就会不同,即代码行为发生了改变。判断代码走的路线 有两种方案,一种是条件跳转判断,一种是 jmp+变量(后一种以后再介绍)。
15.这里用第一种,OD 载入原始程序(从未修改过的最初版)从开始一直 F8 走, 碰到条件跳转指令(黄色的)进行注释,跳转实现的注释 Yes,未实现的注释 No。就这样耐心地注释到图 6-10 最终调用 nag 窗口的地方,如图 6-17 所示。为什么要这么做呢?这可以说是破解程序的不二选择,或者说是最保守的方法。注释完成后,将软件使用次数用完,使程序行为发生改变,如图 6-18 所示。 注释的目的是就是为了和行为发生改变后的代码做对比,通过对比,找出不一样的关键处, 也就知道了程序行为改变的原因了。这种方法可以称为破解的绝对方案(也就是绝对行得通的方案)。

在这里插入图片描述
图 6-17 跳转注释
在这里插入图片描述
图 6-18 程序次数使用完

16.程序使用次数用完后,我们重新调试程序,按照上面的方法,一路按 F8,直到图 6-10 的 call 语句位置停止,观察 call 语句上方的条件跳转指令的跳转状态,发现 jle 跳转指令从原来的未实现跳转变为了实现跳转,如图 6-19 所示。

在这里插入图片描述
图 6-19 跳转变为已实现

17.上图中的 jle 是导致代码行为发生改变的“重要嫌疑犯”,该跳转在程序可用时(软件使用次数未用完)是未实现跳转,现在程序不可用时(软件使用次数用完了)变为了跳转实现,又是在最靠近 NAG 的地方,所以它引起了我们的注意! 于是,尝试修改这条 jle 指令,在它上方将 test eax,eax 修改为 mov eax,1(或者将 jie 指令 nop 掉)。因为在 test eax,eax 处 eax 的值显示为 0,将其改为 1 的话,就使其不跳转了。如图 6-20 所示。

在这里插入图片描述

图 6-20 修改 test 指令

18.修改后保存文件, 文件名为 VisualSite Designer3 。载入修改后的VisualSite Designer3 程序运行,发现虽然 NAG 窗口提示剩余使用次数为 0 次, 但依然可以进入使用软件了,如图 6-21 所示。同理运用之前说过的方法再去除广告和 NAG 窗口,一个没有使用次数限制,没有广告,没有 NAG 的软件就呈现在我们面前了!

在这里插入图片描述
图 6-21 使用次数剩余 0 次也能运行软件

发布了32 篇原创文章 · 获赞 53 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/qq_42250189/article/details/105211926