n1in 发表于 2021-7-2 11:07

nck课程笔记:破解补丁工具的使用

破解一个程序的时候我们可以通过搜索字符串的方式来寻找关键点,那么假如我们在编写一个程序的时候,怎么提防这种简单的暴破方式呢?
上一篇文章中已经提到过od里面实现搜索字符串功能是一个插件,视频中的作者给我们展示了一下这个插件的源码,下图是插件的核心函数:
![](https://img-blog.csdnimg.cn/20210625183517511.png)

![](https://img-blog.csdnimg.cn/20210625183558578.png)

![](https://img-blog.csdnimg.cn/20210625183804492.png)

![](https://img-blog.csdnimg.cn/20210625183831309.png)

![](https://img-blog.csdnimg.cn/20210625183422610.png)

可以看出,该函数显示读取整个模块的内存,然后开始寻找push,mov,lea指令,并读取他们的操作数,当他读到'\0'的时候就认为这是一个字符串,但是问题也来了,如下图
![](https://img-blog.csdnimg.cn/20210625184413655.png)

我们可以看到,上图的push ebp中的ebp是以\0结尾的,但是很明显,这并不是一个字符串,而是一个结构体。但是他却读到'\0'的时候就停止了并判定这是一个字符串,这样就导致了真正的字符串并没有读取,只读取了\0就结束了。而ida则是直接通过搜索pe文件的。

说了这么多,那么我们到底该如何防止搜索字符串呢?我们新建一个vs windows控制台程序,然后在od中的地址栏中右键修改二进制
![](https://img-blog.csdnimg.cn/20210625201224812.png)

然后输入注册失败,接着修改它的值,将14中的1改为0,
![](https://img-blog.csdnimg.cn/20210625201403954.png)

然后将字符串的二进制复制下来。(点击二进制,然后赋值二进制)粘贴在刚刚新建的vs中(说的这么麻烦,其实就是修改一下字符串的值,添加了一个\0,然后将十六进制复制到了我们写的的VS中)
![](https://img-blog.csdnimg.cn/20210625201800551.png)

写好了,接下来找到生成的exe拖入od中,再次搜索,芜湖,查找失败,用ida试一下,芜湖,也是查找失败。其实,废话这么多,原理很简单,因为我们是以十六进制的方式输入的字符串,od当然就查找不到了。。。。(主要记一下操作步骤)。
但是,当我们将str[]定义成全局变量时,却发现又可以查找出来了。
为什么呢?老师没有讲,而是当作思考题留了下来,说实话我想不出来T^T,以后有思路了再来更新吧。
![](https://img-blog.csdnimg.cn/2021062521071594.png)

字符串查完了又牵扯出了昨天的一个遗留问题,关于多线程的问题,什么是多线程呢?个人理解就是每个计算机程序都是一个进程,而每个进程都由一个或多个线程组成。(这里有个文章讲的很详细https://blog.csdn.net/beidaol/article/details/89135277)言归正传,我们之前分析的都是一个单线程的exe,可当我们碰到多线程的时候就会出现这种情况。如下图:
![](https://img-blog.csdnimg.cn/20210627103551111.png)

我们会卡到reet这里无法执行,遇到这种情况直接点击t窗口右键回复所有线程就可以了,我们接着往下单步执行,过了一会儿,我们发现地址怎么一下子变得这么大,直接由004变为了7开头。我们看一下上面那个标题,发现我们现在在kernal模块里,这明显不对啊,我们按-号退回一步,
![](https://img-blog.csdnimg.cn/20210627103723612.png)

退回一步以后:
![](https://img-blog.csdnimg.cn/20210627104130990.png)

出现了这种代码,这里我们一定要记住这种样子的代码,这种代码就是多线程的代码。也是e语言里面典型的线程特征。那么我们来看一下e语言如何写多线程exe。
![](https://img-blog.csdnimg.cn/20210627104437402.png)

既然知道这是多线程了,那我们怎么找到我们想要进的线程呢?
![](https://img-blog.csdnimg.cn/20210627110831437.png)

然后选择绿色的,红色的是我们当前cpu所在的的位置
![](https://img-blog.csdnimg.cn/2021062711092872.png)

然后就能轻松找到关键点了。

接下来就该使用破解补丁工具了
当我们在破解一个程序时,如果遇到这种情况的话,就该使用到我们的补丁破解工具了。

![](https://img-blog.csdnimg.cn/20210627155509411.png)

我们记住要修改的内存地址

然后打开xh补丁制作工具。
![](https://img-blog.csdnimg.cn/20210627161745831.png)

输入地址和我们想要修改成的内容,然后把目标文件拖拽进去。ok,生成成功。

第二个工具是pyg官方补丁工具,操作过程都一样,但是这个工具却给我们生成了一个dll文件。啊这,怎么运行嘞?我们先把生成的dll文件拖到我们破解的exe文件的路径下,然后就发现exe文件破解成功了,为什么呢?是因为每一个程序在运行的时候都会加载很多的dll文件,而我们把生成的dll文件放到exe文件的路径下的话,exe文件就会优先加载我们放入的dll文件,而而不是继续去系统里面寻找dll文件,这种方法也叫dll劫持。

n1in 发表于 2021-7-2 17:03

yasenhacker 发表于 2021-7-2 16:22
看你的桌面好眼熟,,,你是不是那个“画眉”啊???.net逆向研究的那个

注意标题哈哈哈,我看的就是画眉的课记的笔记啊,nck啊

yasenhacker 发表于 2021-7-2 17:12

n1in 发表于 2021-7-2 17:03
注意标题哈哈哈,我看的就是画眉的课记的笔记啊,nck啊

{:301_997:}{:301_997:}{:301_997:}哈哈哈,看来那个人是传奇,,,

cptw 发表于 2021-7-2 13:00

虽然不是太明白,但仍感谢楼主分享。

成熟的美羊羊 发表于 2021-7-2 13:41

系统dll好像大多不能劫持(我猜的)

penz 发表于 2021-7-2 15:05

学习了,谢谢

yasenhacker 发表于 2021-7-2 16:22

看你的桌面好眼熟,,,你是不是那个“画眉”啊???.net逆向研究的那个

n1in 发表于 2021-7-2 17:36

yasenhacker 发表于 2021-7-2 17:12
哈哈哈,看来那个人是传奇,,,

哈哈哈,传奇中的传奇了{:301_997:}

heilang99 发表于 2021-7-2 20:08

nck,画眉大佬的

gaobaonan 发表于 2021-7-2 20:17

哈哈哈,看来那个人是传奇,,,{:1_921:}
页: [1] 2
查看完整版本: nck课程笔记:破解补丁工具的使用