阅读目录
植物大战僵尸游戏分析:樱桃爆炸功能相关逻辑分析
发布于: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 我们调大僵尸的生命值
查看谁改写了地址 查看谁访问了地址
去掉上面的cmp,然后回溯,就可以定位到樱桃炸弹的爆炸发生地方:
分析结论: 通过分析,即使不种植樱桃炸弹(或在卡槽中不选择樱桃),也能通过call樱桃炸弹的爆炸函数来实现爆炸效果。 |

最新评论
发表评论