一般的android apk反编译这里就不多做说明了,以下教程讲的是so文件的逆向
我们用的手机大部分是ARM架构的
所以在学习前有必要了解下ARM
建议看下ARM入门教程,后面资料里有相关的pdf教程
第二章 NDK环境
第三章 初探ARM
ARM寄存器
MOV 指令
数值表示
ADD 指令
SUB指令
第四章 寻址方式
知识点
ARM 处理器寻址方式
移位指令:LSL、LSR、ASR、ROR、RRX
LDR/STR指令
LDM/STM 指令
立即寻址
多用于给寄存器赋值 e.g. mov r0,#100 r0=100
寄存器寻址
操作数在寄存器中,指令执行时直接在寄存器中取数据
MOV R0,R1 R0=R1
MOV R1,R2 R1=R2
寄存器移位寻址
移位指令:LSL、LSR、ASR、ROR、RRX
常用:LSL 逻辑左移 (<<)
一般用法:LSL #2
逻辑左移乘方定律
如果 A=B<<n 则A=B*2^n
e.g. MOV r0,r1,LSL #2 r0=r1*2^2 即r0=r1*4 常用于数组寻址,r1作下标
int a[5]; *(a+下标*4)
LDR指令
LDR用于从储存器(内存)加载数据到寄存器。
LDR{type}{cond} Rd,label{!}
LDRD{cond} Rd,Rd2,label{!} (一次加载双字(64位)) {!}
是否将寻址结果写入寄存器中
type 取值:
B 无符号字节
SB 有符号字节
H 无符号半字
SH 有符号半字
label为内存地址
STR指令
将寄存器的值写入到内存
e.g. STR R0,[R1]
LDM指令
LDM指令是批量从内存加载数据到寄存器列表
LDM{addr_mode}{cond} Rn{!} reglist
addr_mode类型。用于数据的存储和读取有一下几种情况:
IA 每次传送后地址值加
IB 每次传送前地址值加
DA 每次传送后地址值减
DB 每次传送前地址值减
对于堆栈操作有如下几种情况:
FD 满递减堆栈
ED 空递减堆栈
FA 满递增堆栈
EA 满递增堆栈
第五章 跳转指令
第六章 逆向表达式
第七章 流程控制语句逆向
第八章 函数的框架
第九章 数组和重定位
第十章 结构体链表逆向
好了,想要了解更多去下载吧
链接:https://pan.baidu.com/s/1UUAhc5V4fgD3R_-s6mo4Fw
提取码:ujl7