【逆向工程】植物大战僵尸

一、程序介绍  

接下来会针对每一个功能进行分析。

图片

二、无限阳光

使用Cheat Engine工具对程序集中的具体数值进行搜索,一般第一次会搜索到很多地址都存在该数值。可以稍微将数组进行变化,比如种一个植物让阳光少一点,然后点击“再次扫描”搜索变化后的数组,直到搜索到。

下图是搜索到的地址,但是这个地址不是基地址

(可以理解成打开程序不会变化的地址)。搜索到的这个地址下次重新打开游戏再搜索它就不是这个地址了。所以要找到存储阳光的基地址

图片

再次打开游戏,阳光所在地址就变了。

先约定一下 1EFD5A1(单纯指这个数组),[1EFD5A1](中括号括起来的是值存在该地址里面的数组)。就是c语言中 p和*p的意思,下面会用到

图片

打开OD,对这个不知道被多少个指针值了的地址在数据区搜索地址,可以看见数值是64=>十进制100就是阳光位置,对该地址下内存断点,主要是当阳光变化的时候看看谁访问了这东西

图片

add    dword ptr ds:[edi+0x5578],eax   把eax的值加在了刚刚的地址上面,猜测这地方肯定是当点击阳光的时候它做加法。但是不重要🤷‍♂️,需要找的是刚刚那个地址可以表示成[[基地址+xxx]+xxx]这种形式。这样每次打开游戏就可以通过这个地址的表示直接定位到阳光地址

阳光地址:[edi+0x5578]

那edi又怎么表示?

图片

edi还是的值我们可以从Cheat Engine工具中搜索,右键查看谁访问了这个地址。和下内存断点一个意思,一直到Cheat Engine搜索到绿色的地址,那就是基地址

阳光地址:[[779618+868]+5578]

因为之前忘截图了,我也懒得截了。中间先省略找基地址的过程,意思就是那个意思。但是下面无限金币的我截图了

图片

找到这个地址的表示方式,直接上代码。

static int GetProcessIdByWindowName(string windowName)
        {
            IntPtr hWnd = FindWindow(null, windowName);
            if (hWnd != IntPtr.Zero)
            {
                uint processId;
                GetWindowThreadProcessId(hWnd, out processId);
                return (int)processId;
            }
            return 0;
        }
private void button1_Click(object sender, EventArgs e)
{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Oxo Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值