在静态分析Android JNI程序过程中,总能遇到env->*类的函数,IDA对这块的识别不太好。
为了方便说明,用事例一个简单函数,源代码如下:
JNIEXPORT jstring Java_com_oxygenant_assembly_IDATest_Test( JNIEnv* env,
jobject thiz )
{
return env->NewStringUTF("IDATest !");
}
反编译出来是:
.text:00000DC8 PUSH {R3,LR}
.text:00000DCA LDR R2, [R0]
.text:00000DCC LDR R1, =(aIdatest - 0xDD6)
.text:00000DCE MOVS R3,
0x29C
.text:00000DD2 ADD R1, PC ; "IDATest !"
.text:00000DD4 LDR R3, [R2,R3]
.text:00000DD6 BLX
R3
.text:00000DD8 POP {R3,PC}
查看env的头定义:
struct _JNIEnv {
……
jstring NewStringUTF(const char* bytes)
{ return functions->NewStringUTF(this, bytes); }
}
有什么办法能够让IDA识别NewStringUTF这个函数指针呢,根据结构体算偏移的方法效率有点低。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)