游戏找CALL练习实例ONE.docx

上传人:b****2 文档编号:2460891 上传时间:2022-10-29 格式:DOCX 页数:15 大小:455.21KB
下载 相关 举报
游戏找CALL练习实例ONE.docx_第1页
第1页 / 共15页
游戏找CALL练习实例ONE.docx_第2页
第2页 / 共15页
游戏找CALL练习实例ONE.docx_第3页
第3页 / 共15页
游戏找CALL练习实例ONE.docx_第4页
第4页 / 共15页
游戏找CALL练习实例ONE.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

游戏找CALL练习实例ONE.docx

《游戏找CALL练习实例ONE.docx》由会员分享,可在线阅读,更多相关《游戏找CALL练习实例ONE.docx(15页珍藏版)》请在冰豆网上搜索。

游戏找CALL练习实例ONE.docx

游戏找CALL练习实例ONE

游戏找CALL练习实例ONE

目标:

游戏找CALL练习实例ONE

记:

看这篇找CALL文章,并不是说要学会它的操作步骤,而是学会找步骤的原理,只有懂得原理,才算真正会了.不要因为模拟器的简单而忽略这篇文章,也不要因为曾经写过这个模拟器的挂而忽略这篇文章.希望这篇文章能给你带来帮助.

这是一位大牛做的模拟器器,今天就来找这个模拟器的CALL

用OD加载模拟器

然后按F9运行

下bpsend断点

P:

为什么要下send断点?

*send是微软提供的一个API函数,可以用来发送数据包.绝大部分游戏都是用这个函数来发包的,其他还有WSASendsendtoWSASendto==send对应的收包函数是recvWSASend对应的收包函数是WSARecv

下段后这里按ALT+B会显示已经下段的地址

*当你暂时不想断下来而又不想删掉就可以按空格来禁止.

断下来后,我们点下模拟器的加血按钮OD立马就断了下来

*标题显示模块-ws2_32表明我们还在系统领空

*游戏发送数据包是调用send函数发送的,掉用以后程序告诉系统我要发包了,然后系统就开发发送封包,这个时候断下来后我们就在系统发送完封包后.

按CTRL+F9返回

P:

为什么要用CTRL+F9返回?

而不是前进?

*程序是一层套着一层的,就像一个箱子里面包含一个箱子,而里面的箱子里又有一个箱子.而我们断的send就是在最里面的箱子,所以我们需要返回到我们所需要的代码层.

我们来看下堆栈窗口

这里第一行是CALL

第二行到第五行是CALL的参数

写成函数就是send(soket,data,datasize,flags)

这个就是系统send所需要的参数

DATA这里存放着send发送的封包内容

DATASIZE表示封包的大小

从MSDN查看一下函数的参数我们会发现他的参数跟我们刚刚反汇编的一样.

*按照__cdecl调用约定参数是从右边开始压入堆栈

继续返回

这里我们已经到了程序领空了(标题显示模拟器,而没有显示ws2_32)

在这里OD已经给我们标明了.这是调用send的汇编代码

因为这个模拟器并没有写接收返回封包的代码所以我们调用这个send函数程序也是没有反应的

继续返回

这里有一个CALL如果我们第一次找,我们并不能确认这个是否是我们要找的

P:

如何确认这个是否是我们需要的CALL呢?

我们先断下来再说

继续返回

这里上面有一个retn

*retn表示一段程序的结束.

这里从JMP00403814开始到下面的retn代表这个是连续的一段代码

继续返回

这里我们又发现一个CALL

先断下来再说

在返回一层

这里也有一个CALL也断下来

好了我们现在已经返回了6层找到了3个CALL

到底哪个是我们需要找的呢我们先来测试下我们找的

把send断点删了暂时没用了

按下加血我们发现所有断点都会断,这个时候我们发现第二个CALL附近有"血"这种文本

当然一般的除了喊话CALL以外不会有很明确的数值当做依据这个时候就要靠你的经验去猜了.

我们在点下吃蓝发现只断下第一个.好了,第一个先不要管了.为啥?

猜的...

好了我们来看看第二个CALL

movedx,00453028

call00452E98

retn

*要写一个CALL,我们就要模拟出他所需要的寄存器,还有堆栈的环境

P:

如果看一个CALL所需要的寄存器?

我们进入call00452E98的内部

选中call00452E98那行按回车就会跳到下面

00452E98/$55pushebp

00452E99|.8BECmovebp,esp

