123下一页
查看: 29|回复: 28

[相关教程] ARM汇编逆向基础:看懂这几条指令就能读so库

[复制链接]

96

主题

5

回帖

951

积分

UID
2
贡献
9 点
钻石
7 个
C币
993 个
发表于 2026-1-26 09:04:21 | 显示全部楼层 |阅读模式
逆向到 native 层,看不懂 ARM 汇编就等于看天书。这篇把最核心的指令和概念讲清楚。

一、为什么是 ARM
手机和平板几乎全是 ARM 架构。你在 IDA 里打开一个 so 库,看到的就是 ARM 汇编。ARM 有两种模式:ARM(32 位,4 字节定长指令)和 Thumb(16/32 位混合,省空间)。ARM64(AArch64)是现在主流,全是 4 字节定长指令。

二、寄存器
ARM64 有 31 个通用寄存器(X0-X30),每个 64 位:

  • X0-X7:函数参数和返回值。X0 是第一个参数,也是返回值
  • X8-X18:临时寄存器,函数内随便用
  • X19-X28:被调用者保存寄存器,函数用之前必须压栈保存
  • X29:帧指针(FP),指向当前栈帧
  • X30:链接寄存器(LR),存函数返回地址
  • SP(X31):栈指针,指向栈顶


三、核心指令


  • MOV:数据搬运
    1. MOV X0, #42    ; X0 = 42
    2. MOV X1, X0    ; X1 = X0
    复制代码

  • LDR / STR:内存读写
    1. LDR X0, [X1]       ; 从X1指向的地址读8字节到X0
    2. LDR X0, [X1, #8]   ; 从X1+8的地址读
    3. STR X0, [X1]       ; 把X0写到X1指向的地址
    复制代码

  • BL / RET:函数调用和返回
    1. BL func_name  ; 跳转到func_name,返回地址存LR
    2. RET           ; 跳回LR指向的地址(函数返回)
    复制代码

  • CMP + B.cond:比较和条件跳转
    1. CMP X0, #0      ; 比较X0和0
    2. BEQ label      ; 如果相等(X0==0)跳转到label
    3. BNE label      ; 如果不等跳转
    4. BLT label      ; 小于跳转
    5. BGT label      ; 大于跳转
    复制代码

  • ADD / SUB:加减
    1. ADD X0, X1, X2   ; X0 = X1 + X2
    2. ADD X0, X1, #10  ; X0 = X1 + 10
    3. SUB X0, X1, X2   ; X0 = X1 - X2
    复制代码

  • EOR:异或(加密常见)
    1. EOR X0, X1, X2  ; X0 = X1 ^ X2
    复制代码


四、函数调用约定
ARM64 调用约定:

  • 参数 1-8 放 X0-X7,超过 8 个压栈
  • 返回值放 X0
  • X19-X28 被调用者负责保存恢复
  • SP 必须 16 字节对齐


五、实战:看懂一个加密函数
IDA 反编译可能不完整,直接看汇编:
  1. ; JNI函数入口,env=X0, thiz=X1, input=X2
  2. SUB SP, SP, #32       ; 开辟栈空间
  3. STP X29, X30, [SP]    ; 保存FP和LR
  4. MOV X29, SP           ; 设置帧指针
  5. ; 获取字符串
  6. LDR X3, [X0]          ; X3 = *env (JNIEnv函数表)
  7. LDR X4, [X3, #0x568]  ; X4 = GetStringUTFChars函数指针
  8. BLR X4                ; 调用,input的C字符串返回到X0
  9. MOV X5, X0            ; X5 = 字符串指针
  10. ; 加密:逐字符异或0x37
  11. MOV X6, #0            ; i = 0
  12. loop:
  13.   LDRB W7, [X5, X6]   ; W7 = str[i]
  14.   CMP W7, #0           ; 字符串结尾?
  15.   BEQ done
  16.   EOR W7, W7, #0x37    ; W7 ^= 0x37
  17.   STRB W7, [X5, X6]   ; str[i] = W7
  18.   ADD X6, X6, #1       ; i++
  19.   B loop
  20. done:
  21.   MOV X0, X5           ; 返回加密后的字符串
  22.   LDP X29, X30, [SP]   ; 恢复FP和LR
  23.   ADD SP, SP, #32      ; 释放栈空间
  24.   RET
复制代码

看懂了这个你就知道:加密逻辑就是逐字符异或 0x37。用 Python 复现:
  1. decrypted = ''.join(chr(ord(c) ^ 0x37) for c in encrypted)
复制代码



ARM 汇编的核心就这些。不需要全背下来,记住 LDR/STR(读写内存)、BL/RET(调用返回)、CMP/B.cond(条件跳转)、MOV(赋值)这四组就够看懂大部分逻辑了。遇到看不懂的指令查 ARM 官方手册就行。
温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6、网络世界也请遵守我国的法律法规!一旦发现违法行为,将立即封存相关信息并报警处理!
回复

使用道具 举报

0

主题

364

回帖

46

积分

UID
922443
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-1-27 03:53:24 | 显示全部楼层
有个细节,日志记得清掉,不然很容易被发现。
回复

使用道具 举报

0

主题

379

回帖

0

积分

UID
871168
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-1-27 17:41:51 | 显示全部楼层
感谢,正需要这个,之前找的资料都太老了。
回复

使用道具 举报

0

主题

376

回帖

49

积分

UID
887370
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-1-28 21:18:45 | 显示全部楼层
感谢分享,之前一直卡在这个点,看完豁然开朗。
回复

使用道具 举报

0

主题

382

回帖

52

积分

UID
413472
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-1-30 14:44:06 | 显示全部楼层
照着试了一下,第一遍没成功,发现是权限问题,建议楼主补充个提示。
回复

使用道具 举报

0

主题

390

回帖

48

积分

UID
619646
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-2-1 21:57:54 | 显示全部楼层
同意楼主的判断,现在加固手段越来越多,纯手工成本太高了。
回复

使用道具 举报

0

主题

380

回帖

0

积分

UID
406169
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-2-4 19:00:10 | 显示全部楼层
有个坑提醒,不同厂商ROM差异很大,通用性没有想象中那么强。
回复

使用道具 举报

0

主题

389

回帖

46

积分

UID
918875
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-2-8 05:50:53 | 显示全部楼层
这个流程我在真机上验证过,确实可行,注意备份就行。
回复

使用道具 举报

0

主题

362

回帖

37

积分

UID
662206
贡献
0 点
钻石
0 个
C币
1 个
发表于 2026-2-12 06:30:03 | 显示全部楼层
试了下你说的第二种方法,成功率更高,推荐。
回复

使用道具 举报

0

主题

364

回帖

0

积分

UID
473702
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-2-16 20:57:40 | 显示全部楼层
收藏了,最近正好要搞这块,省了不少翻文档的时间。
回复

使用道具 举报

温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6、网络世界也请遵守我国的法律法规!一旦发现违法行为,将立即封存相关信息并报警处理!
123下一页
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

QQ客服返回顶部