學習吾愛破解論壇正己的《安卓逆向這檔事》的筆記,視頻和配套工具可以去課程主頁獲取:https://www.52pojie.cn/thread-1714727-1-1.html。
工具
- 雷電模擬器
- 教程Demo
- MT管理器/NP管理器
- jeb
- XappDebug
動態調試環境配置
安裝 jeb
配置 Java 環境
- 下載 jdk 並安裝
- 配置環境變數
這裡我之前裝過,而且網上教程很多,就不演示了。
正己給的 Java 環境是 11 的,需要比這個版本高的,正好我之前裝的是 19。
在命令行輸入 java --version
測試一下:
安裝
解壓了就行了,註冊啥的正己都弄好了。
動態調試
獲取 debug 許可權
法一:修改 AndroidManifest.xml
在 AndroidManifest.xml 的 application 標籤里添加:
android:debuggable="true"
法二:XAppDebug 模塊 hook 對應的 app
XAppDebug 項目地址:https://github.com/Palatis/XAppDebug
啟用模塊之後勾選系統框架(需要重啟)和要進行 debug 的 app 即可。
法三:Magisk 命令(重啟會失效)
通過 adb 進入命令行或者用 MT 管理器的終端模擬器都可以。
- adb 進入命令行(在你電腦終端里輸):
adb shell
- MT 管理器的終端模擬器:
然後依次輸入下面的命令就行了:
# 切換至超級用戶
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 文件即可開始刷入。
出現 Done 說明刷入成功,重啟設備。
進入終端,輸入 props
命令,會出現一個菜單,選擇Edit MagiskHide props (active)
,也就是輸入 4
:
進入新菜單,找到 ro.debuggable
選項,並選擇(我這裡顯示 enabled
,表示已經是 1
了,就不用改了,否則需要改),將 ro.debuggable
的值設為 1
:
修改完後重啟設備,然後使用以下命令驗證 ro.debuggable
是否已經改為 1
:
getprop ro.debuggable
埠轉發以及開啟 adb 調試許可權
埠轉發
雷電模擬器默認開啟埠轉發,其他模擬器需要用 adb 連一下,類似下面的命令:
adb connect 127.0.0.1:<port>
這個埠號不同模擬器不同,具體可以去查一下。
開啟 adb 調試許可權
進入開發者模式
按」設置->關於本機->版本號「順序找到」版本號「,點擊 7 次進入開發者模式。
開啟 USB 調試
按」設置->系統->高級->開發者選項「順序進入」開發者選項「,找到」USB 調試「選項並開啟:
下斷點
在對應 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
,所以這裡我去另外安裝了一下。
然後模擬器會打開對應應用並等待調試器啟動:
Jeb附加調試進程
在工具欄找到「調試器」一欄的」開始「並點擊,或者通過菜單欄的」調試器->開始「,喚出「附加調試」菜單,然後找到對應的進程選擇」附上「即可開始調試。
接著在 app 中觸發剛剛下斷點處的邏輯,可以看到代碼停在斷點處了。此時就可以查看各種調試信息了,這裡主要關注局部變數的信息:
快捷鍵:
Ctrl-F6
:進入方法F6
:跳過方法F7
:跳出方法Ctrl-R
:運行到游標位置
這裡在最後相等比較前的函數看到一個 base64 的值,複製下來放到 flag{}
之間就是密鑰了。
我的密鑰正確了:
這裡調試的時候發現 v0 的值(也就是最後函數返回值賦給的變數)沒有出現在局部變數里,正己說是因為模擬器的問題,真機就會有這部分值。
本文鏈接:https://linuxstory.org/android-reverse-dynamic-debugging-guide/
原文鏈接:https://www.52pojie.cn/thread-1714727-1-1.html
Linux Story 整理,對原文有刪節、補充;轉載請註明,否則將追究相關責任!