协议型外挂制作五

本文介绍了如何在DLL中动态修改大话游戏的代码以制作协议型外挂。通过分析程序流程,作者展示了如何利用WriteProcessMemory函数在接收到数据时进行拦截,并在内存中插入补丁代码,将数据发送到外挂程序。文章详细讲解了补丁的编写和注入过程,包括关键地址的寻找、汇编代码的编写以及内存保护的设置,以实现数据的拦截和解析。
摘要由CSDN通过智能技术生成

协议型外挂制作五

By rix

       第一节到第三节我们说了基本工具的准备,第四节使用免升级和免弹出主页来做了一下基本的练习。第四节中和普通的游戏修改器没有太大的区别,只是一个修改的是数据,一个修改的是代码。这一节中我们将通过在dll中修改大话的代码来进行外挂的制作。其实在dll中动态修改代码和上一节用的方法一样,只是要改写的东西更多了而已。

       原理和上一节中的函数一样,都是调用WriteProcessMemory

       这一节的任务是拦截接收到的数据,关于发送的数据可以进行相类似的处理。一般在分析网络游戏的时候,都是先分析接收到的数据。对于大话的程序,中间如何去分析的过程就不说了,这要看自己的调适能力了。不过对于9.16之前的大话客户端程序,里面含有大量的调试信息(也可能是脚本信息),大致分析程序可以发现,程序总是在打印调试信息之后,然后做实际的工作。其中对于"rx_decode”这个字段很感兴趣,看看调用的地方:

.text:00449D 4F 154                 push    offset aRx_decode ; "rx_decode"

在前方不久的地方就是网络函数recv,因此可以这样来理解,程序接收到数据之后,打印出调试信息,然后跳转到:

.text:00449D95 154                 push    ebp

的地方继续执行,通过不断的跟踪发现,大部分时候程序都执行到地址:

.text:00449DED 154                 mov     [eax], edi

而且,[edi]中的内容在相同的时刻几乎是相似的,通过在游戏中随机的打开中断,将[edi]中的内容dump出来,然后组成ASCII码便可以发现,里面的内容相对来说是不变的,如果你运气好刚好可以拦截到聊天数据的话,就会发现里面的内容就是聊天的内容。这有点像碰运气。不过,如果采用下面的方法的话,就可以不用碰运气了。首先,我们发现edi是一个数据的地址,ebp中是我们接收到的数据的长度。当对其中的内容感到怀疑的时候,我们就想将该语句执行的时候[edi]中的内容dump出来,dump的长度就是ebp中的值。因此我们通过w32dasm来制作内存补丁,使用W32dasm反编译程序之后,使用快捷键Ctrl+L可以将程序加载到内存中,不让程序执行,快捷键Ctrl+F12跳转代码窗口的地址到00449DED               一行,方便恢复代码的时候用。在调试窗口中按Ctrl+F12将当前代码位置跳转到00449DED

我们将在这里进行内存补丁的编写。点击Patch Code按钮就可以直接写内存代码了。在00449DED的位置的补丁如下:

:00449DED E90ECA0400                    jmp 00496800

00496800地址的内容是一段空闲得内存。在ida中可以看到程序中没有任何地方使用这块内存,我们将在这里进行程序的修改。当程序执行到00449DED的时候,就会跳转到00496800接着执行,因此,我们还必须修改00496800处的代码,使用Ctrl+F12跳转到00496800处,开始打补丁:

:00496800 50                            push eax;保存各寄存器的值

:00496801 53                            push ebx

:00496802 51                            push ecx

:00496803 52                            push edx

:00496804 55                            push ebpebp为这次接收到的数据长度

:00496805 57                            push ediedi为数据地址

:00496806 6804040000                    push 00000404;向外挂程序发送拦截消息ID

:0049680B A1D0664900                    mov eax, dword ptr [004966D0][004966d0]中包含的是外挂窗口的窗口句柄

:00496810 50                            push eax

:00496811 3EFF1574924700                call dword ptr ds:[00479274]ds:[00479274]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值