找call的万能方法,一招通杀所有网络游戏【个人实践出来的】



呵呵 这个说的是方法,就不拿哪个游戏来举例了,懂得原理,操作自己灵活变动。

首先说的,网络游戏是有客户端 服务器的,这样就得需要一个通讯,基本上的功能都会通过服务器来验证的,要是本地验证的话那就能很快做出BT功能了。所以为了防止BT功能,就会用服务器来控制。

那么,现在知道了一个关键的地方了,也就是通讯,就是联网,就是发包了。那么发包就得send【或者WSASend】了。至于哪个是不重要的。因为他们的原理是一样的,而我下面将要说的是原理上的寻找,不是告诉你说具体找哪个的,因为在我看来,找哪个都是一样的。

要是你想懂得以下我说的意思,可能需要了解的有:OD的基本使用方法;《Wingdows核心编程》;还得懂得汇编;还要掌握一种编程语言及在此编程语言里面嵌入汇编【要是你把汇编转换成你的编程语言来写且实现跟汇编一样的功能的话也不反对】等。


一:
开一个游戏,进入后,开OD【有的游戏可能会检测OD,也许需要你先开OD,然后通过一些插件来实现隐藏或者过掉游戏检测】,附加游戏进程,这个是必须的,虽然基本上人会搞游戏的都懂这个。


二:
然后按OD上面的那个字母按钮 “E”  ,选择游戏进程,进入到游戏领空,然后在游戏领空里面你看到的第一个call,进到这个call里面,再看这里面的第一个call,进去,按照 这样的方法一直到 kernel32.dll 或者 ntdll.dll 里面的第一个call ,下断【可以双击此行的Hex dump 的值或者再选中此行的时候按F2】,然后回到游戏里面,随便使用一个你认为能让游戏发包的功能。
【或者你直接找OD里面的函数。可通过Ctrl + N 来显示此时游戏的函数,这个时候应该能看到Send 或者 WSASend ,要是看不到你就按照上面的步骤来操作吧,不过这个找到的发包函数不一定对,但是按照上面操作找的话肯定对】

三:
如果上面的操作你都搞定了,那应该此时OD里面就断下来一个地方,你就翻上几层就可看到游戏的发包函数了。

四:

找到发包函数之后,你如果直接断这个发包call的话,应该会一直断的,或者断的很快。会一直这样。然后你看OD的寄存器的值,主要是看这个发包的包长 【要是不懂的话,就看寄存器哪个值是有固定的几个来回出现的就行】,然后选中你断的那行,按 Shift + F2 【或者你找OD的调试(中文版),Debug(英文版)的条件断点】,在弹出的框框里面填入你看的那个寄存器的值,比如:eax != 0x2 && eax != 0xc && eax != 0x6【这个条件视实际情况而定】。然后就可以通过这个发包call来这你想要的功能call了【不过这个只能找到那些发包的功能call,要是不发包的 话,可以看下我的相关帖子,应该可以看到相关的方法】。

五:

在找到了发包call之后,可能你想找到明文发包call,那样的话,也是通过这个call来向上找的,就看你想要什么call了,基本上99%都可以找到。


综上所述,应该就可以实现一个比较万能的方法了,要是由于本人的表达能力有限,导致各位读者看不懂的话,还请见谅。要是想要弄清楚或者交流的话,可以到我们专门为了交流call而准备的群:辅助技术支持群 88823117 .

最后再次重申,由于本人才疏学浅,表达能力有限,以上发的烂文各位看不懂的话还请飘过,或者有什么疑问可以回帖发问,混沌尽量都能回复。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一个 `call` 函数可以参考以下代码: ```javascript Function.prototype.myCall = function (context, ...args) { // 如果没有传入上下文对象,设置为全局对象 window context = context || window; // 将当前函数保存为上下文对象的一个属性 context.fn = this; // 执行函数并获取返回值 const result = context.fn(...args); // 删除上下文对象的属性 delete context.fn; // 返回函数返回值 return result; } ``` 上面的代码中,我们通过给 `Function.prototype` 对象添加一个名为 `myCall` 的方法来实现 `call` 函数。这个方法的实现步骤如下: 1. 首先判断是否传入了上下文对象,如果没有传入则将其设置为全局对象 `window`。 2. 将当前函数保存为上下文对象的一个属性,以便后续可以通过上下文对象来调用这个函数。 3. 执行函数并获取返回值。 4. 删除上下文对象的属性,以免污染上下文对象。 5. 返回函数返回值。 使用示例: ```javascript function sayHello(name) { console.log(`Hello, ${name}!`); } const person = { name: 'Tom' }; sayHello.myCall(person, 'Jerry'); // 输出结果:Hello, Jerry! ``` 在这个例子中,我们通过调用 `sayHello.myCall(person, 'Jerry')` 来实现了 `sayHello` 函数在 `person` 对象上的调用。在 `myCall` 方法内部,我们将 `sayHello` 函数保存为 `person.fn` 属性,然后通过 `person.fn(...args)` 来执行函数,并最终返回函数的返回值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值