AndroidNDK逆向

本文最后更新于:2020年3月10日 上午

原生C程序逆向分析

.plt段主要是用于函数重定位的。
.text段就是程序代码段。

  • 反汇编。
    objdump -S filename

本以为这节不用记录,感觉都能看懂,汇编看多了就会了,但是竟然发现了惊天大秘密。看下边:
image-20200310102238328
一直以为PC是指下一条指令,但是在这里ADDLS这条指令,我发现怎么都不可能按照正常逻辑执行,我郁闷了1个小时,终于找到了源头。
[https://blog.csdn.net/lee244868149/article/details/49488575]

PC需要取指、译码、执行三步,每次取指完就指向下一条指令即PC+4。然后取指完后又指向下一条指令,即PC+8。
image-20200310102307647

所以第一条指令执行的时候,PC=PC+8.

除法

编译优化

gcc -O 可以进行优化。5个等级0,1,2,3,s

C++逆向分析

C++是神,分析不来。。。awsl

JNI API逆向分析

JNINativeInterface:

JNI本地接口,一个接口函数指针表,有JNI接口的函数指针。  

JNIInvokeInterface:

JNI调用接口,有3个保留项,5个函数指针。  

image-20200310102327161
JNIEnv结构体的第一个字段就是JNINativeInterface,IDA分析时不会识别API,将函数的第一个参数类型改为JNIEnv类型就可以识别了,或者导入JNIEnv结构体。
对照着结构体看,可以知道IDA中相对寄存器的偏移处就是API函数。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!