挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)不懂社区·好资源不错过·各位资源站大佬欢迎来采集搬运IOS签名/udid证书出售/送证书加群1040456405 ██【我要租此广告位】██
... .
查看: 6451|回复: 4
打印 上一主题 下一主题

[讨论交流] CALL是如何炼成的之三:寻踪篇

[复制链接]
6高级会员
786/1100

786

积分

260

主题

12

听众
已帮网友解决0 个问题
好评
0
贡献
526
海币
5853
交易币
0
跳转到指定楼层
楼主
发表于 2015-2-14 19:21:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑


CALL是如何炼成的之三:寻踪篇

会写CALL了如何找到我们想要的CALL?  

这个是写一个内挂不可避免的问题.刚初学的朋友可能会不知道如何入手.想起刚学这方面的时候,绕过很多弯路,现在把一些经验写出来给大家参考参考吧,不是很高深的东西,但我觉得对某些人很有帮助.  


前言:思路与寻CALL  

我们知道,武林大部分CALL都能下bp send用 CTRL+F9 返回找到.但是为何这样就会找到我们想要的东西呢?send大家都应该知道是发包函数,是作用于客户端与服务端通信.  
我们来思考一下.W美游戏的运行过程.比如说打坐.  
游戏有一个子程序专门用于接受用户鼠标或者键盘信息,然后做出判断,跳转到相关CALL,执行动作,组建明文包,加密明文包,发送加密包,然后做内存释放等余下动作.  

从这里我们可以看出,bp send  我们是断在了发送加密包这里.而我们调用的CALL则是  执行动作或者跳转的相关CALL中.这个就是W美国际的打坐CALL的运行思路.  
这个是根据反汇编代码猜测出来的.但如果我们第一次找的话那么该如何知道这个过程呢?  
其实谁都不知道.除非你看过源代码.这个就要我们去猜测了.  
既然是猜测的话,也是有技巧的,比如说有些游戏下bp send 返回 只有3层,核心代码层肯定不会在这3层中,其实这里的send 应该说被创建成一个线程,来查询是否需要发包.  
而不是从执行动作和发送封包,放到一个结构里.  
那么我们该如何找这个CALL呢?  
这里思路很重要,但决定思路的就是你的想法,你对程序运行的过程猜测的想法越接近游戏编程人员,那么你就能找到你想要的CALL.  

比如说寻路CALL  
为何武林寻路CALL一般不能用CTRL+F9返回找呢?  
一般CTRL+F9找到的 寻路都是那种 走一步断一次的CALL,而真正的寻路则是调用一次断一次.  
这样我们可以想象游戏的走路运行过程是这样的  
计算走路路径.也就是走路算法.然后一个子程序调用走路函数 发送寻路路径中每一个坐标,走到目的地终止.  
为何很多新手会找武林的CALL但换一个游戏却不行了呢?  
那是因为很多人都没有思考过为何这样就能找到CALL,换一个游戏发送bp send返回 找不到一个CALL,或者 只有3层的时候 估计都会傻眼吧.  
并不是所有游戏都是一个引擎做的,不是所有的游戏都是一个结构写成的.只有清楚游戏编程人员的程序算法结构思路,才能正确的找到你想要的.  
这一点和破解很相似,你要猜测程序员是如何构建这个注册算法的.  
找CALL也是逆向的一种.你要学会思考,学会猜测程序员的想法.猜测游戏的结构算法.  

例子一:  



这里是武林的一个 表情动作  

里面有 攻击 打坐等等  

游戏编程人员为了方便或者说 引擎设计是这样的  他这里的程序是这样编写的  

swtich(点中那个)  
case0  
  call  
case1  
  call  
....  
...  

当你选择 组队命令  

程序会判断你选择那个  

然后 CALL  

相关的动作  

那么如何找到这个点呢...  

既然游戏是把 窗口里所有的程序 都判断了  

所以 我们只要找其中一个然后往上就能找到了  

打坐CALL你们都找过  



这里 5BEF30 是打坐  

下面那个是取消  



