
與Android設備相互作用的工具,包括ADB,Androguard和Frida交互。
Autodroid是用於編程腳本與一個或多個Android設備進行散裝交互的Python工具。可能的用途包括:
要使用Autodroid,您需要安裝依賴項,這些內容是在需求文件中指定的,可以按照以下命令安裝。
pip install -r REQUIREMENTS.txt需要為命令行參數提供有效的JSON配置文件。下面顯示了一個簡單的配置文件示例,該示例將一次從所有連接的設備中檢索所有應用程序,並使用Androguard將APK提取到ZIPS。
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " adb pull !app_path !app_id.apk " , " reverse: !app_id.apk " ]
}創建了有效的自動型配置文件後,您可以通過運行AutoDroid.py Python文件與配置文件作為命令行參數開始設備交互。
python AutoDroid.py example_config.json可以在目標設備上執行一系列命令,這些命令可以在您的計算機上本地運行,因此必須在本地運行這些命令,因此必須存在調用程序和文件。這些命令可以是列表格式(如上所述),也可以是鍵值對映射/ dict。這些鍵值對定義為命令塊,其中鍵是塊名稱,該值是命令列表。常數(如下所述) block:<block name>可用於運行一個塊並提供簡單的循環/回擊功能。使用塊的示例在下面可以看到。
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : {
"test_user_input" :[ " adb -s !device_id shell monkey -v 5 -p !app_id " ],
"retrieve_apk" :[ " adb -s !device_id pull !app_path !app_id.apk " , " sleep:5 " ]
}
}devices和apps字段是對自動體的另外兩個字段。這些字段定義了針對的設備(字符串列表)和應用程序反向域符號名稱(即com.example.application )定義ADB設備ID,用於針對設備上的應用程序(字符串列表)。這兩個字段都可以是空的,字符串列表或定義為*所有可用設備和應用程序的目標。在後端,此操作的方式是,當這些字段中提供一個值時,程序將循環通過所有命令,以便每個設備上的每個應用程序。指定特定設備和應用程序的一個示例如下:
{
"devices" : [ " 09261JEC216934 " ],
"apps" : [ " com.google.android.networkstack.tethering " ],
"commands" : [ " adb -s !device_id pull !app_path !app_id.apk " ]
}當設備字段不是空時(即"devices":[], )一個變量(請參見下文) !device_id 。該變量可以在您的命令中使用,以表示當前目標設備的ADB設備ID。同樣,變量!app_id和!app_path當應用程序字段不為空時,可以在命令中使用應用程序倒域符號名稱和該應用程序APK文件的路徑。
為了節省時間,Autodroid允許在腳本中設置無限數量的變量。這些變量以鍵值對格式構造。當變量的鍵位於命令中時,它將被替換為值。使用變量的示例配置可以在下面看到,在此配置文件中,變量!test已作為monkey ADB命令的短手和內置變量!app_id也使用。
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"variables" : { "!test" : " adb -s !device_id shell monkey -v 500 -p " },
"commands" : [ " !test !app_id " ]
}使用變量的首選標準是用一個!並使用_代替空格。
可以使用?操作員。如果運算符緊隨其後,則將變量名設置為以下命令輸出是什麼,或者命令沒有輸出命令本身。可以在下面看到一個示例:
{
"devices" : [],
"apps" : [],
"commands" : [ " ?!files dir " , " print: !files " ]
}以下是已在自動體中使用的保留變量的列表,應避免添加到配置文件中。如果添加了這些變量,它們將在運行時被覆蓋。
!device_id當配置中提供一個或多個設備時,此變量在運行時填充。並將其設置為當前設備的ADB設備ID。每個設備都依次循環,每個設備的配置命令都為每個設備運行。!adb_connect - 這是一個轉換為adb -s !device_id速記變量,使用此代替adb將確保所有ADB命令都在正確的設備上運行。!app_id當配置中提供一個或多個應用程序時,此變量在運行時填充。並將其設置為當前應用程序的應用程序反向域符號名稱(即com.example.myapplication )。每個應用程序依次循環,每個應用程序都為每個應用程序運行。!app_path類似於上述。當配置中提供一個或多個應用程序時,該變量在運行時填充。並將其設置為目標設備上當前應用程序APK文件的路徑。每個應用程序依次循環,每個應用程序都為每個應用程序運行。常數是特定於自身的命令,並且與特定功能有關。通常將其分解為一個關鍵字,然後分解為:一個或多個參數被a隔開; 。這些常數必須在命令開始時使用,並且應始終處於較低的情況下。示例將在各個部分中給出。
Autodroid具有內置功能,可以作為自動體運行的一部分運行FRIDA JavaScript文件。該常數定義為frida:並且必須提供使用JavaScript文件的路徑,其次是A ;然後,應用程序的應用程序符號名稱為目標。除了將變量應用於命令外,變量還應用於提供的文件內容。
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " frida:myJavascript.js;!app_id " ]
}注意在實施FRIDA集成時,目前未經測試。
Autodroid通過Androguard支持逆向工程APK。該常數的結構為reverse:並走向局部存儲的APK的路徑。使用此功能將將APK的未捆綁版本作為ZIP保存,其中name <application name>.apk 。
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " adb -s !device_id pull !app_path !app_id.apk " , " reverse: !app_id.apk " ]
} When using the reverse constant the apk path can be followed by any number of paramiters (seperated by a ; ), these including info (which will save a Json file of application information, decompile (which on Linux will save a txt summary of the decompiled methods), manifest (which will save the xml manifest file, and zip which will perform the same action as if no paramiters were provided and saves the unbundled APK to a zip file. An example of using這些參數可以在下面看到:
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : {
"get_app" : [ " adb -s !device_id pull !app_path !app_id.apk " ],
"reverse_app" :[ " reverse: !app_id.apk;info " ,
" reverse: !app_id.apk;manifest;decompile " ]
}
}該常數提供了簡單的功能,可以在特定時間內暫停執行工具。該常數結構為sleep:其次是等待的秒數。
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " adb pull !app_path !app_id.apk " , " sleep:5 " ]
}塊常數提供了簡單的循環和呼叫功能。該常數構成為block:然後是要執行的命令塊的名稱。如果未提供塊(即以列表格式提供了命令),則將命令添加到稱為main的塊中。
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : {
"test_user_input" :[ " adb shell monkey -v 5 -p !app_id " ],
"retrieve_apk" :[ " adb pull !app_path !app_id.apk " ],
"test_again" : [ " block: test_user_input " , " sleep:5 " ]
}
}關鍵字“查找”,然後是通往APK的路徑,而Regex String要查找,將在控制台上打印到APK的路徑,如果它們存在於APK中,則發現了它們。這可以與其他命令結合使用,以在所有處理應用程序中運行查找字符串。一個例子可以在下面看到:
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " adb pull !app_path !app_id.apk " , " find: !app_id.apk;my_string " ]
}另一個簡單的常數。 print:常數可用於將消息打印到控制台。使用此此示例可以在下面看到:
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " print: device id !device_id, app id !app_id, app path !app_path " ]
}寫入常數允許將變量或命令寫入文件。與write: string一起使用,然後是要寫入的文件,然後是a ; ,然後寫入文件的命令或變量。
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : {
"get_stats" : [ " ?!stats device id !device_id, app id !app_id, app path !app_path " ],
"write_stats" : [ " write: !device_id-!app_id-stats.txt;!stats " ]
}
}read:常數提供了要讀取的文件的途徑,然後是a ; ,然後將輸出保存到的變量。該變量可以是新聲明或現有變量。
{
"devices" : [],
"apps" : [],
"commands" : [ " read:test.txt;!data " , " print: !data " ]
}類似於寫。附加常數允許將變量或命令寫入文件。與append:字符串一起使用,然後是要寫入的文件,然後是a ; ,然後寫入文件的命令或變量。與將在現有文件中創建或寫入的寫作不同,附錄只會添加到現有文件中。如果該文件不存在,則自outodroid將出錯。
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " append:test.txt;!app_id !app_path " ]
}以下是使用自動藥在Android設備上測試潛在惡意軟件的示例。此配置安裝潛在的惡意軟件,記錄屏幕,檢索屏幕捕獲並卸載應用程序。
{
"devices" : [ " * " ],
"apps" : [],
"commands" : {
"record_screen" : [ " adb shell screenrecord /data/local/tmp/test.mp4 --time-limit 120 " ],
"install_eicar" :[ " adb install com.fsecure.eicar.antivirus.test.apk " ],
"user_input" :[ " adb shell monkey -p com.fsecure.eicar.antivirus.test -v 1 " , " sleep: 20 " ],
"uninstall" : [ " adb uninstall com.fsecure.eicar.antivirus.test " ],
"get_video" : [ " adb pull /data/local/tmp/test.mp4 " , " sleep: 20 " , " adb shell rm /data/local/tmp/test.mp4 " ]
}
}以下是使用Autodroid實現Androguard的一個示例,以將APK從設備上進行反向工程,並檢索有關該應用程序的信息的JSON,方法的分解摘要,XML清單文件和APK的未捆綁ZIP文件。
{
"devices" : [ " * " ],
"apps" : [ " me.jamesstevenson.onelist " ],
"commands" : {
"get_app" : [ " adb pull !app_path !app_id.apk " ],
"reverse_app" :[ " reverse: !app_id.apk;info;decompile;manifest;zip " ]
}
}GNU通用公共許可證v3.0