游戏安全实验室 首页 技术入门 查看内容

 阅读目录

植物大战僵尸游戏分析:樱桃爆炸功能相关逻辑分析

发布于:2016-7-5 16:36   |    147635次阅读 作者: 管理员    |   原作者: TP   |   来自: 原创

分析目的:

通过分析樱桃炸弹爆炸函数的逻辑功能,锻炼自己的指定逻辑分析能力。指定分析目标在的分析在以后运营对抗中用的很多。

 

逻辑实现:

 

模拟实现

远程注入,call爆炸函数:

 

__declspec(naked)void BoomCall(DWORD *pxy)

{

_asm

{

mov ebx,[esp+4] //参数

mov ecx,[ebx]  //x

mov edx,[ebx+4] //y

push 0x7F

push 0x1

push 0x1

push 0x73

push edx //y

push ecx //x

push 0x3 //附近的物品

mov eax,dword ptr ds:[0x7794f8] 

mov eax,dword ptr ds:[eax+0x868]

//db [007794F8]+868

push eax

mov edx,0x00436190

call edx

ret

}            

 

}

 

HANDLE hProcess = GetGameProcessHandle();

//在目标进程分配内存空间 以方便写入要执行的代码

PVOID FarCall2 = 

VirtualAllocEx(hProcess,NULL,0x8FFF,MEM_COMMIT,PAGE_EXECUTE_READWRITE);

//给参数分配空间

PVOID CallArg2 = 

VirtualAllocEx(hProcess,NULL,sizeof(int)*2,MEM_COMMIT,PAGE_READWRITE);

//向目标进程的 目标地址写入我们要执行的代码 

WriteProcessMemory(hProcess,FarCall2,BoomCall,0x8FFF,&bw);

//向目标进程 写入参数

WriteProcessMemory(hProcess,CallArg2,xy,sizeof(DWORD)*2,&bw);

//打印出注入的线程地址

TRACE("\n addr_BoomCall=%x \n",FarCall2);

HANDLE threadinject2 = 

CreateRemoteThread(hProcess,NULL,NULL,( LPTHREAD_START_ROUTINE)FarCall2,CallArg2,NULL,NULL);

WaitForSingleObject(threadinject2,0xFFFFFFFF); //等待 ...

 

图中并没有种植樱桃炸弹,但是实现了爆炸效果,杀掉一只僵尸

分析思路:

为了确定樱桃炸弹的爆炸过程,必须让这一过程能够重现,但是在游戏中往往樱桃炸弹达到了秒杀的效果,不好分析爆炸过程。于是我们通过 豌豆炮攻击来确定 僵尸的生命值,然后调大生命值的思路让樱桃炸弹的爆炸过程能够多次发生。

通过豌豆炮攻击,CE扫描内存,确定了僵尸的生命值为270,一次豌豆炮攻击减少20

我们调大僵尸的生命值

樱桃爆炸的攻击地址,樱桃炸弹的攻击力为1800

查看谁改写了地址

查看谁访问了地址

 

去掉上面的cmp,然后回溯,就可以定位到樱桃炸弹的爆炸发生地方:

 

分析结论:

通过分析,即使不种植樱桃炸弹(或在卡槽中不选择樱桃),也能通过call樱桃炸弹的爆炸函数来实现爆炸效果。


*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

分享到:
踩1 赞0

收藏

上一篇:植物大战僵尸游戏分析:阳光点击及收集相关逻辑分析

下一篇:植物大战僵尸游戏分析:种植功能相关逻辑分析

最新评论
B Color Image Link Quote Code Smilies

发表评论