这一句则是 传入参数  


意思很明了  如果这个参数为1 就是打坐  

为0 则跳转  



我们返回到上一层  

发现 这里     
有这一条指令  

这里如果AL=1则变成0  

也就是判断当前人物是否是打坐  

如果不是 则打坐  

如果是则取消打坐的一个功能  



然后往上面 看看  

我们会发现  

这里 有一个 switch 结构  

就是接受 鼠标点的是那个窗口的话  

对比 点击的是那个按钮  

然后跳转到 相应的动作  


这个就是跳转  

当你执行  

打坐的时候  

就会跳到第一个  

也就是说 打坐  

我们在这里 下断  

点击 比如说 捡取  



这里会断下来  



按下F8  

就会跳到 相应的CALL  

也就是 捡取的CALL了  



比如说 邀请加入队伍  



就会跳到 另外一个CALL  

这个就是邀请队伍的CALL  


所以说  

这里只要断一个点  

就能找到窗口中所有的动作  




所以只要断上一次 我们就能找到窗口里所有的动作.  



==========================================  


二:武林找走路CALL  


首先找到目标坐标点  

查找写入的代码  


会出现这3个  

这里第二个的 EDX是我们刚刚搜的值  

至于第一个,他压入了一个16位寄存器,但坐标却是32位的.所以这里可以先排除  

第二个很像,第三个是浮点数操作,先放一边.  




这里是我们刚刚找的写入该地址的代码.  

然后返回一层,为何要返回呢?  

我们找的是 写入坐标的,他肯定是处理坐标的那一层  

所以说 我们要返回上一层来分析找到调用真正走路的CALL  




到了上一层.我们来看看全部代码  





这个CALL  压入了几个重要的寄存器  

一个是ESI  

他的来源是哪里?  


从代码里我们可以看到他来自上一层.不懂的看理论篇  


既然重要数据都是从上面来的  

我们就返回上一层看看吧  




到而来这一层  
下面我们来写CALL  
这个CALL怎么写?  




首先是堆栈 这里有4个堆栈然后看寄存器,最后处理堆栈平衡这里我就不细说了想学写CALL就看实践篇  


多断几次 我们发现  

ESI的值是不断变化的  

这里 ESI的值的来源是哪里  






他来自上面的 mov esi,eax  

而EAX则是上面那个CALL的返回值  

所以我们要写出 460fe0的CALL  


2个合起来的写法就是  

push 1  
mov ecx,16303FA8  
call 46BFE0  
PUSH 0  
push 1  
push eax  
push 1  
mov ecx,16303FA8  
call 46c450  

其中ECX的值是会变的,这里的基址我就不找了.  

现在 测试一下  跑是能跑了 但是就是乱跑  





这个是一段代码  

我们找到了 头部第一个 和第4个的CALL 还有2个没写  

我们来看看第二个  

断下来 我们发现 第一个堆栈里的ECX的值 是游戏里的目标坐标点  

XZY坐标是挨着放的这个可能是自定义结构.  

第二个是0  

我们来构造这样的一个参数.  

  下载 (10.85 KB)  
前天 02:16  



push 1  
mov ecx,16303FA8  
call 46BFE0  
mov esi,eax  
push 9260C0  
push 0  
mov ecx,esi  
call 470760  
push 0  
push 1  
push esi  
push 1  
mov ecx,16303FA8  
call 46c450  


好了 我这里就能跑起来了 ,但你照抄过去肯定是不行的,这里ECX是变化的需要寻找他的基址,坐标也需要你来构造.  




===========================  

字符串跟踪.  

这类找CALL的方法很少用,因为很多游戏都不是直接压入文本的,所以很少见,不过是很好的突破口.  




选择 所有参考文本字串  

我们就会发现有很多熟悉的字句  





这些东西 虽然不能帮你找到核心CALL,但也会是一个很好的突破口.  


2009.12.15更新

例子:大话水浒


在 文本串列表中,我们发现有这样一个文本,这个肯定跟登陆有关.我们进去看看


双击后 跳转到这个CALL里来了.



