打開IDA,加載對應(yīng)so文件:

點擊jni函數(shù),右邊窗口會顯示匯報片段形式的邏輯跳轉(zhuǎn)框圖:

按F5轉(zhuǎn)成C代碼:

導(dǎo)入頭文件可讓IDA了解相關(guān)數(shù)據(jù)結(jié)構(gòu):
引入JNI 頭文件:
cd /Users/XXX/Library/Android/sdk/ndk/26.1.10909125
find . -name jni.h
cp ./toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/jni.h ~/files/

導(dǎo)入成功后,將已知類型的參數(shù)做類型轉(zhuǎn)換,比如上面函數(shù)中的參數(shù):a1:JNIEnv*, a2:jclass, a3:jstring

轉(zhuǎn)換完成之后:

接下來就可以按代碼進行分析了,比如上面這個跟蹤j_j_lock_file_unblock()函數(shù),一直索引到最終函數(shù)實現(xiàn),了解其邏輯內(nèi)容。