15授人以鱼不如授之以渔CALL的概念篇CALL出错分析.docx
《15授人以鱼不如授之以渔CALL的概念篇CALL出错分析.docx》由会员分享,可在线阅读,更多相关《15授人以鱼不如授之以渔CALL的概念篇CALL出错分析.docx(15页珍藏版)》请在冰豆网上搜索。
15授人以鱼不如授之以渔CALL的概念篇CALL出错分析
15授人以鱼不如授之以渔●CALL的概念篇:
CALL出错分析
在刚开始找CALL的时候,绝大部分的时间都是在重新打开游戏和出错中度过,这个可能绝大部分朋友都有这个感受~CALL为何会出错?
今天我们就来分析下出错的原因
目标:
F8找CALL02
目的:
分析各种CALL的错误
弄过F8找CALL模拟器的朋友都知道F8CALL02是一个喊话模拟的模拟器,而且只能注入才能正确调用远程调用的话就会出错,今天我们来分析下到底错在哪里.
============================分析开始=======================
CALL我就不找了,大家可以看配套视频,在断点社区精华区可以下载.
这里就是F8CALL02的喊话功能CALL的地方
这是运行到CALL时候堆栈中的值...
这里很多朋友都不明白为何只要写一个CALL就可以实现喊话,我之前说过,我们只需要给CALL他想要的参数.
这里的堆栈分别压入了 基址 喊话内容 喊话模式 喊话对象
这个就是参数而且也没做什么处理,所以我们只要给他想要的参数按照顺序就可以了.
这里正确的写法我就不说了,我们主要来调试下错误的信息.
这里其实需要处理堆栈平衡,我们先不写,来分析下堆栈不平衡为何会出错,好了这里没有加上堆栈平衡,图中是出错的信息.我们在CALL内部第一行下断
运行代码注入器调用CALL后就会断下来,.
*这里为何会断在这里而不断在CALL地址呢?
因为,我们写一个CALL***** 其实就是从*****这个地址开始运行的,却不是从游戏调用这个CALL的代码开始.这里弄多了你就会明白,你写一个CALL其实在模拟游戏调用CALL的那部分.
我们来按F8 一直执行......一直到图中的位置才出错.出错信息跟刚刚是一样的
*45d000 一般是程序的代码段开始部分,而图中参数的存放是ebp-8已经超过了代码段的范围了,所以我们这里就会出现无法读内存的错误.
解决方法:
这里我们把存放内容的地址弄后面一点便可以了
好了我们继续往下单步运行(F8)
好了运行到这里又出错了~~重新运行吧~
我们到了上面那个地址出错~而EAX的值就是我们出错的信息地址,从调试窗口看到EAX的值是?
?
?
我们来看看用模拟器自身的喊话,这里是如何一个过程
图中对比了 使用自身喊话和代码注入器的调用情况 .如果这个时候我们把ECX改成8呢?
好了,这里已经解决了第二个问题,又出现第三个问题.
这个时候我们发现 错误信息中有出错代码的地址.我们跳过去看看
这里又有一处内存无法读出,这里的值是指向270这个地址(前面部分处理按照上面的来)
错误找到了我们重新再来一次这次停到错误代码地址前面 (第二个错误依旧按照上面的处理来)
我们来看看正常情况下的寄存器值
这里我们用模拟器能成功的读取到地址.
我们来跟踪一下这个值是如何产生的
这里我们从头部开始找....
头部的值还是跟上面一样所以我们返回一层看看.
463cc4就是EBX的基址.
我们把代码注入器的代码改一下
好了运行到原来出错的地方发现现在已经能正常读取内存地址了,又解决一个错误(到第二步的地方仍然需要手动解决)
我们继续运行,发现卡在了下面那个CALL那里 按运行或点程序都没反应, 这个时候我们只要在调用一次CALL就可以了.
我们继续运行到上面这里然后按F8,发现又一个错误...
这里的代码段是从45d000开始的而图中却是 4030a7 这里我们也没办法跳过去调试了.
好了今天我们的调试错误信息就到这里了,虽然最终没有解决这个问题,但也获得不少收获~