1. frida native層 hook的思路技巧
frida的native層
記錄一下學到的技巧
對於hook native層時,靜態分析so後發現有些方法欄位啥的,跟蹤鏈太長,進程跳轉太過於導致無法向上,有時直接不知道從何處分析。
首先日誌打開,這個是必須的,大部分的日誌都是由一個欄位來控制,找到這個欄位修改它,在列印的日誌的中,你會發現驚喜。
有的關鍵日誌在並沒有被列印出來,思路又陷入的僵局。
可以嘗試hook libart.so 拿到jni的一些函數的值
比如findclass, getcharutf8String等等。
列印這個的函數值時,順便列印下調用棧。
圖片來自大佬的GitHub
https://github.com/lasting-yang/frida_hook_libart
frida inlineHook 中,有時候hook一些寄存器,會報錯,這是因為他的指令又長又短,在32位中會常見,64位中都是長指令比較穩定不會報錯。
如果你的是32位還報錯,你可以向上或者向下的地址hook,觀察你要hook的寄存器是否在其他的地址也能拿到值。
有的時候hook一些so時,so還未載入,到時地址是null的,在低版本中你可以hook dlopen, Mole.findExportByName(null, 'dlopen');
在這個so被載入後再進行hook。dlopen,是底層用來載入so的函數;在高版本中hook android_dlopen_ext,;
有的時候修改參數的type 為JNIEnv* 時,修改失敗(目前我沒碰見,看到就記錄下),可以導入jni.h來解決這個問題,還有一個簡單方法是
shift+f11 打開loaded type libraries
然後右鍵 選擇load type libaray,打開下面的窗口,選擇Android arm就可以了
pass-----待記錄
2. Android逆向工程師是做什麼的
必須掌握的技能
1、負責安卓程序的加解密和數據傳輸分析、拆解、逆向等工作;
2 、逆向APK,了解運行過程;
3 、Andorid本地提權獲得root許可權;
4 、熟練掌握軟體逆向靜態分析、動態調試、代碼跟蹤等;
5 、熟悉Android開發,了解打包、反編譯、破解流程;
6 、so破解。
目前了解的如下:
1,加解密:這就很多了,一般都是遇到後再折騰解密,而且解密代碼和秘鑰一般都在代碼裡面。
2,Andorid本地提權獲得root許可權,一般真機是用recovery刷機包,但是病毒提權是怎麼樣的
目前掌握的一種提權的是像輸入命令行一樣輸入su並且用pm提權
還有一種是修改init.rc文件
3,ida動態調式和代碼跟蹤
4,打包,編譯和破解的流程是什麼樣的?
5,so破解:一般就是破殼。各種殼(360,娜迦等等)
加殼的另一種常用的方式是在二進制的程序中植入一段代碼,在運行的時候優先取得程序的控制權,做一些額外的工作。大多數病毒就是基於此原理。加殼的程序經常想盡辦法阻止外部程序或軟體對加殼程序的反匯編分析或者動態分析,以達到它不可告人的目的。這種技術也常用來保護軟體版權,防止被軟體破解。
6,了解反破解的技術
目前掌握的技術有:
1,反模擬器
2,反靜態代碼分析器如:反jeb
應該也是有很多反ida的,也就是加殼。
任職要求
1、具有豐富的Android開發分析經驗,熟悉android系統架構,熟悉android安全機制;
2、精通匯編語言、Java、C/C++語言,熟悉Smali語言,對逆向工程有濃厚興趣;
3、熟練掌握ida、gdb逆向分析工具;
4、熟練掌握軟體逆向靜態分析、動態調試、代碼跟蹤等;
5、熟悉so和Java層hook;
6、熟悉Android開發,了解打包、反編譯、破解流程;
7、深入理解arm Linux和Android底層運行機制;
8、熟練掌握各種調試工具:Smali、Dedexer、Dexmp、Apktool、Dex2jar、jd-gui。
3. 如何hook android framework
1.向目標進程注入代碼(注入so,並調用該so里的一個函數)。首先調用ptrace函數,調試com.android.browser進程,在這里我們需要遍歷該進程載入的libc.so,這里有我們需要的dlopen,dlsym等函數的地址,我們先中斷com.android.phone,修改其寄存器...