方法棧跟蹤

往期推薦

Log插樁調試smali代碼

DDMS工具使用

快速定位關鍵代碼

Smali文件詳解

Java層逆向分析-Dalvik字節碼

修改資源去廣告

今天分享方法棧跟蹤,掌握本次的內容,有助於在關鍵方法裏面插入棧跟蹤代碼,理清該方法的上層調用關係。

一:方法棧跟蹤定義

之前在學習虛擬機的時候,提到過棧結構,它是一種先進後出的數據結構。

棧跟蹤法屬於動態調試的方法,原理是輸出運行時棧調用跟蹤信息,然後查看函數調用序列來理解方法的執行流程。

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

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

在這裏插入圖片描述

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

打開命令窗口,輸入adb shell dumpsys activity top命令,獲取應用程序的包名信息。

然後打開「DDMS」工具,添加過濾器,點擊+號,名稱設置爲「yijindaxue」,在過濾器中增加「好搜小說大全.apk」包名,查Log日誌信息,如下圖所示。

在這裏插入圖片描述

三:查看棧跟蹤信息

通過查看Log日誌信息,發現該程序在運行時打印的Log日誌信息非常多。「system.err」標籤是棧信息的標誌,由此我們可以看到,這其中大多數Log日誌信息都是「棧」信息,如下圖所示,還有一些是其它級別的信息,暫時不做過多的講解。

在這裏插入圖片描述

閱讀打印輸出的「棧」信息,上層是被調用者,下層是調用者,總的來說就是自下而上的調用關係,如下圖所示。

在這裏插入圖片描述

四:插入棧跟蹤代碼

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

在這裏插入圖片描述

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

在這裏插入圖片描述

可以看到存在多種方法,比如loaddata,loadDefault等,想查看哪一種方法上層調用關係,就進行對應方法的選擇,如下圖所示。

在這裏插入圖片描述

以「loadData」方法爲例,選擇查看「loadData」方法上層調用關係,點擊跳轉到該方法對應的smali代碼位置,如下圖所示。
在這裏插入圖片描述

沿用上節課的邏輯,找到「.prologue」,在「.prologue」下面插入方法棧跟蹤代碼,具體的操作是右鍵=》插入代碼=》StackTrace棧跟蹤,如果沒有「.prologue」,就在參數後面插入棧跟蹤代碼,然後CTRL+S保存,如下圖所示。

注意:

在插入棧跟蹤代碼時,需要查看該方法的局部變量寄存器總個數,如果小於2需要修改,局部變量寄存器的總數爲2,原因是插入的棧跟蹤代碼要使用兩個局部變量寄存器

在這裏插入圖片描述

最後點擊「編譯」按鈕開始編譯,編譯完成後,安裝到雷電模擬器上。安裝完成後,打開「DDMS」工具,選擇之前我們添加的過濾器「yijindaxue」,點擊運行 「好搜小說大全」APP程序,查看程序啓動的過程中出現的Log日誌信息,如下圖所示。

在這裏插入圖片描述

通過查看棧跟蹤信息,我們得出結論:「loadData」是在「onCreate」方法中被調用的,而「onCreate」方法是被系統函數調用的。分析到這裏,我們就知道「loadData」方法的上層調用流程了。

在操作的過程中我們需要頻繁的安裝打開程序,每次都會彈出是否要更新APP程序的彈窗,那麼給大家傳授一個小技巧,教大家如何去除APP程序的更新彈窗,實現免更新功能。

具體的操作流程:

(1)在「工程管理器」中找到「apktool.yml」文件,雙擊打開該文件。 這個文件是工程配置文件,裏面包含工程文件信息以及版本信息。應用程序會進行判斷,這個版本信息是否大於當前發佈的最新版本信息,如下圖所示。

在這裏插入圖片描述

(2)繼續瀏覽該文件,找到「versionCode」對應的屬性的值,將該值改大,這裏改爲「999」,點擊「編譯」按鈕開始編譯,編譯完成後安裝運行,發現沒有更新APP程序的彈窗了,說明成功實現免更新功能,如下圖所示。

在這裏插入圖片描述

小結:

今天主要學習方法棧跟蹤,理解棧跟蹤原理,掌握插入棧跟蹤代碼技巧,插入棧跟蹤,分析方法的上層調用流程的關鍵:插入棧跟蹤的位置選擇,操作:右鍵=》插入代碼=》StackTrace棧跟蹤,插入棧跟蹤代碼時,需要查看該方法的局部變量寄存器總個數。

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

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

在這裏插入圖片描述