植物大战僵尸阳光的无限掉落以及掉落冷却基地址寻找详细步骤~包含排除不符合条件的地址的讲解,以及如何观察地址情况等

植物大战僵尸阳光的无限掉落以及掉落冷却基地址寻找

阳光的无限掉落冷却时间地址以及基地址寻找

(1)首先我们在第一个阳光掉落后,扫描未知的初始值

在这里插入图片描述

(2)阳光掉落后,此时掉落阳光的冷却倒计时一直在减少,所以我们搜索减少的数值,知道下一个阳光出来之前。

在这里插入图片描述

(3)当下一个阳光出来时,搜索增加的数值(此时增加的就是掉落的阳光)

在这里插入图片描述

(4)找到地址将这个地址对应的数值修改为1,即可是实现无限掉落

在这里插入图片描述

效果图如下:

在这里插入图片描述

(5)右键寻找什么访问了这个地址

在这里插入图片描述

(6)观察详细信息,记录偏移量

在这里插入图片描述

(7)根据给出的16进制的数进行搜索,查找地址

在这里插入图片描述

观察这些地址可知有三个特殊的地址,我们需要将这三个地址一一的进行分析排除

在这里插入图片描述

首先我们分析028AAC58,在使用什么访问了这个地址的时候,发现随着阳光的掉落,数值会发生变化,那么这个特殊的地址就可能成为一个中间地址。我们点击查看详细信息,并记录偏移量

在这里插入图片描述

再次利用十六进制数进行搜索

在这里插入图片描述

此时发现,出现了绿色的基地址,那么我们就可以确定刚刚的中间地址就是正确的,进而排除了另外两个

(8)针对这些地址,通过什么访问了这个地址,得出正确的静态基地址

在这里插入图片描述

实验发现这个时候只有箭头所指向的地址会随着阳光掉落而变化,所以我们确定这个地址为阳光掉落冷却的数值

(9)增加偏移地址,修改数值,锁定指针

在这里插入图片描述

在这里插入图片描述

这个时候我们重新启动游戏,发现阳光还是可以实现无线掉落

综上所述,我们找到了阳光掉落冷却时间的基地址为1AD2E748

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 Android 平台上,我们可以通过 `dlopen()` 函数加载动态库,并使用 `dlsym()` 函数获取动态库中的函数地址。`dlopen()` 函数可以指定动态库的路径,也可以使用系统默认搜索路径来查找动态库。而 `dlsym()` 函数可以传入动态库句柄和函数名来获取函数地址。 当一个应用程序加载一个动态库时,该动态库的基地将被系统动态分配,因此我们通常无法在应用程序中直接获取动态库的基地。但是,在使用 `dlopen()` 函数加载动态库时,可以通过设置 `RTLD_NOLOAD` 标志来查询动态库是否已经被加载,如果已经加载,则可以使用 `dladdr()` 函数查询动态库的基地。具体代码如下: ```c++ #include <dlfcn.h> #include <cstdio> void* get_module_base(pid_t pid, const char* module_name) { FILE* fp = nullptr; void* addr = nullptr; char* line = nullptr; char* path = nullptr; char filename[32]; char buffer[1024]; if (pid < 0) { snprintf(filename, sizeof(filename), "/proc/self/maps"); } else { snprintf(filename, sizeof(filename), "/proc/%d/maps", pid); } fp = fopen(filename, "r"); if (fp != nullptr) { while (fgets(buffer, sizeof(buffer), fp)) { if (strstr(buffer, module_name)) { line = buffer; break; } } if (line != nullptr) { char* ptr = strtok(line, " "); path = strtok(nullptr, " "); strtok(nullptr, " "); addr = (void*)strtoul(ptr, nullptr, 16); } } if (fp) { fclose(fp); } return addr; } void* get_library_base(const char* library_name) { void* handle = dlopen(library_name, RTLD_LAZY | RTLD_LOCAL | RTLD_NOLOAD); if (handle != nullptr) { Dl_info info; dladdr(handle, &info); dlclose(handle); return info.dli_fbase; } return nullptr; } ``` 其中,`get_module_base()` 函数可以根据进程 ID 和模块名来获取模块的基地。如果进程 ID 为负数,则表示获取当前进程的模块基地。而 `get_library_base()` 函数可以根据库名来获取库的基地。该函数使用 `dlopen()` 函数加载库,并使用 `dladdr()` 函数查询库的基地。注意,使用 `RTLD_NOLOAD` 标志加载库时,该库必须已经被其他进程或线程加载过,否则 `dlopen()` 函数将会失败。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CYS.burst

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

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

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

打赏作者

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

抵扣说明:

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

余额充值