网页游戏如何提取call

3

网页游戏通常使用JavaScript进行前端开发,而JavaScript代码是运行在用户的浏览器中的,所以直接在浏览器中进行提取Call(函数调用)是不太可能的,因为这涉及到浏览器的同源策略和安全限制。

然而,如果你想在服务器端(比如后端的Java、Python、Node.js等)提取网页游戏的Call,你可以通过以下步骤:

1. **屏幕录制或网络请求分析**:使用浏览器的开发者工具(如Chrome的审查元素或Fiddler)可以查看到游戏发送的HTTP请求,这可能包含一些与Call有关的信息,比如参数或API调用。

2. **网页抓包**:通过网络抓包工具(如Wireshark、Charles等)可以获取到浏览器与服务器之间的完整通信,包括POST、GET请求的数据,从而推断出Call的结构。

3. **反编译游戏代码**:如果游戏使用了JavaScript,可能需要对游戏代码进行反编译,以便查看其内部逻辑。但这个过程通常比较复杂,需要专业的技能和工具。

4. **注入代理**:在服务器端设置一个代理服务器,接收到游戏的请求后,分析并提取Call。这需要对服务器端编程有一定理解。

请注意,这些方法都需要一定的技术知识,并且可能涉及版权问题,所以在进行此类操作时,请确保你有合法的权利和权限,并尊重游戏开发者和服务器的使用协议。

以上就是直接通过发包函数分析控件点击CALL以及控件对象遍历的方法,但是这种方法有很大的局限性,后面的文章里我们会以其他的分析方式对控件相关的内容进行讲解。

继续分析rdi的来源,执行到返回两次后发现再次来到了268F2D0函数中,也就是说这里是一个递归函数。为了能够跳出递归函数继续分析遍历来源,我们可以在函数头部下F2断点,当断到一个不同的返回地址后点击堆栈进行返回(如图)

网页游戏如何提取call

有人可能会说,顺着函数向上分析控件对象即可。这种方法虽然也可能得到控件遍历,但是更多的时候得到的并不是完整的或者正确的控件遍历。分析控件遍历最好的方式还是在控件对象上下访问断点,往往可以直接断到控件遍历代码中。

控件数据的入手点比较少,因为他可变动属性很少,而且控件名字也无法直接看到可以提前玩的预约手游游戏盒子,所以分析起来也相对比较难。常用的控件分析方式有两种,第一种是通过是直接通过能够触发控件点击的发包功能直接获取到控件点击CALL。比如通过交接任务CALL,在点击交任务时可以触发对话控件的点击,然后向外层返回,就可能会返回到控件点击CALL中。下面我们对某款游戏控件CALL与控件遍历进行分析。

根据反汇编指令mov eax, dword ptr ds:[0x00DDE458],eax被赋值为常数值,但是每一次重启电脑这个数值会发生变化,与此同时,发生 变化的还有模块Game.exe的基址。

追溯到06,无论寻路、技能、喊话等都会断下,而05位置只有寻路会断下,进一步分析,可能是由于cmp比较指令导致跳转,如果结果为0,je跳转,否则不跳转。

在31处下一个硬件写入断点,再次发送一个字符串2222222222,看一看是哪个call修改了这个内存地址,理论上,在向上查找,就可以找到所有的发包函数功能call。

send函数包括四个参数,我们只关心第二个,也就是buf缓冲区,这是一个字符串,因此分析数据时,要分析的是这个地址里面的内容,而非这个地址本身。

返回上一层后,根据喊话、移动、释放既能,理论上也可能找到对应call,然而,天龙游戏是将功能call和发包call分开处理。

如果有socket编程基础的同学,很容易理解send函数,就是客户端连接服务器时,要经过创建socket对象,指定对方服务器ip和端口,然后通过send发送信息。

对于网游来说,大部分操作都要经过服务器验证,也就是不断向服务器发送数据,我们先要定位到发包函数,然后跳出函数,看看是哪一个call调用了这发包函数,很多时候要跳出很多层。

call就是调用函数,比如,游戏中,寻路、技能、喊话等都是一个功能,一般都会封装到一个函数中,而且大多数情况下都是函数里面嵌套函数,只要我们找到对应的call,就可以用汇编代码注入技术使游戏实现对应功能。

通过这两篇文章,我们发现在整数范围内的64位汇编指令和32位大致是相同的,分析方法也是相同的,只是寄存器看起来要麻烦一些,其实也只是不习惯罢了。我们会在后面的数据分析中对这些知识进行更加深入的学习和理解。

那么我们的分析结束了么?当然没有。由于角色是在游戏中是一个特殊的存在,他被访问的也是最频繁的,所以大部分游戏的角色对象都会单独存放在一个基地址中。所以我们尝试用CE去对之前的r12进行扫描(如图)

继续向上分析rax可以得到mov rax, qword ptr [r10 + rdx*8],这是一个标准的64位数组的代码,r10是数组的起始地址,而每一个数组元素都占用8字节(如图)

这里传递的是qword,得到一个+8偏移好游快爆游戏盒子安卓,继续点减号来分析rcx的来源。可以得到mov rcx, qword ptr [rcx]。而在上面又可以得到lea rcx, [rsp]。lea相当于传递地址而不是读指针,所以这两条的结果就变成了mov rcx,[rsp]。[rsp]是要作为一个整体去分析的,而[rsp]是在lea rcx, [rsp]的下一条被rax进行赋值的(如图)

接下来我们在返回处重新下F2断点,并多次点击F9,我们发现大部分的情况下都是返回的角色对象,只有个别的情况会返回其他的数值,这也就说明了这里是有遍历的,但是角色本身会被大量访问(由于周围的对象过少,想断到非角色对象很难,所以就不截图了)

通过两幅图对比,发现之前的r12和返回的eax是相同的。有人会说,这不是多此一举么,直接去CALL里分析好了。其实这么做是为了防止CALL内部出现遍历代码,而附近有有其他的对象被频繁访问,导致返回的eax并不是我们要分析的角色对象r12。

在CALL的位置下F2断点,我们发现这里不需要修改内息,游戏直接就会断下。于是我们在+178偏移和CALL的返回处分别下F2断点,看一下eax的值是否相同(如图)(如图)

之前我们在分析游戏的内息值时得到了一个CALL的返回值,那么接下来我们到CALL去寻找一下这个返回值的来源,并对遇到的汇编指令进行讲解(如图)(什么?你不知道是哪个CALL?请将上一篇文章看一遍~~~)

网络游戏制作外挂原来这么简单好玩

这里控制鼠标有通过驱动层模拟也有直接通过守望先锋内部写好的代码在内存call的方式,当然这两种都是软件层面都有一定的防止和检查手段。所以在江湖上还有一种U盘挂,直接假装自己是个usb鼠标,真真正正的硬件,相当于我只不过多插了个鼠标,就跟守望先锋或者某个进程毫无关系了

专题: 单机三国游戏志   单机三国游戏机   假三国单机游戏