bp send 找call法相当流行和实用,然而很多游戏都是发包线程和调用线程不在同一个线程里面,从而导致这个方法只能回溯到循环发包里面,无法再向上回溯,而且在这里模拟调用call总是达不到预想效果,那么有没有其他的找call方式啊,答案是有的,今天说说一种比较笨但是很通用的方法,大海捞针找call法。
先普及一下call的两种分法:间接call和直接call
间接call是指call 后面没有跟直接地址而是跟的变量,比如call eax等等
直接call是指call 后面跟的是直接地址而不是跟的变量,比如call 00402869等等
我们知道我们找call肯定是找的直接call,遇见间接call一般直接跳过,那么能否在所有直接call上面下断点呢,可以的,方式如下
我们都知道在反汇编窗口里面可以右键找汇编命令,我们只需查找所有命令,然后输入 call const就可以找到该模块内所有直接call,注意是该模块内,先找到主进程空间,再找即可,
然后在寻找结果上面给所有结果下断点,接下去排查即可。其实排查也不是那么简单的,这样搜索出来的call一般游戏会有几十万甚至上百万个。
排查思路,
1. 先打开所有断点,去掉所有游戏无任何操作就端下来的断点
2. 在游戏里面随便走一下,去掉所有端下来的断点(假设暂不找和走路相关的call)
3. 进行想找call的功能操作一下,比如嗑药
4. 端下来的一般就是想找的call
实践中的困惑和麻烦:
1. 有的断点只要一打开游戏立即死掉,并切这样的断点还不少,不容易排掉这些断点
虽然实施上有一定困难,但也是一种思路,解除掉困难即可,先做笔记记录下来吧。
另外,搜索所有间接call就搜索call r32