如何在Android APK中植入Meterpreter
寫在前面的話
隨著移動裝置的快速發展,我們日常生活中的許多應用程式正在遷移到雲部署,從JavaScript瀏覽器框架到支援移動裝置的前端,例如Apple iOS上的Objective-C,或基於Android的Java。這也促進了手機應用的發展,與Apple不同,Android市場是一種開放的方式,允許任何人為商店做出貢獻,而且佔據了移動市場份額的大部分。
此外,還有各種第三方網站可以直接下載Android應用程式包檔案(APK)。Metasploit允許測試人員使用meterpreter生成Android payload,並且可以安裝到Android裝置上。Android應用程式是用Java編寫的,它編譯成稱為DEX的Dalvik可執行格式。應用程式的編譯版本是DEX位元組碼檔案的ZIP檔案。
Android上的Dalvik虛擬機器最近被Android RunTime(ART)取代,後者增加了優化並將DEX位元組碼編譯為本地彙編程式碼。Dalvik VM主要執行大部分位元組碼的即時(JIT)解釋。ART比Dalvik虛擬機器具有更高的效能,Dalvik虛擬機器僅優化應用程式的頻繁執行部分的位元組碼部分。
Smali/baksmali是Android DEX位元組碼的彙編程式/反彙編程式。另一個名為“apktool” 的Android工具可以將壓縮的DEX(APK檔案)反彙編成smali檔案,並將smali檔案重新組合回DEX,然後再其重新組合為APK格式。我們可以使用此工具來反彙編和修改現有的APK檔案。
接下來的文章中,我們可以使用該工具進行反彙編,並在初始Android Activity的smali程式碼中新增一個額外的靜態入口點,以啟動我們的Meterpreter。總的來說,將Meterpreter嵌入一個APK檔案的步驟如下:
1.在“apkmonk.com”或類似的映象站點上查詢現有的有趣APK應用程式。
2.生成Metasploit APK檔案。
3.用“apktool”反彙編Metasploit APK檔案,以及我們打算修改的APK檔案。
4.將所有Meterpreter smali程式碼複製到新的APK smali目錄。
5.通過查詢具有以下行的intent-filter,在APK應用程式的AndroidManifest.xml檔案中找到程式碼的入口點 : <action android:name =“android.intent.action.MAIN”/>
包含此intent-filter的活動名稱將是您要搜尋的入口點。
6.修改 “.smali”
檔案以包含啟動Meterpreter階段的程式碼。
7.將 Meterpreter AndroidManifest.xml
中的所有Meterpreter許可權複製到修改後的 APK的AndroidManifest.xml
中。
8.重新組裝成DEX壓縮格式。
9.使用 “jarsigner”
為新建立的APK檔案簽名,然後將其載入到目標Android裝置上。接下來我會用一個具體的例子來解釋下上述步驟,我從apkmonk.com下載了一個名為Cowboy Shooting Game的遊戲的APK檔案。
生成惡意軟體APK
然後,我使用“msfvenom”命令生成Metasploit APK,如下所示。
反彙編APK檔案
然後使用“apktool” 對這兩個檔案進行反彙編,如下所示:
將惡意軟體程式碼複製到遊戲中
一個簡單的方法是將目錄更改為Metasploit APK目錄,然後將“smali”目錄下的所有檔案複製到“com.CowboyShootingGames_2018-09-22”目錄中。我從系統管理員那裡學到的使用“tar”命令,你可以將tar的輸出傳輸到第二個命令,該命令改變目錄並“解壓縮”生成的檔案。
找到Activity EntryPoint
下面我們可以看到輸入活動被列為“com.CowboyShootingGames.MainActivity”。我們知道這一點,因為XML中包含一個帶有“android.intent.action.MAIN”的intent-filter。
修改Activity EntryPoint Smali檔案
從上面可以看出,在這種情況下,檔案將被命名為“MainActivity.smali”,並且完全限定類路徑中的 “com/CowboyShootingGames” directory as per the periods (“.”)
目錄中。
在 “MainActivity.smali”
檔案中,我們正在尋找 “onCreate()”
方法。
我們需要在“onCreate()”方法呼叫的正下方新增一行“smali”程式碼來呼叫我們的Meterpreter。 invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V
請注意,上面是一行程式碼。使用與“payload”目錄中包含的所有“smali”檔案中的所有路徑引用都必須修改,並更改目錄名稱本身。這可以手工完成,但容易出錯。繼續沒有任何混淆片刻,修改後的最終結果將像下面的截圖一樣。
向修改的APK“AndroidManifest.xml”檔案新增許可權
下一步,使用“grep”搜尋Metasploit“AndroidManfest.xml”檔案中包含字串“uses-permission”和“uses-feature”到修改後的APK的AndroidManiest.xml檔案中.
您需要使用編輯器在新的“AndroidManifest.xml”檔案中的適當位置插入許可權。搜尋現有的“use-permission”行作為插入文字的位置的參考。
您最終可能會獲得一些重複的許可權。您可以選擇刪除它們,它沒什麼卵用。
構建新的APK包檔案
現在 再次使用“apktool” 重新組合生成的APK包檔案。最終結果將寫入APK目錄本身的“dist”目錄中。
重新簽名生成的包檔案
對於重新簽名,一種簡單的方法是使用安裝Android studio時構建的Android除錯金鑰庫。除錯金鑰庫位於UN * X系統上主目錄中的“.android”隱藏目錄中。
另一種方法是使用Java“keytool”生成您自己的自簽名金鑰庫,並使用“jarsigner”工具對其進行簽名,如下面的截圖所示。
此時,“final.apk”檔案已準備好了,可以使用“adb”安裝到Android系統上。
在演示中,我使用“GenyMotion”的虛擬機器,這是一個基於x86的模擬器,它使用VirtualBox可以進行非常高效能的Android模擬。您可能會遇到的問題是x86模擬本身不支援ARM處理器。有一個解決方法,可以線上獲得一些ARM翻譯庫。您需要搜尋“ Genymotion-ARM-Translation_v1.1.zip ”,然後將ZIP檔案拖到正在執行的GenyMotion Android系統上。這不是100%可靠,並且仍可能導致一些應用程式崩潰。我發現Nexus 6系列裝置非常適合,因為“rooting”套件相當可靠,並且通過USB電纜連線進行測試並不是太麻煩。
最後一步當然是嘗試我們新感染的遊戲。我們很快發現,在我們安裝完遊戲的那一刻,我們在KALI系統上獲得了一個Meterpreter shell。
那麼問題來了,在執行了上述所有必要步驟後。我發現出錯的可能性非常高。所以我決定使用Python指令碼來自動執行此過程。我稱它為“android_embedit.py”,無需花費太多精力,就可以完成工作。
“android_embedit.py”的原理是,只要您提供Metasploit生成的APK檔案,和要修改的原始APK和金鑰庫,它將以自動方式執行所有步驟併為您生成結果。以下是執行該工具的示例。所有臨時檔案和輸出都將儲存在“〜/ .ae”目錄中。
該工具還將刪除“metasploit”目錄名稱,並自動使用隨機字串目錄名稱對其進行模糊處理。您可以在下面的截圖中看到此結果,其中列出了APK“smali / com”目錄的內容。名為“ dbarpubw ”的目錄實際上包含Metasploitstager程式碼。