吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9460|回复: 3
收起左侧

[游戏安全] 植物大战僵尸之代码注入与魔改

[复制链接]
Rimao 发表于 2020-1-31 15:26
本帖最后由 Rimao 于 2020-1-31 15:28 编辑

小白正在学逆向,于是乎就拿了植物大战僵尸开了刀,就想来看看怎样实现代码注入与魔改。
顺便魔改了自己玩玩.。。
DLL源码及魔改的PVZ本体:https://github.com/za233/PVZPatch
(源码要编译为32位debug,release版似乎有点问题)

这里我决定利用dll来注入代码,大概思路就是自己写dll,让pvz在特定时候调用我们的dll
所以先IDA打开,查看下导入表
TIM图片20200131145625.png
由于我们目的是让pvz加载我们自己的dll,于是要找找加载dll的函数,LoadLibrary
TIM图片20200131145819.png
交叉引用找到目标代码
TIM图片20200131150020.png
我们在这里下断点,然后打开PVZ进行调试,发现玩了很久很久都没有出发这个函数,根据DLL名字可以猜测是个调试有关的函数
在游戏进行正常玩耍时是基本不执行的,而且似乎是与初始化,导入调试有关的函数的,我们可以吧中间那些全部都nop
直接跳转到第一个if失败后的代码,伪造一种加载dll失败的假象
TIM图片20200131150428.png
这两个jnz跳转位置就是if语句成功后的代码,将它们全部nop掉,强行执行到最后那个jmp,也就是结束
于是乎在最后jmp语句和loc_58589C中间就是一大段无用代码,nop掉,我们注入加载自己dll的代码
先得写入dll名字以及一些导出函数名字,用于注入代码(我这里写在了最后面,前面就放代码)

TIM图片20200131150738.png
接下来写加载dll的代码,然后将PE文件的入口点指向这里
TIM图片20200131150923.png
记得还要再加载之后写个jmp跳转回原来的入口点地址,然后发现就可以注入dll了。
但我们仅仅注入dll感觉不太够,再来个回调系统23333
这里就搞下游戏运行时的注入吧,我把函数命名为TickFunc,vs导出就是_TickFunc@0。

这里我已经通过CE+IDA找到了更新游戏的函数  

TIM图片20200131151607.png
于是故技重施,让执行这个函数的开头,跳转到我们的dll导出函数TickFunc里去

这里刚好有个不用的代码,刚好可以拿来注入一个jmp指令,但是我们无法知道dll函数的地址,所以要动态获取
但是大小不足以动态获取,所以可以先写个jmp跳转道空间足够的地方,动态获取地址后再跳转过去
TIM图片20200131152415.png
刚好之前nop掉的那么大一堆字节就有了作用
TIM图片20200131152039.png
这里pusha,pushf是为了保持寄存器的值,防止返回到游戏逻辑本体后程序炸裂
再者updater函数的参数是通过寄存器传递的,我们的函数TickFunc也可以通过栈来得到参数
最下面的跳转回原代码。
其他的函数也可以通过这样的方法注入代码

于是乎关于PVZ.exe的修改就可以了,接下来就可以编写DLL来实现魔改了,DLL源码开头给了哦

免费评分

参与人数 3吾爱币 +7 热心值 +3 收起 理由
52pojie61022109 + 1 + 1 热心回复!
我想我是爱你的 + 1 + 1 我很赞同!
Hmily + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hash多多 发表于 2020-2-8 08:55
楼主逆向怎样学呀?有没有学习路线
 楼主| Rimao 发表于 2020-2-10 14:05
hash多多 发表于 2020-2-8 08:55
楼主逆向怎样学呀?有没有学习路线

C语言先得知道 然后汇编吧 一般就是自己写程序自己逆
本人也是菜鸡
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 03:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表