專案地址:Box
為什麼要做 Box
? 其實源於開發過程中一些很小的需求,也許並不常見,但是每次碰到都要費一些功夫。所以想著寫一個小應用,整合一些常用功能,給開發帶來一些便利。下面這些小需求,你也遇到過嗎?
如何檢視當前 Activity ?
看到別人優秀的 UI 介面想借鑑一下如何實現?看到別人的應用實現了自己不知道如何實現的功能?反編譯了別人的 apk 卻不知道去哪找程式碼?經常做逆向的同學應該經常碰到這些問題。首先,你肯定得找到當前 Activity
的名稱,才能順路找到相應的程式碼。那麼,如何檢視當前 Activity
的名稱呢?常見的做法是通過 adb
命令:
adb shell dumpsys activity activities | grep mFocusedActivity
複製程式碼
執行結果如下:
無奈記性不好,經常忘記命令,每次都得去搜一下,順便推薦一個 adb 命令集合。再來看一下 Box
中這一功能是什麼效果:
通過懸浮窗實時顯示當前 Activity
,簡單便捷。實現原理也很簡單,通過 無障礙服務 監聽視窗變化並獲取當前 Activity
名稱。懸浮窗沒有自己造輪子了,使用了開源專案 FloatWindow。有段時間沒更新了,順便也改了幾個 bug。
如何獲取已安裝應用的 Apk 檔案 ?
某天突然看上了手機裡的某個 App,想拖到 jadx
裡面看一看,如何快速的獲取到安裝包檔案呢?我們都知道對於已安裝的應用,系統都備份了安裝包,儲存在 /data/app/[packageName]
目錄下,一般檔名為 base.apk
。如果是具有 root 許可權的手機,我們可以直接拿到檔案。對於非 root 手機,還是有讀許可權的,可以通過檔案 API 直接讀取。Box
中介面如下所示:
安裝包檔案會複製到手機根目錄 /Box/apk/應用名
資料夾下。
如何快速檢視 AndroidManifest.xml 檔案 ?
AndroidManifest.xml
包含了應用的基本資訊,如何快速的檢視應用的清單檔案?之前有一個開源工具,AXmlPrinter.jar
,可以直接解析安裝包中的二進位制清單檔案。本想直接把 jar 包拿過來用,可是用的不是那麼隨心應手。加上之前親手解析過 AndroidManifest.xml
檔案,詳見 Android逆向(一) —— AndroidManifest.xml 二進位制解析。索性就用了自己的程式碼,順便也修復了一些解析過程中遇到的 bug。具體效果如下:
其他
主要功能都在上面了,另外還加了一塊 本機資訊
,包括內容如下:
- 品牌、版本號、型號、主機板、製造商等
- 螢幕、RAM、ROM、SDK 版本、Android 版本、ABIS 等
- IMEI、MEID、SN、MAC 地址等
Box
使用 kotlin
開發,簡單的使用了 協程
來進行非同步任務,如複製 Apk 並更新進度等。介面設計很一般,實在是很為難我這麼一個理科生。圖片基本上都是 Android Studio
裡面自動生成的,logo
暫時還沒有,有合適的可以 push
一個。
第一個版本功能比較簡單,後面再遇到開發中的痛點需求,還會加進來,持續更新。有 bug 或者好的想法,歡迎 issue 、 pr 砸過來!
專案原始碼: Box