項目地址:Boxgit
爲何要作 Box
? 其實源於開發過程當中一些很小的需求,也許並不常見,可是每次碰到都要費一些功夫。因此想着寫一個小應用,集成一些經常使用功能,給開發帶來一些便利。下面這些小需求,你也遇到過嗎?github
看到別人優秀的 UI 界面想借鑑一下如何實現?看到別人的應用實現了本身不知道如何實現的功能?反編譯了別人的 apk 殊不知道去哪找代碼?常常作逆向的同窗應該常常碰到這些問題。首先,你確定得找到當前 Activity
的名稱,才能順路找到相應的代碼。那麼,如何查看當前 Activity
的名稱呢?常見的作法是經過 adb
命令:shell
adb shell dumpsys activity activities | grep mFocusedActivity
複製代碼
執行結果以下:bash
無奈記性很差,常常忘記命令,每次都得去搜一下,順便推薦一個 adb 命令集合。再來看一下 Box
中這一功能是什麼效果:微信
經過懸浮窗實時顯示當前 Activity
,簡單便捷。實現原理也很簡單,經過 無障礙服務 監聽窗口變化並獲取當前 Activity
名稱。懸浮窗沒有本身造輪子了,使用了開源項目 FloatWindow。有段時間沒更新了,順便也改了幾個 bug。app
某天忽然看上了手機裏的某個 App,想拖到 jadx
裏面看一看,如何快速的獲取到安裝包文件呢?咱們都知道對於已安裝的應用,系統都備份了安裝包,存儲在 /data/app/[packageName]
目錄下,通常文件名爲 base.apk
。若是是具備 root 權限的手機,咱們能夠直接拿到文件。對於非 root 手機,仍是有讀權限的,能夠經過文件 API 直接讀取。Box
中界面以下所示:異步
安裝包文件會複製到手機根目錄 /Box/apk/應用名
文件夾下。工具
AndroidManifest.xml
包含了應用的基本信息,如何快速的查看應用的清單文件?以前有一個開源工具,AXmlPrinter.jar
,能夠直接解析安裝包中的二進制清單文件。本想直接把 jar 包拿過來用,但是用的不是那麼隨心應手。加上以前親手解析過 AndroidManifest.xml
文件,詳見 Android逆向(一) —— AndroidManifest.xml 二進制解析。索性就用了本身的代碼,順便也修復了一些解析過程當中遇到的 bug。具體效果以下:post
主要功能都在上面了,另外還加了一塊 本機信息
,包括內容以下:spa
Box
使用 kotlin
開發,簡單的使用了 協程
來進行異步任務,如複製 Apk 並更新進度等。界面設計很通常,實在是很爲難我這麼一個理科生。圖片基本上都是 Android Studio
裏面自動生成的,logo
暫時尚未,有合適的能夠 push
一個。
第一個版本功能比較簡單,後面再遇到開發中的痛點需求,還會加進來,持續更新。有 bug 或者好的想法,歡迎 issue 、 pr 砸過來!
項目源碼: Box
文章首發微信公衆號:
秉心說
, 專一 Java 、 Android 原創知識分享,LeetCode 題解,歡迎關注!