1. 程式人生 > >Android逆向分析初體驗

Android逆向分析初體驗

目錄 搜索 比較 .com -1 動態調試 總結 為我 修改

一、 準備知識

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逆向分析初體驗