文章目录
- 一、Android 逆向方法
- 1、静态逆向解析
- 2、函数调用分析
- 3、动态运行跟踪
- 4、运行日志分析
- 5、文件格式解析
- 6、敏感信息分析
- 7、网络信息监控
- 8、软件动态调试
- 9、环境伪装模拟
一、Android 逆向方法
1、静态逆向解析
静态逆向解析 : 静态解析 APK 安装文件 , 反编译 APK 文件 , 然后反汇编 Dex 字节码文件 , SO 动态库文件 ; 分析这些二进制文件细节 ;
2、函数调用分析
函数调用分析 : 研究应用中调用了哪些函数 , 如 : 资源或目录中某些文件被加密了 , 需要解密操作 , 尝试分析 Java / OpenSSL 等的加密解密 API 方法 , 拦截这些方法 , 获取相应的秘钥 ; 获取到秘钥后 , 可以自己实现一个算法 , 将加密文件还原成原始数据 ;
3、动态运行跟踪
动态运行跟踪 : 将程序运行起来 , 运行中动态分析数据 ; 如 : 做一些函数拦截 , 拦截 Java 的字符串 String 的 构造函数 或 追加函数 , 按照时间顺序 , 记录函数的结果 , 然后找到关键信息的拼接过程 , 如 : 访问网络时 , 必然拼接 URL 地址 , 这些都是字符串 , 比较容易分析 ;
4、运行日志分析
运行日志分析 : 针对一个几百兆的大型的程序 , 一般不会上来就进行静态分析 , 很难接近应用的核心部分 ; 这种情况下 , 优先监控这个应用的运行日志 , 执行应用相关操作 , 查看哪些操作会产生哪些日志 , 之后根据日志信息 , 定位对应的代码位置 , 然后进行 静态 / 动态分析 ;
5、文件格式解析
文件格式解析 : 解析编译后的 SO 等格式的文件 , 提取重要的信息 , 如解析 SO 动态库 , 提取其中的 jni 入口方法 , 然后到 Dex 字节码文件中查询对应的 jni 方法调用 ; 有时候可以获取代码中的以明文形式声明的 密码 , 秘钥 , 字符串 相关信息 ; 解析 SO 动态库中的所有字符串信息 , 通过观察特征 , 位数 , 可以知道哪些字符串可能是秘钥字符串 , IP 地址 , URL 地址 , 域名 等 ;
6、敏感信息分析
敏感信息分析 : 分析 敏感的 函数名 , 类名 , 字符串 , 文件名 ;
7、网络信息监控
网络信息监控 : 针对有网络功能的应用 , 应用需要与服务器进行交互 , 如果网络交互没有进行防护措施 , 如使用 HTTP 链接 , 或 未加密数据 等 , 很容易被截获明文数据 , 这些数据都需要进行二次加密 ; 网络游戏 , 如果被截获了数据 , 后果是灾难性的 , 外挂就做出来了 ;
8、软件动态调试
软件动态调试 : 在调试环境中 , 调试软件 , 可以设置断点 ; 通过修改寄存器跳过调试检测 ;
9、环境伪装模拟
环境伪装模拟 : 使用 PC 电脑机上运行 Android 系统 , 应用为了避免在 PC 上运行 , 删除了 x86 架构的 so 动态库 ; 使用 雷电模拟器 等 模拟器 , 可以在 PC 电脑上运行 ARM 库 , 只是运行速度慢一些 ;