00452E9B|.83C4F8addesp,-8

00452E9E|.53pushebx

00452E9F|.8955FCmovdwordptr[ebp-4],edx

00452EA2|.8BD8movebx,eax

00452EA4|.8B45FCmoveax,dwordptr[ebp-4]

00452EA7|.E81414FBFFcall004042C0

00452EAC|.33C0xoreax,eax

00452EAE|.55pushebp

00452EAF|.687E2F4500push00452F7E

00452EB4|.64:

FF30pushdwordptrfs:

[eax]

00452EB7|.64:

8920movdwordptrfs:

[eax],esp

00452EBA|.8B45FCmoveax,dwordptr[ebp-4]

00452EBD|.BA942F4500movedx,00452F94

00452EC2|.E85513FBFFcall0040421C

00452E98/$55pushebp

00452E99|.8BECmovebp,esp

00452E9B|.83C4F8addesp,-8

00452E9E|.53pushebx

这里是保存堆栈环境我们先不管他

00452E9F|.8955FCmovdwordptr[ebp-4],edx

将EDX保存到[EBP-4]

我们来找下EDX的值

这段汇编代码前面没有给EDX赋值我们返回上一层按小键盘-

上一层

movedx,00453028

这句代码的意思是将453028赋值给EDX

也就是说EDX=00453028

找到EDX的值后继续往下面找

00452EA2|.8BD8movebx,eax

这里需要EAX的值,但是我们找了这一层和上一层并没有发现有给EAX赋值的代码

我们这里先直接给EAX赋值

其他没有了

好了我们现在可以确认了这个CALL调用了EDX和EAX的寄存器的值

这个CALL的写法就是

movedx,00453028

moveax,00991FA8

call00452E98

我们来测试下

CALL成功了

但是,我们拿到另外一台电脑发现居然不能用了?

调试了下发现EAX的值跟刚刚的不一样~

P:

如何取到EAX的固定值呢?

答案很简单用CE搜

看到那个绿色的值了么那个就是EAX的基址,无论EAX的值怎么变都可以在这个地址读取到真正的值

代码如下

movedx,00453028

moveax,456d68

moveax,[eax]

call00452E98

好了现在可以再任意一台电脑上运行了

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

好了先不管这个CALL

我们现在来找下EAX的值。

在call00452E98下断按下加血OD断下来了

然后我们按CTRL+F9返回

好了到了这里

movedx,ebx

moveax,[ebx+124]

call[ebx+120]

这个时候我们发现EAX的值

EAX=[ebx+124]

我们发现CALL地址并不是是直接的地址。

在这个CALL下断点下加血按钮

我们发现[EBX+124]=[0099493C]=00991FA8

EAX=991FA8

刚刚我们找过EAX的基址了

[ebx+120]=[00994938]=00453014

这里的CALL地址写成代码是

moveax,456d68

moveax,[eax]

call453014

CALL成功了`

P:

为什么2个不同地址的CALL都会成功呢?

经过不断测试(如何测试?

点击不同的按钮看看CALL的地址)

发现不同按钮断下来的地址都是不同的。

补魔的地址

冰系的地址

==========

我们来测试下第三个CALL

movedx,[ebx+214]

mov[eax+24c],edx

moveax,ebx

call4324d8

调试过程中

[EBX+214]=0那么edx的值=0

[EAX+24C]=EDX=0

EAX=00991FA8

EAX=EBX=994818

CALL4324d8

寄存器的值都搞清楚了然后我们看看CALL还调用了哪个寄存器

跟进CALL(按F7进入CALL)

004324D8/$53pushebx

004324D9|.8BD8movebx,eax

004324DB|.66:

83BB22010>cmpwordptr[ebx+122],0

004324E3|.742Djeshort00432512

004324E5|.8BC3moveax,ebx

004324E7|.8B10movedx,dwordptr[eax]

004324E9|.FF523Ccalldwordptr[edx+3C]

004324EC|.85C0testeax,eax

004324EE|.7422jeshort00432512

004324F0|.8BC3moveax,ebx

004324F2|.8B10movedx,dwordptr[eax]

004324E5|.8BC3moveax,ebx

这里有一行调用了EBX我们往上找找发现有给EBX赋值的代码那么我们就不必理会了

004324E7|.8B10movedx,dwordptr[eax]

这里调用了EAX在上一层有给EAX赋值的代码

下面就没了

好了用代码注入器写CALL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1