安卓逆向之双剑合璧实现内存扫描

一、内存地址的扫描方式

总有同学会问,PC端的逆向调试工具有CE,OD,XDBG等等,那在移动端是否有工具可以调试安卓模拟器或者是手机呢?

答案是肯定的,我先拿扫描安卓模拟器中的APP数据来举例

常用扫描模拟器数据的方式有三种

第一种扫描方式——GG修改器

最通用的方式是通过GameGuardian(GG修改器)等修改器模拟器来进行扫描,这种工具是以APK的形式安装在手机内部的,所以他可以直接对APP进行附加并进行扫描。

但是这种方式的缺点是速度比较慢,功能少,简单点说就是发展的还不够完善。

比如我们用GG修改器来对安卓版的一款小游戏进行扫描。

打开雷电模拟器,然后再模拟器中打开GG和植物大战僵尸安卓版。

附加进程

然后对游戏内的阳关值进行扫描

我们点击右下角的新搜索后,发现扫描的速度非常的慢,当然这是相对于PC端的CE扫描。

刚开始扫描过程看似很快,其实扫描完需要近一分钟的时间,然后我们还可以对其结果进行过滤,只需要对结果进行改善即可。

最终可以得到一个地址,而这个地址就是游戏在模拟器中的真实地址

那我们用CE直接附加模拟器能不能扫描到这个地址呢?或者能不能扫描到真正的阳光值呢?我们来尝试下!

直接用CE附加模拟器,并对当前的阳光值进行扫描,这个过程我们就不详细讲解了 ,大家可以到WX公众:”任鸟飞逆向“获取PC端的逆向基础讲解,另外十月份实地+全日制+在线班(C++,汇编逆向,游戏逆向安全,内存,封包协议,加密解密,破解与防破解,外挂与反外挂, 最新检测对抗模拟框架, UE4,U3D引擎游戏学习,安卓逆向,模拟器逆向等.),欢迎咨询哦!

扫描过后我们同样得到了一个阳光值,并且对齐进行修改后,游戏内的阳光也发生了改变。

那么是不是说我们用CE直接扫描就可以了,无需GG模拟器了呢?

通过观察,我们发现这个地址和GG扫描到的地址很像,但是并不一样。

其实我们扫描的只是虚拟机的地址,而在CE和模拟器内APP之间是有一层虚拟机进行中转的,

比如我们在模拟器内开启了多个APP,这些APP的内存在模拟器内是相对独立的

但是如果我们用CE直接扫描模拟器的话,那么我们扫描到的这些地址都是同一个虚拟机进程的内存地址。

并且我们对这个地址是无法进行访问的,或者说是无法获取到游戏内真正的访问代码

那么CE扫描有没有意义呢?答案是有!

第二种扫描方式——CE+GG

CE和GG是可以配合着扫描的,通过对CE的操作,我们会发现其扫描模拟器的速度非常快,那么我们可以先用CE去进行扫描。

扫描到结果后,讲其修改成一个比较大比较另类的数值,然后用GG扫描这个数值,这样得到的结果会少很多,速度也块很多。

或者,如果我们想扫描一个加密的数值,或者未知的数值,那么可以用CE先把这个值扫出来,然后再用GG扫描精确数值,这样就省去了很多的无用功。大家可以自己尝试扫描一下,看看前两种办法在效率上有多大的差异。

第三种扫描方式——CE桥接模拟器

如果我们不想用GG修改器,是否可以打到第二种方法的效果呢?答案同样是肯定的!

我们可以在模拟器中运行CEServer,他的作用相当于GG,然后通过tcp协议进行通信,也就是一种桥接的方式来和PC端的CE进行交互。

CE通过TCP让CEServer来帮其进行扫描,然后CEServer讲扫描结果通过TCP传递给CE

这样我们就可以直接用CE来扫描的到模拟器中真正的内存地址

当然这种扫描方式也相对于CE直接扫描要慢 一些,因为中间多了一个通信的过程,但是无论怎样,这个扫描的速度是比GG要快很多的。

CE和GG修改器各有优缺点

CE扫描快,功能强大,但是由于体量大也更加容易被检测到,并且需要桥接才能直接扫描。

GG扫描慢,功能少,但是在检测上会安全一些,并且无需桥接,直接扫描。

综合考虑,如果在检测上可以做一些处理,那么用CE桥接的方式是很方便的,否则可以考虑CE+GG的方式。

二、桥接CE,扫描安卓模拟器

如果想要用CE桥接的方式扫描安卓模拟器,我们需要做一些准备工作

1.下载CE最新版本

https://github.com/cheat-engine/cheat-engine/

然后拉到最下面,下载源码以及编译好的CE

当然我们也可以直接到WX公众:任鸟飞逆向,资源下载中进行下载,同时下载android-ndk,接下来编译CEServer使用

2.编译CEServer

打开下载好的CE源码,到以下目录

ALT+R,输入cmd回车打开命令行窗口

输入cd c:\Users\22177\Desktop\cheat-engine-7.4\cheat-engine-7.4\Cheat Engine\ceserver\ndk-build\EXECUTABLE ,回车打开这个目录

然后打开雷电模拟器的开发者模式和USB调试

将ndk中的ndk-build.cmd拖入命令行窗口中,回车后完成编译

第一次编译中会有很多错误,忽略即可。

在刚刚打开的目录中会生成3个文件

讲这三个文件夹拷贝到CE文件夹中,

这样我们的准备工作就完成了

3.桥接CEServer

重新打开cmd窗口

输入cd E:\leidian\LDPlayer4 打开雷电模拟器所在目录

输入adb connect 127.0.0.1:5555 PC端和模拟器链接,这里的5555是雷电模拟器的端口,可以在其官网查到

输入adb push C:\Users\22177\Desktop\ce\ce\x86\ceserver /data/local/tmp/

讲ceserver发送到模拟器的/data/local/tmp/目录下,

输入adb shell 进入设备Linux shell环境,获取设备root权限

输入cd /data/local/tmp/ 进入模拟器ceserver目录,乱码需要打两次

输入chmod 777 ceserver 在Linux shell环境下提高ceserver权限

输入./ceserver 运行ceserver

运行成功以后会看到端口号52736

接下来另外开启一个命令行窗口,

输入cd E:\leidian\LDPlayer4 打开雷电模拟器所在目录

输入 adb forward tcp:52736 tcp:52736进行端口转发

这一条输出完成后,第一个窗口会弹有内容输出,说明转发成功

4.配置CE,附加进程

打开CE,点击附加按钮

配置完成以后,附加进程目录变成了模拟器中的APP,则说明配置成功了

接下来我们就可以用CE去搜索小游戏的数值了,

虽然速度没有正常CE快,也差不了太多,扫描一个数据用三四秒的时间,已经完胜GG了

下节课我们来通过CE查找偏移表达式,得到基地址,欢迎关注任鸟飞逆向进行交流学习

下面是用到的工具的下载链接

GG和小游戏可以到WX公众:任鸟飞逆向下载

CE下载官网:https://github.com/cheat-engine/cheat-engine/下载最新版本即可

雷电模拟器官网:雷电安卓模拟器-手游模拟器安卓版_android手机模拟器电脑版_雷电模拟器官网建议下载32位版本

猜你喜欢

转载自blog.csdn.net/qq_43355637/article/details/126941992