教程長篇分享

安卓逆向:動態調試指南

學習吾愛破解論壇正己的《安卓逆向這檔事》的筆記,視頻和配套工具可以去課程主頁獲取: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

5 Comments

  1. nordvpn special coupon code 2025 350fairfax

    Hello Dear, are you truly visiting this website regularly, if so afterward you will definitely take good know-how.

  2. Thank you for the good writeup. It in fact was a amusement account it.
    Look advanced to more added agreeable from you!

    However, how can we communicate?

    Also visit my homepage; nordvpn coupons inspiresensation (wall.sh)

  3. Wow, fantastic blog layout! How long have you been blogging for?
    you made blogging look easy. The overall look of your web site is great, as well as the content!

    Stop by my webpage … nordvpn coupons inspiresensation

  4. I am in fact grateful to the owner of this site who has
    shared this enormous post at at this place.

    Here is my blog: nordvpn coupons inspiresensation – https://t.co/5gaT0Nh9CJ,

  5. My family every time say that I am killing my time here at net, however I
    know I am getting knowledge daily by reading such nice posts.

    my web-site :: Nordvpn coupons Inspiresensation

Leave a reply

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

這個站點使用 Akismet 來減少垃圾評論。了解你的評論數據如何被處理

More in:教程

教程

PuTTY 使用綜合指南:SSH 連接 Linux

無論您是經驗豐富的開發人員還是初學者,想在您的計算機和遠程 Linux 伺服器之間建立安全連接,PuTTY 是一個值得信賴的工具。讓我們深入了解如何在 Windows 操作系統上利用 PuTTY 進行 […]
教程

在 Ubuntu 像22.04 LTS Linux 安裝 JUnit 5

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

同時運行多個 Linux 命令

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