我们来写一下这个CALL并改变它的内容.  我们发现这个是一个 信息框的 功能CALL.而我们最后压入的是他的内容值.


也许有人会问了,找这个干吗用,我们也不需要调用游戏的信息框啊.  的确 我们是不需要,但这里既然判断了游戏的账号密码,那么说明我们在登陆CALL附件

我们往上返回一层看看.



这个CALL比较简单 ,但我们发现没有压入相关的账号密码.我们来测试一下看看


调用成功.这个CALL就是我们要找的登陆CALL, 当然 前提是你要输好账号密码.在这里就不详细分析了.


========================  

堆栈的寻找  





断下来后 ,在右下角的 堆栈数据窗口中 我们常常能看到一些明确数据的存在.  

比如说我这个喊话 是1111111  我们发现很多压入了11111111的CALL  




我们到第一个看看 .  这里堆栈显示的是 0A,"1111111111"  

这个为非固定地址CALL 在看看第二个  





这个看起来比较正常.  

1可能是频道 E可能是长度  



断下来后 按 ALT+K 我们可以发现有2个堆栈地址.  点开第一个 就到了 我们第二张中的位置.  

下断  喊话  断下来后  我们看一下堆栈顶部的地址   

跳转过去后  我们又找到一个喊话的CALL.  

好了 下面你随便挑一个就可以了.这种比较明确数据的CALL还是比较少见的.常见的有 走路 喊话 等等.如果是攻击的话那么你就要清楚ID是以什么形式的类型存在的.比如说 武林是8000开头的.  

这种方法其实跟 BP SEND返回是一样的.  不过也可以用到截取某个CALL查看它上几层的调用了哪些参数.  
=======================  
当你bp send+ ctrl+F9无法找到 而且也找不到相关的内存地址时你会如何做?  




21 分钟前  
首先 游戏检测到人物动作后 就会执行相关的动作。最后构造加密封包放入相关地址。  


收报函数循环检测到有新的封包后便会调用 发送封包的函数来执行 封包发送的过程。  


当玩家断bp send后 返回的当然只有 收取封包的函数。  

但是不管如何,它都有一个连接点,那就是  要发送的封包。  

这个是 2者的链接点。也是必不可少的。  

只要我们监控写入的 封包内存地址,就可以发现 你会找到封包加密函数 或者相关执行的CALL。  

这个时候 我们便会跳到 执行动作 的那一块。那么 我们想要找的CALL就会在我们眼前出现。  

这种方法 把连接点当跳板 跳到 动作执行的过程里去。然后返回 便能到了核心CALL里了。  


============================  

当bp send无法找到的时候我们该怎么办?  

记住,任何东西在内存里都有一个状态值~  

如何分析应该到哪一层CALL调用,我觉得应该取决于他的汇编代码的分析和参数的参考.  

未完待续



联系我时,请说是在 挂海论坛 上看到的,谢谢!



上一篇:CALL是如何炼成的之二:实践篇
下一篇:ring3下绕过梦幻诛仙的驱动保护得到窗口句柄
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:xhzlw@foxmail.com),本站将立即改正。

92

积分

43

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
49
海币
1000
交易币
0
沙发
发表于 2015-2-14 19:25:34 | 只看该作者
路过的帮顶
3正式会员
128/300

128

积分

51

主题

5

听众
已帮网友解决0 个问题
好评
0
贡献
77
海币
6700
交易币
0
板凳
发表于 2015-4-9 21:57:45 | 只看该作者
站位支持

64

积分

39

主题

7

听众
已帮网友解决0 个问题
好评
0
贡献
25
海币
1467
交易币
0
地板
发表于 2015-6-7 15:52:58 | 只看该作者
好腻害的样子

0

积分

0

主题

2

听众
已帮网友解决0 个问题
好评
0
贡献
0
海币
2
交易币
0
5#
发表于 2015-6-13 20:15:55 | 只看该作者
顶,楼主v5
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2025-4-5 01:49 , Processed in 0.126750 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

快速回复 返回顶部 返回列表