【干货】《DNF》反外挂逆向教程06:代码实现周围遍历
文摘
社会
2025-01-10 00:00
广西
上期教程我们已经找到了对象的类型和对象的名字,通过类型和名字可以区分一些对象。现在我们需要确定哪些对象可以进入到我们的死亡call内,进行一个秒杀。那么现在我们所找到的这些所有的数据,足够支撑我们编写一个秒杀敌人功能的代码了。那我们就用代码来实现一下这些功能。我们可以打开我们以前的代码,这是我以前写的一个代码,我们可以看一下。我们可以把我们以前写的代码复制到我们新的代码里面来,然后创建一个项目,然后来逐行来详解。首先,我们要在资源视图里面添加一份资源,添加一份 dialog 资源,然后我们就有窗口了。这两个按钮删掉,然后我们再右键添加一个类,这就是我们这个 Dialog 类了,然后到解决方案里面来到我们这个 MFC,NO number,底下这个 CPP 里面,我们就添加一些添加一个线程。这个线程干什么呢?这个线程可以打开我们的窗口,这些代码呢,如果大家看过以前的课都应该知道,我直接就复制过来了。首先复制一个创建线程,这个线程实现了一个函数,这个函数就是我们上面所写的打开窗口的函数。分配一个空间,然后呢,创建模态窗口,释放空间,退出线程。这里为什么报错了啊?是因为我们的这个类指针没有写进来,还是报错啊?应该是我们这个没有调用头文件啊,My dialog e。还报错啊。现在不报错了啊。如果我们在现在生成一下,生成成功了。我们通过一个注入器注入 dell,是桌面 MFC nb1,是不是注入成功了?注入成功了。那我们就开始继续写。首先我们要在我们界面上创建一个按钮,我们先来实现一个便利周围的功能,是不是?然后通过便利周围的里面的对象,通过这两个类型来进行一个区分,那就是便利周围吧。双击,他给我创建了一个单机事件,我们可以在这个单机事件底下就写我们的这些便利的功能了。那我们要回到资源管理器这边,把我们的东西给准备好。这是我们自己写的一个通用的东西,我这里面也调用了,就是这个 point H 和这个 point CPP,还有一个数据,更新数据。我们把这三个文件放到我们刚刚创建好的项目里面,给添加一下,就是这个 level1 里面粘贴。然后我们给添加一下,添加现有项,就是这三个了,添加进来了。我们来看一下,这个通用的大家很熟悉,这不是调试输出吗,调试 A 的类型,调试 W 的类型。然后这是我自己写的一个内存,写的一个读取内存,其实就是一个拼接调试输出嘛,是不是拼接一下嘛,这写个地址,读取的大小,然后这是读取 W 类型的字符串的,这是读取 AA 类型的字符串的,是不是,这都需两字节,这也是读取两字节。只不过一个接收的是一个 devote 的,这个解说都是 dior devote64,接收的是一个八位的,底下要不就是接收一个八位的,要不接收一个 DIO 的嘛。这是接收一个 64 位的,就是接收一个八位的,然后返回一个八位的。这是一个接收一个八位的,返回一个四位的。这是接收一个四位的,返回四位的,就是读取内存嘛,读内存嘛,是不是新的 devote 嘛,是不是 devote 新读取一个内存,然后 return 回来。这是 float 的,是不是这些大家都应该看过啊,不说了啊。然后呢,这个更新数据呢,是啊,本来我是用一个自动更新的代码啊,那这里我就先写一个自动更新的代码,我们还没说,那我们这里就不看了。这里呢,我们直接就先填,我们就是所谓的,就是这个。这个我们直接就填啊,我们现在的基地址。其实这里呢,我写的就是一个更新的代码啊,因为更新代码我们没有移过来嘛,先写这样的,是不是?那我们就继续,我们来开始实现这个便利这个功能。啊,这里我们肯定是需要一个便利,是不是?需要一个便利周围的函数,这个函数怎么来呢啊,我们可以再创建一个,再创建一个添加新建项,创建一个什么类呢,核心啊,核心 CPP。然后呢,在头文件呢,我们新建一个啊,核心点区。然后呢,我们可以在核心这 CPP 里面呢,实现我们的这个啊,实现我们这个便利周围。首先呢,我们可以创建一个,它是一个 class。这个叫什么呢?就叫核心吧,这里面可以实现一个我们所需要的这个啊,便利周围了。实现一下快速重构啊,创建自定义,在我们这核心 CPU 里面创建了啊。这。我忘记写这个了,忘记写返回值了,这样就不报错了。那现在是不是啊,我们就可以实现代码直接复制过来的呢?我们在这个,在这个啊,我们窗口类里面呢,还要进行一个头文件,是不是?头文件写什么呢?写我们的这个核心嘛,点 H。这时候呢,我们来看一下,核心点区啊,他是在那个类里面的,所以说我们还要实例化一个这个类。我们是在这个析构函数上面实例化的,所以说这窗口创建的时候呢,我们直接就实例化了,是什么核心。写一个标识符吧,标识名应该写什么呢?他这个报错呢,是因为六只能接受一个指针型的啊,所以说我们要打个型号,这样就不报错了啊。然后呢,我们在这个析构函数啊,结束的地方呢也写一个 delete,这时候子核心是不是传不过来啊,啊,那这时候呢,我们就应该把它写到他的 H 里面去啊,my dialog 点 H 呢在这里写到一个 public 里面去,这时候就不报错了啊,那这里呢就可以删掉了。我们来生成一下,看看有没有报错啊。嗯,还是报错了啊,他这里呢找不到一个标识符。这为什么报错啊,这里呢是一个我们属性啊,点击项目,点击属性,然后呢找到这个,这个 C ++啊,有一个 C /,C ++,还有一个检查 SDL 检查吗,写一个否啊,确定生成一下。还有一个错误啊,这么多找不到标识符,找不到标识符,是因为我这个呢没有头文件没有给。我们到这个 PCH 点 H 里面写个头文件就行了。这里面我头文件都没有写啊。把它把这个 PCH 点 H 呢啊,我们当成一个公共的写头文件的地方,是不是?这里呢,他这个找不到这个标识符,是我们这个没写啊,是我们这个 C 就是说这个工具啊,这个公用类没写。重新生成一下。还有十个错误。哦,这里报了一个错啊。这里报一个错。哦,他因为他找不到这个 class 这个核心啊。我们给他写一个。现在生成了。这上面拖文件也没有导入啊,这是我自己创的,是多少是 PCH。再生成一下。啊,这次就生成成功了啊,说明我们这里面是没有错了,没有错。我们就开始调用了嘛。这里呢就是核心子嘛,点便利周围。这里面是个空的啊,我们就要到我们以前写的代码,这边呢给它复制过来,是这个啊,编辑周围进去啊,就是这里面我们给它复制过来。首先呢这里报错啊,这里报错是因为什么呢啊,是因为我这个函数没有拿过来啊,这个函数长这样,我们给拿过来。是不是就不报错了,还有就是这里报错括号少打了吗。这里报错是因为,看一下啊,啊我们把它写到一个类里面去啊,啊这个核心啊类,也给他写一个这个,啊这个 victor 啊,他是要调一个啊,我们这个在公共里面啊,我们来调一个他的头文件,诶他怎么打的英文不好。然后呢这里呢我们应该写一个 std 啊,冒号冒号啊,这样他就不报错了。给他实现一下嘛,快速重构啊,然后呢在这个里面创建一个。诶他没有创建啊,那我们自己写吧,自己写一个,无非就是核心吗,哦他创建到这个地方来了。嗯这下就不报错了,那这里呢直接就可以调了。钓啥呢啊,因为我们这个对象还没创建,靠北,这里再创建一个嘛。啊是个 STD 啊,叫啥名字啊,这边是叫这个名字的,叫这个名字,叫这个名字的。嗯这里还缺了一个这个 STU,哎那个怎么打的,随便给他一个名字,S 吧。它里面有三种类型,一种是我们需要的这个啊,keyword 什么呢啊 q word ob 键嘛,我们需要一个对象。然后呢 keyword id 就不用 q word 了啊,id 我们用一个 d word 吧,id 然后呢 name 呢我们用一个 string。STD 啊,String name。啊是不是我们要获得一个名字,一个类型啊,一个对象,然后呢我们就可以把这个啊我们所创建的这个结构呢写进去了,创建了这样一个 wink 啊。再给大家说一下为啥还报错,这里呢他用的是一个型号啊,他用的是一个指针,不报错了啊。然后呢,它底下呢这里报错是因,还是因为我们的这个啊没有创建这个函数啊,那我们先来看一下这个 wink 吧,这个 wink 呢是这个啊这个 C 加加里面的一种容器啊,我们可以把它理解成为一个动态数组。它的调用方式呢包括啊他的啊我们输出的方式他都和速度一样,他只不过比数组方便一点啊,我们可以理解成呢它是一个封装的数组啊,我把这个数组里面的所有东西啊核心集中在一块啊,然后呢添加减少啊,这是数组没有的功能,但是它实现方式呢还是和数组一样,只是发送了一点。