Log插樁調試smali代碼

往期推薦

DDMS工具使用

快速定位關鍵代碼

Smali文件詳解

Java層逆向分析-Dalvik字節碼

修改資源去廣告

Smali強大之處就是可以隨心所欲的進行插樁操作。

一:Log插樁定義

Log插樁指的是反編譯APK文件,在對應的smali文件裏添加相應的smali代碼,將程序中的關鍵信息,以log日誌的形式進行輸出。

二:下載、安裝好搜小說應用程序

本課以「好搜小說大全.apk」文件作爲案例,下載「好搜小說全.apk」文件,打開雷電模擬器安裝該APK,安裝完成後,點擊運行,如下圖所示。

第一次打開該程序會有一個引導界面,引導界面結束後,會出現一個「應用更新」彈窗,點擊「取消」按鈕,不更新該程序,直接進入該程序。如下圖所示。

在這裏插入圖片描述

在這裏插入圖片描述

三:插入Log日誌信息分析應用程序啓動流程

探究:程序的入口界面和入口點哪一個啓動的時機更早?

1.在程序入口界面插入Log日誌信息

把「好搜小說大全.apk」文件,拖入到AndroidKiller工具裏面進行反編譯,反編譯完成後會彈出一個彈窗,點擊「否」,在工程信息欄點擊程序「入口」界面,如下圖所示。

在這裏插入圖片描述

然後點擊三角形圖標快速瀏覽相關方法,如下圖所示。

在這裏插入圖片描述

由於我們要分析的是程序的啓動流程,而在啓動活動界面時,最先被調用的是onCreate方法,所以選擇在onCreate方法,插入Log日誌信息,通過瀏覽相關方法找到「onCreate」方法,如下圖所示。

在這裏插入圖片描述

點擊跳轉到該方法對應的smali代碼位置,如下圖所示。

在這裏插入圖片描述

在「.prologue」下面插入Log日誌信息,具體的操作是右鍵=》插入代碼=》Log信息輸出。如果沒有「.prologue」,則在參數後面插入Log日誌信息,修改需要輸出的信息,CTRL+S保存,在程序入口界面插入Log日誌信息就完成了,如下圖所示。

在這裏插入圖片描述

2.在程序入口點插入Log日誌信息

點擊「工程管理器」找「AndroidManifest.xml」文件,雙擊打開該文件,如下圖所示。

在這裏插入圖片描述

在「AndroidManifest.xml」文件裏面找到「<application」標籤,找到該標籤下「android:name」屬性對應的值「com.reader.ReaderApplication」,如下圖所示。

在這裏插入圖片描述

根據該值在「工程管理器」裏面找到對應的smali文件,然後雙擊打開,如下圖所示。

在這裏插入圖片描述

繼續點擊三角形圖標快速瀏覽相關方法,如下圖所示。

在這裏插入圖片描述

通過瀏覽相關方法找到「onCreate」方法,如下圖所示。

在這裏插入圖片描述

點擊該方法,跳轉到該方法對應的smali代碼位置,如下圖所示。

在這裏插入圖片描述

在「.prologue」下面插入Log日誌信息,具體的操作是右鍵=》插入代碼=》Log信息輸出,如果沒有「.prologue」,就在參數後面插入Log日誌信息,修改需要輸出的信息,CTRL+S保存,在程序入口點插入Log日誌信息就完成了,如下圖所示。

在這裏插入圖片描述

點擊「編譯」按鈕開始編譯,編譯完成後,安裝到雷電模擬器上。

然後打開「DDMS」工具,添加過濾器,查看Log日誌信息。如下圖所示。

在這裏插入圖片描述
在這裏插入圖片描述

通過打印的Log日誌信息,可以得出:應用程序的入口點的執行時機,要早於程序入口界面。

四:插入Log日誌導致程序崩潰的解決方法

探究:如果在其它位置插入Log,會有什麼樣的效果呢?

選擇程序入口點的「」方法,嘗試在此處插入Log日誌信息,如下圖所示。

在這裏插入圖片描述

依然右鍵=》插入代碼=》Log信息輸出點擊「編譯」按鈕,開始編譯,編譯完成後,安裝運行程序,結果程序崩潰了,如下圖所示。

在這裏插入圖片描述

程序崩潰是什麼原因造成的呢?通過分析smali代碼,發現該方法的局部變量寄存器個數爲0,而我們插入的代碼使用了「v1」寄存器。如果將局部變量寄存器個數改爲1,安裝運行,結果程序可以正常運行。

由此可以得出:通過分析smali代碼,更改局部變量寄存器的總數可以解決上面程序崩潰的問題。

注意:如果使用到的局部變量寄存器個數大於方法指定的局部變量寄存器個數,需要修改方法指定的局部變量寄存器個數,反之,則不修改。

有必要提醒大家的是,如果你的能力不足以去分析smali代碼中出現的邏輯問題,就按照前面講的兩種插樁的方法進行操作,一定是準確無誤的。

小結:

今天主要分享了插入Log日誌信息分析應用程序啓動流程,掌握在關鍵位置插入smali代碼,打印Log日誌信息進行調試。找到「onCreate」方法,程序入口界面和入口點插入了Log日誌信息的位置選擇,插樁操作:右鍵=》插入代碼=》Log信息輸出。

如果你也對安卓逆向感興趣。可以加下方的羣,大家一起討論問題,或者掃描下方二維碼,關注回覆 「安卓逆向」 獲取免費教程

安卓逆向交流學習:1139349849
vx:Yjxiaox

在這裏插入圖片描述