悬念 发表于 2014-5-24 11:08:55

笑傲江湖选怪CALL分析过程

分析入手:从TAB选怪开始,进入游戏 bp send 马上进入游戏 tab选怪,被断下后,复制堆栈里的返回=======================================================================================/CALL 到send 来自 xajh.00B9082A0012F0940000012C,_..|Socket = 12C0012F098011577366w__|Data = xajh.011577360012F09C00000001_...|DataSize = 10012F0A000000000....\Flags = 00012F0CC0012F0F4麴_.   指向下一个 SEH 记录的指针0012F0D000FE5AC0繸?    SE处理程序0012F0D400000001_...0012F0D800B908C0??    返回到 xajh.00B908C0 来自 xajh.00B907900012F0EC0950E03C<郟.0012F10000B9093B;.?   返回到 xajh.00B9093B 来自 xajh.00B908700012F11400B91CA3??    返回到 xajh.00B91CA3 来自 xajh.00B908F00012F1580012F3344?.   指向下一个 SEH 记录的指针0012F15C00FE5C18_\?   SE处理程序0012F16000000000....0012F16400B88BC2聥?    返回到 xajh.00B88BC2 来自 xajh.00B91B600012F1E076B14E7B{N眝   返回到 WINMM.76B14E7B 来自 WINMM.76B14E82一条一条分析判断 发现 到 返回到 xajh.00B88BC2 来自 xajh.00B91B60 这条时候上面有2个CALL,在这2个CALL处下断点,进入游戏做选怪动作,看是否会被断下,发现会被断下,那么这2个CALL有可能是选怪CALL,或者跟选怪CALL有密切关系的,因为只有在做选怪动作时候才被断下,那么我们来分析下这2个CALL的参数,首先我们得明白,选怪CALL肯定有个参数是怪物ID(也就是要被选中的那个怪物ID),但从下往上数,第1个CALL 发现没有push 之类压入参数的之类,所以先不看这个,来看下上面这个CALL先,在这下个断点,然后进入游戏 选怪操作,被断下来了,这时候,我们把目光移到寄存器窗口,发现亮了ECXEBX ESI 这3个寄存器,而这3个寄存器的值又不是很大,但是看在这个CALL调用之前 好像只有 push esi 没有对 ecx 和 ebx的值有任何操作,那么我们在这个入口下个断点进入游戏选怪断下看看,这个CALL的上一层是什么,看看会不会有其他什么CALL也是只做选怪才会被断下的,
进入游戏选怪操作后被断下,看堆栈窗口:
我们跟随第一个堆栈返回,到达:
我们下断点后,进入游戏进行操作选怪动作,被断下后这个CALL调用之前,压入了2个寄存器 edi和esi的值,那么我们把目光放到寄存器窗口,看看这2个寄存器,如果这2个寄存器里有当前被选中的怪物ID,那么这个CALL也许是可能就是真正的选怪CALL了,但是根据分析过很多数据的经验和心得,我们看见edi寄存器的值01000000 好像并不像是怪物ID,所以我们要来测试分析下esi寄存器的值是不是怪物的ID,我们记住当前选中的这个怪物和esi的值,先取消选中这个怪物,我们再次选中这个怪物,如果esi的值是怪物的ID值,那么esi的值肯定就不会变,因为我们没有换其他怪物选,还是选原来的那个怪物,所以怪物ID是不会变的,我们发现,esi寄存器的值和edi的值是不会变的,我们换个怪物来选下,看哪个寄存器的值会变,因为如果换了个怪物选,每个怪物的ID是不一样,肯定寄存器的值就会不一样,换选怪物后,发现esi寄存器的值变了,而edi的值却没有变,那么edi的值是固定的,可能是个常量或什么标示值吧,我们不管了,记录下 这次esi的值 0115,我再前面的 课程里就讲解过,分析CALL除了看参数外,还有一步就是,进行测试调用,是否能达到成功,那么这个这CALL还是比较简单的,容易写,整理下:push edipush esicall 00B88B90既然edi不变,而esi是选中目标怪物的ID,那么我们就直接push 01000000push 0115call 00B88B90由于这个CALL执行后,游戏做了堆栈平衡操作,所以add esp,08 平衡2个操作数也是要写上的,如果不写上可能游戏会报错崩溃,好了,我们来测试下,是否能选中这个怪物,测试后发现能选中怪物,而且不报错,那么这时候这个CALL就是100%的选怪CALL了,00700B6C |.57            PUSH EDI                                 ;01000000=常量00700B6D |.56            PUSH ESI                                 ; 000000BD=怪物ID00700B6E |.E8 1D804800   CALL xajh.00B8E850                     ;TAB选怪CALL00700B73 |.83C4 08       ADD ESP,8                              ;到达这
代码测试:
易语言代码编写:



火狼飞侠 发表于 2014-7-1 18:11:51

沙发!沙发!

heartwwd 发表于 2014-7-12 21:37:31

当然是要支持了!

变异兔子 发表于 2014-7-14 18:04:43

嗯~支持一下

wuyudp 发表于 2014-7-15 16:57:46

帮你顶....

xl58 发表于 2014-7-17 07:25:48

感恩无私的分享与奉献 :)

最复杂的单纯 发表于 2014-7-19 03:44:17

我抢、我抢、我抢沙发~

zhuzhuli 发表于 2014-12-20 03:01:30

一直在看

ymgsk123 发表于 2014-12-20 20:18:48

元芳你怎么看?

Patelixia 发表于 2014-12-26 00:44:40

OMG!介是啥东东!!!
页: [1] 2 3
查看完整版本: 笑傲江湖选怪CALL分析过程