有谁还不会找技能Call跟我来(以打坐为例子)

时间紧,我不想说太多了,看文章前先确保你有过研究天龙的经验
(注意抠紧我的每一个字,不然你的头会变大)
OD附加 bp send 打坐,断下
02D74C48 0B 00 1A 00 00 91 00 00 80 BF 23 00 FF FF FF FF
02D74C58 DA 74 00 00 FF FF FF FF 00 00 80 BF 00 00 80 BF
23是打坐的技能号,以前我也说过

在23那里下内存写入断点,回游戏里打坐,OD断在005545A9处,原来是串传送指令,看了一下中间的窗格,发现23是从[esi]=[0012FC20]传过来的,接下来我们把目标放到0012FC20上。





再重来一次,继续在23那里下断,断下后按N次ctrl+f9




直到停在Call 004247B0 的返回处,我们不知道004247B0这个函数是干什么的,但有一点时肯定的,
函数004247B0()
{
Mov [0012FC20],[xxx]
}


我们来看一下004247B0内部世界




在函数004247B0的第一句那里下断,回到游戏里打坐,游戏如我们所愿断了下来,注意了,一边步过每一句,一边观察[0012FC20] (别问我在那里看0012FC20),




直到步过0042490C Call 004243B0时,[0012FC20]变成了23,呵呵,是不是思路有点乱了?没关系,我们来整理一下,


函数004247B0()
{
Call 004243B0
Mov esi, 0012FC20
rep movs byte ptr es:[edi],byte ptr[esi] //串传送23至发包缓冲区
send(...)
}


函数004243B0()
{
Mov [0012FC20],[xxx]
}


明白不?我们接下来要揭开xxx的神秘面纱。
要跟进004242B0吗?你可以跟进去,但我在这里要偷懒一下
在0042490C Call 004243B0上面看到一句movsx edx,word ptr[esi+84]
我们来断这句看看(你会问为什么要断这一句?答:没什么,累了娱乐一下)




回到游戏里打坐,断下了,我们看看中间的窗格,[053FE09C]=0023,恩有搞头。思路又乱了?我们再整理


函数004247B0()
{
Call 004243B0
Mov esi, 0012FC20
rep movs byte ptr es:[edi],byte ptr[esi] //串传送23至发包缓冲区
send(...)
}


函数004243B0(传地址053FE09C)
{
Mov [0012FC20],[053FE09C] //[053FE09C]=0023
}


猜一下,xxx就是053FE09C,不信的话跟进函数004243B0里看看


我们看看是什么东西改变了[053FE09C],在053FE09C处下内存写入断点




回到游戏里打坐(又打坐啊,烦不烦,快成佛了~~)




断在00423A27 mov word ptr [esi+84],ax 看看中间窗格,你的明白?
ctrl+f9一次执行到返回




OK,看到了打坐的原貌了


函数004247B0()
{
Call 004243B0
Mov esi, 0012FC20
rep movs byte ptr es:[edi],byte ptr[esi] //串传送23至发包缓冲区
send(...)
}


函数004243B0(传地址053FE09C)
{
Mov [0012FC20],[053FE09C] //[053FE09C]=0023
}


打坐(...,23,...)
{
mov [053FE09C], 23
ret
}


完结。

转载于:https://www.cnblogs.com/rogee/archive/2010/10/11/1847948.html

猜你喜欢

转载自blog.csdn.net/weixin_34068198/article/details/94681113
今日推荐