【安卓逆向之内存读写

在 Android 逆向工程中,内存读写是一个常见的操作,通常用于分析和修改应用程序的行为。

内存读写的目的

  1. 分析应用行为: 通过读取内存,可以获取应用程序在运行时的状态信息,比如变量值、函数调用栈等。

  2. 破解和修改应用: 通过写入内存,可以修改应用程序的行为,比如绕过某些检查、解锁付费功能等。

  3. 调试和研究: 逆向工程师可以通过内存读写来调试应用程序,了解其内部工作机制。

内存读写的工具

  1. Frida: 一个强大的动态分析工具,允许开发者在应用程序运行时插入自己的脚本。Frida 可以用于拦截和修改函数调用、读取和写入内存等。

  2. GDB: GNU 调试器,可以用于调试 Android 应用程序,支持内存读写操作。

  3. IDA Pro: 一个交互式反汇编器,支持静态分析和动态调试,可以用于内存读写。

  4. Radare2: 一个开源的逆向工程框架,支持多种平台和架构,提供内存读写功能。

内存读写的基本操作

读取内存

读取内存通常涉及获取应用程序的内存地址,然后从该地址读取数据。以下是一个使用 Frida 的示例:

Java.perform(function() {
    // 获取目标模块的基地址
    var moduleBase = Module.findBaseAddress("libtarget.so");
    
    // 计算目标变量的内存地址
    var targetAddress = moduleBase.add(0x1234);
    
    // 读取内存中的整数值
    var value = Memory.readInt(targetAddress);
    console.log("Value at address:", value);
});
写入内存

写入内存通常用于修改应用程序的行为。以下是一个使用 Frida 的示例:

Java.perform(function() {
    // 获取目标模块的基地址
    var moduleBase = Module.findBaseAddress("libtarget.so");
    
    // 计算目标变量的内存地址
    var targetAddress = moduleBase.add(0x1234);
    
    // 将整数值写入内存
    Memory.writeInt(targetAddress, 42);
    console.log("Value written to address:", 42);
});

细分如下:
1.读取指定地址的字符串

var soAddr = Module.findBaseAddress("xxxxx.so");
console.log(soAddr.add(0x2C00).readCString());

2.dump指定地址的内存

console.log(hexdump(soAddr.add(0x2C00)));

3.读指定地址的内存

console.log(soAddr.add(0x2C00).readByteArray(16));
console.log(Memory.readByteArray(soAddr.add(0x2C00),16));//原先的api

4.写指定地址的内存

soAddr.add(0x2C00).writeByteArray(stringToBytes("xiaojianbang"));
console.log(hexdump(soAdd(0x2C00)));

5.申请新内存写入

Memory.alloc()
Memory.allocUtf8String()

6.修改内存权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值