教程長篇分享

安卓逆向:動態調試指南

學習吾愛破解論壇正己的《安卓逆向這檔事》的筆記,視頻和配套工具可以去課程主頁獲取:https://www.52pojie.cn/thread-1714727-1-1.html

工具

  1. 雷電模擬器
  2. 教程Demo
  3. MT管理器/NP管理器
  4. jeb
  5. XappDebug

動態調試環境配置

安裝 jeb

配置 Java 環境

  1. 下載 jdk 並安裝
  2. 配置環境變數

這裡我之前裝過,而且網上教程很多,就不演示了。

正己給的 Java 環境是 11 的,需要比這個版本高的,正好我之前裝的是 19。

在命令行輸入 java --version 測試一下:

image-20230331183818980

安裝

解壓了就行了,註冊啥的正己都弄好了。

動態調試

獲取 debug 許可權

法一:修改 AndroidManifest.xml

在 AndroidManifest.xml 的 application 標籤里添加:

android:debuggable="true"

修改androidmanifest

法二:XAppDebug 模塊 hook 對應的 app

XAppDebug 項目地址:https://github.com/Palatis/XAppDebug

啟用模塊之後勾選系統框架(需要重啟)和要進行 debug 的 app 即可。

XAppDebug

法三:Magisk 命令(重啟會失效)

通過 adb 進入命令行或者用 MT 管理器的終端模擬器都可以。

  • adb 進入命令行(在你電腦終端里輸):
adb shell
  • MT 管理器的終端模擬器:

mt shell

然後依次輸入下面的命令就行了:

# 切換至超級用戶
su
# 啟用 debug
magisk resetprop ro.debuggable 1
# 一定要通過該方式重啟
stop;start;

法四:刷入 MagiskHide Props Config 模塊(永久有效)

下載 MagiskHide Props Config:https://github.com/Magisk-Modules-Repo/MagiskHidePropsConf/releases

在 Magisk 里找到模塊,點擊盒子按鈕選擇剛剛下載的 zip 文件即可開始刷入。

modules

出現 Done 說明刷入成功,重啟設備。

done

進入終端,輸入 props 命令,會出現一個菜單,選擇Edit MagiskHide props (active),也就是輸入 4

props menu

進入新菜單,找到 ro.debuggable 選項,並選擇(我這裡顯示 enabled,表示已經是 1 了,就不用改了,否則需要改),將 ro.debuggable 的值設為 1

set debuggable prop

修改完後重啟設備,然後使用以下命令驗證 ro.debuggable 是否已經改為 1

getprop ro.debuggable

getprop ro.debuggable

埠轉發以及開啟 adb 調試許可權

埠轉發

雷電模擬器默認開啟埠轉發,其他模擬器需要用 adb 連一下,類似下面的命令:

adb connect 127.0.0.1:<port>

這個埠號不同模擬器不同,具體可以去查一下。

開啟 adb 調試許可權

進入開發者模式

按」設置->關於本機->版本號「順序找到」版本號「,點擊 7 次進入開發者模式。

version

開啟 USB 調試

按」設置->系統->高級->開發者選項「順序進入」開發者選項「,找到」USB 調試「選項並開啟:

usb-debug

下斷點

在對應 smali 代碼處 Ctrl-B 下斷點

debug 模式啟動

命令行輸入以下命令:

adb shell am start -D -n <package_name>/<activity_name>
  • adb:Android Debug Bridge 的縮寫,它是一個用於在開發者計算機和 Android 設備之間建立通信的工具。
  • shell:指示 adb 命令將要在設備的命令行 shell 中運行。
  • am:代表活動管理器(Activity Manager),它是一個在 Android 設備上跟蹤和管理應用程序活動的系統服務。
  • start:指示活動管理器啟動一個新的應用程序或活動。
  • -D:指示在啟動應用程序時要清除先前的任務和棧,以便該應用程序成為新任務的開始。
  • -n /:指示要啟動的應用程序和特定的 activity。
    • `` 是應用程序的包名。
    • `` 是要啟動的 activity 的名稱。

比如這裡要啟動的名為 "com.zj.wuaipojie" 的應用程序中的 ".ui.MainActivity" 活動,命令將如下所示:

adb shell am start -D -n com.zj.wuaipojie/.ui.MainActivity

adb

這裡不知道是我看視頻看漏了還是怎麼的,我的環境里好像沒有adb,所以這裡我去另外安裝了一下。

然後模擬器會打開對應應用並等待調試器啟動:

waiting for debugger

Jeb附加調試進程

在工具欄找到「調試器」一欄的」開始「並點擊,或者通過菜單欄的」調試器->開始「,喚出「附加調試」菜單,然後找到對應的進程選擇」附上「即可開始調試。

image-20230402015542027

接著在 app 中觸發剛剛下斷點處的邏輯,可以看到代碼停在斷點處了。此時就可以查看各種調試信息了,這裡主要關注局部變數的信息:

breakpoint

快捷鍵:

  • Ctrl-F6:進入方法
  • F6:跳過方法
  • F7:跳出方法
  • Ctrl-R:運行到游標位置

這裡在最後相等比較前的函數看到一個 base64 的值,複製下來放到 flag{} 之間就是密鑰了。

key

我的密鑰正確了:

success

這裡調試的時候發現 v0 的值(也就是最後函數返回值賦給的變數)沒有出現在局部變數里,正己說是因為模擬器的問題,真機就會有這部分值。


本文鏈接:https://linuxstory.org/android-reverse-dynamic-debugging-guide/
原文鏈接:https://www.52pojie.cn/thread-1714727-1-1.html

Linux Story 整理,對原文有刪節、補充;轉載請註明,否則將追究相關責任!

對這篇文章感覺如何?

太棒了
1
不錯
0
愛死了
0
不太好
0
感覺很糟
0

You may also like

Leave a reply

您的電子郵箱地址不會被公開。 必填項已用 * 標註

此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

More in:教程

教程

在 Ubuntu 像22.04 LTS Linux 安裝 JUnit 5

JUnit 不僅簡單而且是一種有效的方法來編寫和執行 Java 應用程序的單元測試,因此它是開源類別中使用最廣泛的測試框架。 JUnit的最新版本5發布時帶來了許多改進。 所以,如果你使用Ubuntu […]
教程

同時運行多個 Linux 命令

了解如何在 Linux 中同時執行多個命令可以顯著提高您的效率和生產力。本文將指導您通過各種方式在單行中運行多個 Linux 命令,甚至如何自動化重複的任務。 理解基礎知識 在深入了解高級技巧之前,您 […]