Android逆向分析初體驗
一、 準備知識
1. 懂Java Android開發。
2. 懂NDK ,C 語言 Android 動態鏈接庫.SO開發。
3. 懂Android反編譯Smali 語法。
4. 懂adb 和 jdb 等等工具使用。
5. 懂IDA 調試(遠程動態調試APK和本地靜態調試.SO文件)
6. 懂Arm匯編語法(因為移動設備芯片是Arm架構的,不是Intel的芯片,不是x86匯編,是Arm匯編)。
7. 懂APK的打包解包流程。
8. 其他工具使用(改之理,Apk killer,Android模擬器)等等等等。
9. 懂文件格式類似PE格式,例如:ELF,和Android文件格式等等。
以上的均為Android 逆向的基本條件,想學的童鞋,可以按照上面的學習,也可以自行查找!
以上內容哪裏不會只能自己補充知識啦,太多,講不完!!!
二、 入門逆向分析
因為我們是入門分析,所以以上準備知識,先懂一些就行,不必要都懂,知識是慢慢積累的,慢慢學習!!!
1) 先看看我們APK Demo(沒有加殼)。
2) 隨便輸入提示錯誤,我們可以解壓這個APK看看。
直接鼠標右鍵解壓到….不需要修改後綴名也可以的。
解壓出來是這個樣子的,這是Android的文件目錄,具體每個文件夾是什麽作用可以自行查找一下,看到沒有lib類似的目錄說明沒有.SO這樣的動態鏈接庫,那麽這個軟件就比較容易逆向分析,因為都是Smali 和 Java代碼比較容易看懂。
3) 用改之理打開這個APK。
打開後如下圖所示。
4) 找關鍵處。
如下圖搜索要破解APK的字符串。
5) 繼續搜索關鍵字
因為這是一個xml格式的文本,successed 對應的 恭喜您,所以有可能是突破口,所以繼續搜索successed。
找到一個id,因為Android程序裏面就是這樣分配的,所以我們接下來查找id的值也就是0x7f05000c。
找到一句const v1, 0x7f05000c 這是Smali語法,和匯編類似,是把0x7f05000c放到v1寄存器裏面,所以v1就為恭喜您這句話。
6) 同樣的方法,查找unsuccessed,做好註釋如下圖。
7) 找到之後用#註釋下,方便查看。
如上圖那個 if-nez 由名字可知道 他的意思是 如果 v0 這個寄存器不等於0就跳轉。就跳轉到了cond_0這個位置,剛好調到恭喜您的位置,所以我們讓這個跳轉實現就可以了,方法好多。我們也可以結合源碼分析。
點擊按鈕(如下圖)。
會出現源碼,可以結合分析。
8) 代碼修改。
只要把if-nez 改成 if-eqz就行啦。
9) 然後編譯一下,安裝執行。
顯示已註冊,成功破解。
三、 總結
Android逆向分析入門,這個比較簡單,容易學習。
因為無殼無.SO分析起來較為容易,適合入門。
入門:先學會Smali語法,學會改之理的使用,最好會寫Android程序。
Android逆向分析初體驗