一、程序介绍
接下来会针对每一个功能进行分析。
二、无限阳光
使用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)
{