当前位置: 首页 > article >正文

【安卓逆向之内存读写

在 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.修改内存权限


http://www.kler.cn/news/342972.html

相关文章:

  • C++ 基于SDL库的 Visual Studio 2022 环境配置
  • 在培训考试小程序页面弹出半屏的弹窗交互实践
  • 使用Spring Security+jwt+redis实现登录注册逻辑
  • 请解释一下数据库的分区和分片?请解释一下数据库的日志和日志的重要性?
  • 【Python】使用优先级队列管理任务顺序
  • 设置 Notepad++ 制表符(Tab 缩进)宽度为2个空格大小
  • Bit-map按位存储--轻松应对面试被问到从10亿个数字中查找指定数是否存在
  • Oracle 12201非PDBS模式单机部署(静默安装)
  • 洗衣店订单管理:Spring Boot技术突破
  • 使⽤ Override 和 New 关键字进⾏版本控制(C#)
  • python调用父类同名成员
  • 高效批量重命名:Windows系统文件与文件夹管理技巧解析
  • [SQL] 数据库增删改操作
  • 前端在vue项目静态文件夹下引入非默认字体并使用
  • 内衣洗衣机和手洗哪个干净?2024内衣洗衣机实力排行揭晓
  • 毕设---中国移动网站平台管理系统的设计与实现
  • LeetCode518:零钱兑换
  • unity 2d 近战攻击判定的三种方式以及精确获取碰撞点
  • NTO和MPW
  • python 实现even_tree偶数树算法