Android SO逆向学习教程

一般的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

猜你喜欢

转载自blog.csdn.net/qq_29194615/article/details/124273635