【Android 逆向】【ARM汇编】 全局资源重定位

android,逆向,arm,汇编,全局,资源,定位 · 浏览次数 : 26

小编点评

**资源重定位解释:** **字符串反汇编代码:** ``` .rodata:00001E20 __exidx_end DCB \"a + b = %d\" ``` * **`.rodata`** 是一个存储资源的段。 * **`__exidx_end`** 是一个寄存器,存储着字符串反汇编代码的结束地址。 * **`DCB`** 是一个字节字符串,包含着字符串反汇编代码的指令。 * **"`a + b = %d`"** 是一个字符串常量,其中 `%d` 是一个地址。 **代码解释:** 1. **`.rodata`** 段中存在一个名为 `__exidx_end` 的寄存器,其值指向字符串反汇编代码的结束地址。 2. **`DCB`** 指向字符串常量 `\"a + b = %d\"" 的字节串。 3. **`%d`** 是一个地址,表示字符串常量的值。 **代码操作:** 1. 将字符串常量 `\"a + b = %d\"" 从内存中的 `data_xref` 段中读取到寄存器 `__exidx_end`。 2. 使用字符串常量 `%d` 在 `__exidx_end` 的地址中进行字节序的读取,将结果存储在 R1 中。 3. 将 R1 的值(字符串常量)与 PC 的值(指向下两条指令的地址)相加,得到字符串常量 `\"a + b = %d\"" 的字节串的起始地址。 4. 从内存中的 `data_xref` 段中读取字符串常量并将其存储在 R0 中。 5. 将 R0 的值(字符串常量)从内存中读取到 R4 中。 **最终结果:** 字符串常量 `\"a + b = %d\"" 的字节串将从内存中读取并存储在 R0 中。

正文

资源重定位解释:

字符串反汇编代码解释:

.rodata:00001E20 __exidx_end DCB "a + b = %d" ; DATA_XREF: main+28^o
.rodata               所在段名
00001E20              偏移地址
__exidx_end IDA       给的一个字符串名称
DCB                   IDA的一种表示形式 表示以字节形式解析 对应还有DCW DCD
"a + b = %d",0        字符串内容,有的以 ,0xA,0 结尾   0xA对应的是 \n 
DATA_XREF: main+28^o  代表该字符串引用位置, 点o即可跳转过去,或者按x会打开交叉引用的表

字符串使用解释:

.text:000005D8 LDR R1, =(__exidx_end - 0x5E4)   这里相当于一个赋值操作
.text:000005DC ADD R1, PC,R1 ; "%d %d"  根据PC进行重定位,找到字符串位置,这里PC的值其实指向的是下两条的指令的位置(固定 arm+8 thumb+4)+so在内存红的基地址
.text:000005E0 STR R0, [SP, #0x38+var_C]
.text:000005E8 STR R4, [SP, #0x38+var_8]

与【Android 逆向】【ARM汇编】 全局资源重定位相似的内容:

【Android 逆向】【ARM汇编】 全局资源重定位

资源重定位解释: 字符串反汇编代码解释: .rodata:00001E20 __exidx_end DCB "a + b = %d" ; DATA_XREF: main+28^o .rodata 所在段名 00001E20 偏移地址 __exidx_end IDA 给的一个字符串名称 DCB IDA

【Android 逆向】【ARM汇编】 事前更新和事后更新

1. 事前更新,事后更新,不更新 不更新 ldr R4, [R1, R2, lsl #1] 相当于 R4 = *(R1 + R2 << 2^1) 之后 R1、R2的值时没有变化的 事前更新(! 的含义)(++i 的感觉) ldr R0, [R1, #4]! 加了感叹号 执行完这一句后 R1的值也是随

【Android 逆向】【ARM汇编】 堆栈

arm 四种栈 1 空栈 栈指针指向空位,每次存入时可以直接存入然后栈指针移动一格;而取出时需要先移动一格才能取出 2 满栈 栈指针指向栈中最后一格数据。每次存入时需要先移动栈指针一格再存入。取出时可以直接取出,然后再移动栈指针 3 增栈 栈指针移动时向地址增加的方向移动的栈 4 减栈 栈指针移动时

【Android 逆向】【ARM汇编】 函数的栈帧

1. 函数的调用约定 ARM32 参数1-4 放入r0-r3 剩下的入栈,函数返回值放入r0 ARM64 参数1-8 放入X0-X7 剩下的入栈,函数返回值放入X0 (浮点数是放入 Dn 或 Sn) 2. ARM 指令的 堆栈平衡 var_4 = -4 ; IDA 生成的变量信息,方便阅读用 STM

【Android 逆向】【ARM汇编】 arm64部分知识

arm64寄存器更多 X0-X30 SP CPSR PC 64位 W0-W30 32位 PC寄存器的值禁止修改 参数放在 X0-X7/W0-W7 结果放在 X0 函数返回 RET 相当于 bl lr Arm64 没有LR寄存器, lr用X30 栈底用X29 ARM64 取消了ldm/stm push

【Android逆向】frida 破解 jwxdxnx02.apk

apk 路径: https://pan.baidu.com/s/1cUInoi 密码:07p9 这题比较简单,主要是用于练习frida 1. 安装apk到手机 需要输入账号密码 2. 使用jdax 查看apk package hfdcxy.com.myapplication; import andr

[Android逆向]Exposed 破解 jwxdxnx02.apk

使用exposed 遇到了一些坑,这里记录一下 源码: package com.example.exposedlesson01; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.X

[Android 逆向]frida 破解 切水果大战原版.apk

1. 手机安装该apk,运行,点击右上角礼物 提示 支付失败,请稍后重试 2. apk拖入到jadx中,待加载完毕后,搜素失败,找到疑似目标类MymmPay的关键方法payResultFalse 4. adb logcat 或者androidstudio 查看该进程的日志,发现以下日志 com.mf

[Android 逆向]Xposed 破解 切水果大战原版.apk

代码 public class Main implements IXposedHookLoadPackage { boolean flag = false; @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam

【Android逆向】frida 破解 滚动的天空

1. apk 安装到手机中 2. 玩十次之后,会提示 充值 3. adb shell dumpsys window | grep mCurrentFocus 查看一些当前activity是哪一个 是 AppActivity 4. 阅读代码,感觉是unity3d做的游戏 5. apk拖入到jadx中,