12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 701|回复: 0

植物大战僵尸之代码注入与魔改

[复制链接]

52

主题

52

帖子

114

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
114
发表于 2020-2-28 10:51:56 | 显示全部楼层 |阅读模式
小白正在学逆向,于是乎就拿了植物大战僵尸开了刀,就想来看看怎样实现代码注入与魔改。
顺便魔改了自己玩玩.。。
DLL源码及魔改的PVZ本体:https://github.com/za233/PVZPatch
(源码要编译为32位debug,release版似乎有点问题)

这里我决定利用dll来注入代码,大概思路就是自己写dll,让pvz在特定时候调用我们的dll
所以先IDA打开,查看下导入表

由于我们目的是让pvz加载我们自己的dll,于是要找找加载dll的函数,LoadLibrary

交叉引用找到目标代码

我们在这里下断点,然后打开PVZ进行调试,发现玩了很久很久都没有出发这个函数,根据DLL名字可以猜测是个调试有关的函数
在游戏进行正常玩耍时是基本不执行的,而且似乎是与初始化,导入调试有关的函数的,我们可以吧中间那些全部都nop
直接跳转到第一个if失败后的代码,伪造一种加载dll失败的假象

这两个jnz跳转位置就是if语句成功后的代码,将它们全部nop掉,强行执行到最后那个jmp,也就是结束
于是乎在最后jmp语句和loc_58589C中间就是一大段无用代码,nop掉,我们注入加载自己dll的代码
先得写入dll名字以及一些导出函数名字,用于注入代码(我这里写在了最后面,前面就放代码)


接下来写加载dll的代码,然后将PE文件的入口点指向这里

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

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


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

这里刚好有个不用的代码,刚好可以拿来注入一个jmp指令,但是我们无法知道dll函数的地址,所以要动态获取
但是大小不足以动态获取,所以可以先写个jmp跳转道空间足够的地方,动态获取地址后再跳转过去

刚好之前nop掉的那么大一堆字节就有了作用

这里pusha,pushf是为了保持寄存器的值,防止返回到游戏逻辑本体后程序炸裂
再者updater函数的参数是通过寄存器传递的,我们的函数TickFunc也可以通过栈来得到参数
最下面的跳转回原代码。
其他的函数也可以通过这样的方法注入代码

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

来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-5-14 09:53 , Processed in 0.140625 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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