ptrace on Android
无论是hook还是调试都离不开ptrace这个system call,ptrace可以跟踪目标进程,并且在目标进程暂停的时候对目标进程的内存进行读写。
首先看一下要ptrace的目标程序,用来一直循环输出一句话”Hello, Hooking!”
1 | $ radare2 -h # 查看帮助 |
与Java一样,Dalvik实现了一个标准的调试接口,称为Java调试线协议
(Java Debug Wire Protocol, JDWP
)。所有用来调试Dalvik和Java上的程序的工具都是基于此协议开发的。 深入Java调试体系
Android设备监视器(Monitor)和Dalvik调试监视服务器(DDMS)都采用了JDWP标准协议,它们用JDWP访问指定应用的信息(线程、堆使用情况、正在进行的方法调用)
Register
from r0
to r15
r0
is used as a return value of functionsr11
is used like EBP (called FP)r12
intra-procedure-call scratch register (called IP)r13
is used like ESP (called SP)r14
is Link-Register (called LR)r15
is used like EIP (called PC)
all register are completely general, you can set a value to r15
directlyldr r1, [pc]
;(pc point to ‘.long 0x00001337’)b go_next
.long 0x00001337
漏洞程序freenote_x64下载
运行程序,这是一个note笔记本程序:
1 | ➜ ./freenote_x64 |
编译原生程序:
path_to/android-ndk-r10c/toolchains/arm-linux-androideabi-4.9/prebuilt/ darwin-x86_64/bin
目录下保存着完整的工具链:
arm-linux-androideabi-g++ C++编译工具
arm-linux-androideabi-gcc C编译工具
arm-linux-androideabi-gdb 调试工具
arm-linux-androideabi-ld 链接器,用于生成可执行程序
arm-linux-androideabi-nm 列出目标文件中的符号
arm-linux-androideabi-objdump 输出目标文件的信息
arm-linux-androideabi-readelf 显示elf格式可执行文件信息
arm-linux-androideabi-size 列出目标文件每一段的大小
arm-linux-androideabi-strings 列出目标文件的可打印字符串
arm-linux-androideabi-strip 去除目标文件中的符号信息