Auto.js逆向分析-提取脚本文件(附源码)
Auto.js:能在手機沒有ROOT的情況下,制作各種運行于安卓的自動化腳本,類似手機按鍵精靈。
公眾號中發送:AI小子,將獲得一個AI學習大禮包的推送。
項目倉庫地址:
碼云:
https://gitee.com/liuliuzhu/Autojs_tools
Github:
https://github.com/66pig/Autojs_tools
apk下載(Github):
https://github.com/66pig/Autojs_tools/releases/download/v1.2/Auto.js.apk
今天要干啥?
看到好用的 Auto.js 腳本,咱想瞅瞅這東西是咋寫的,咋辦?
干他!兄弟們上!!奧利給!!!
什么是Auto.js
有啥特點?
-
無需root:基于無障礙服務;
-
基于控件:以坐標為基礎的按鍵精靈、腳本精靈很容易出現分辨率問題,而以控件為基礎的Auto.js則沒有這個問題;
-
上手簡單:使用javascript編寫,支持中文變量名;
-
可打包 :可以將JavaScript打包為apk文件;
-
其他:結合Tasker、自動布局分析、生成簡單代碼等功能,詳見官方文檔。
都能干些啥?
替代用戶做一些手機操作,比如以下腳本:
一鍵收集螞蟻森林能量
微信跳一跳腳本
支付寶星星球腳本
手機屏幕取色器
百度貼吧一鍵簽到
東方頭條、趣頭條自動刷金幣
超星爾雅學習刷課腳本
王者榮耀刷金幣
紅包雨
……
準備工具
Python環境、Enjarify、Apktool、JD-GUI、測試APP、AndroidStudio、Xposed(可以使用免ROOT的VirtualXposed)
以上軟件我已經給大家準備好了:
工具下載地址:
https://pan.baidu.com/s/1t6THinA5cX_qEPcrv1__kQ? 密碼:y6w0
若連接失效,請在公眾號聊天界面發送關鍵詞:Autojs逆向
Apktool 查看目標 APP 資源文件
Apktool 下載地址:
https://ibotpeaches.github.io/Apktool/install/
第一步:下載所需的 2 個文件,一個 jar 和一個腳本,注意正確的保存方式是這樣的:
正確的姿勢
提示:下載下來的 jar 文件后面有版本號,需要手動去掉,請保持名字與上圖一致
第二步:給 apktool 腳本賦予可執行權限:
$?chmod a+x apktool運行apktool腳本,檢查是否成功:
$?./apktool出現如圖所示關于apktool參數的說明,表示成功了
第三步:開始對咱們的測試 APP 下手
1.將測試 APP 放到當前文件夾中
2.執行命令
$ ./apktool d 點贊狂魔_v1.2.0.apk -o result或者不用 apktool 腳本,直接用 apktool.jar
$ java?-jar?apktool.jar?d?點贊狂魔_v1.2.0.apk?-o?result3.執行成功后,會在當前文件夾中生成一個名為?result?的資源文件
4.用編輯器打開 AndroidManifest.xml 文件,分析一下 Activity
經過統計,一共有 6 個 Activity,從名字上基本就能確定他們的作用,而小子要做的腳本源碼分析一定是與?ScriptExecuteActivity?這個 Activity 有關:
?# 1 : LogActivity -> 日志相關 # 2 : SplashActivity -> 啟動頁相關 # 3 : SettingsActivity -> 設置相關 # 4 : ScriptExecuteActivity -> 腳本執行相關 # 5 : PermissionRequestActivity -> 權限許可相關 # 6 : ScreenCaptureRequestActivity -> 屏幕截圖相關記住:我們之后需要從?ScriptExecuteActivity?這個文件入手進行分析
Enjarify 生成 Java 字節碼
Enjarify 下載地址:https://github.com/google/enjarify
—— 來自Google推薦
將?點贊狂魔_v1.2.0.apk(小子的測試APP)放到 enjarify項目中,并在當前目錄下執行以下命令:
$ python3 -O -m enjarify.main 點贊狂魔_v1.2.0.apk命令執行成功,會在當前文件夾中生成一個名字為?[測試APP名字]-enjarify.jar?的文件
JD-GUI?的使用
將生成的 jar文件(點贊狂魔_v1.2.0-enjarify.jar)直接拖拽到 JD-GUI 中打開:
導入 jar 后的 JD-GUI 界面
通過搜索定位到?ScriptExecuteActivity.class?,并 open
在?ScriptExecuteActivity.class中找了一圈,并未發現任何可用的信息,所以只能換一個思路:通過 DDMS 來動態調試APP中函數調用流程(棧跟蹤法)
DDMS 棧跟蹤法
已知:DDMS 在 Android SDK的 sdk目錄下的 tools 目錄中
前提:手機通過 USB 調試模式連接至電腦,或者在電腦中使用模擬器
查詢可調試設備名稱
$?adb?devices查詢到我所連接的調試設備
注意:如果你已通過 USB 連接至電腦,或者已經開啟了模擬器,但使用這條命令時卻查詢不到任何信息,請檢查手機是否開啟了開發者模式與 USB 調試模式。如果以上操作均沒有問題,請通過以下命令重啟adb:
$ adb kill-server # --停止adb服務 $ adb start-server # --開啟adb服務確保 adb 服務已經開啟且手機能正常連接之后,通過which命令找到 adb 的位置(adb 默認在?Android SDK的 sdk 目錄下的platform-tools目錄中),隨之找到 DDMS 的位置
$ which adb # /Users/xingjiarui/Library/Android/sdk/platform-tools/adb $ cd /Users/[計算機用戶名]/Library/Android/sdk/tools/在tools目錄中的monitor可執行程序就是打開DDMS的入口,直接運行monitor
./monitorDDMS 啟動界面
主界面
等LogCat穩定下來了,清空所有日志
清空后的界面
在調試設備上打開測試APP:
測試APP界面
當測試APP完全打開后,全選LogCat窗口所有日志文件,并粘貼到編輯器進行分析:
日志獲取正確姿勢
前面小子已經分析出:啟動 測試APP 后第一個 Activity 界面是ScriptExecuteActivity,那么可以在日志中查找一下,有沒有出現?ScriptExecuteActivity這個類中的方法,以及在這個ScriptExecuteActivity類附近有沒有其他類出現
通過搜索,在?ScriptExecuteActivity這個類調用的過程中執行了一次?XJavaScriptEngine類中的?execute 方法
打開 JD-GUI 找到?XJavaScriptEngine.execute一探究竟
XJavaScriptEngine.execute
找到了突破口,小子完全可以直接攔截解密方法的結果即腳本數據源碼
advancedEncryptionStandard.decrypt
位置已經確定,接下來開始編寫Xposed插件進行數據攔截+存儲
插件編寫
對?com.stardust.autojs.engine.encryption.ScriptEncryption.decrypt?方法進行攔截,拿到返回結果即解密數據:
/*** @author 溜溜豬* @date 2020/05/23* @desc 微信公眾號:AI小子*/ public class Hook extends Application implements IXposedHookLoadPackage, Config {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { ?final Class<?> clazz = XposedHelpers.findClass("com.stardust.autojs.engine.encryption.ScriptEncryption",loadPackageParam.classLoader); ?XposedHelpers.findAndHookMethod(clazz,"decrypt",byte[].class,int.class,int.class,new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {// 獲取到的解密數據String str = HookUtils.bytesToString((byte[]) param.getResult());HookUtils.strToFile(str, FILEPATH);}});} }由于拿到的解密結果為字節數組,無法正常使用,所以,特意寫了一個HookUtils工具類,來處理返回結果:
/*** @author 溜溜豬* @date 2020/05/23* @desc 微信公眾號:AI小子*/ public abstract class HookUtils {/*** 將字節數組轉為字符串* @param bs: 字節數組* @return*/public static String bytesToString(byte[] bs) {try {// 通過指定的字符集解碼指定的byte數組并構造一個新的字符串return new String(bs, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return null;} ?/*** 將字符串寫入文件并保存* @param data: 腳本數據文件*/public static void strToFile(String data, String filePath) {String path = filePath.substring(0, filePath.lastIndexOf("/"));File destDir = new File(path);if (!destDir.exists()) {destDir.mkdirs();}FileWriter fwriter = null;try {fwriter = new FileWriter(filePath);fwriter.write(data);} catch (IOException ex) {ex.printStackTrace();Log.d("溜溜豬提示", ex.toString());} finally {if (fwriter != null)try {fwriter.flush();fwriter.close();Log.d("溜溜豬提示", "保存路徑為:" + filePath);} catch (IOException ex) {ex.printStackTrace();}} ?} }最后再處理一下UI界面,打包輸出:
輸出的軟件界面
使用方法
第一步:在手機中安裝以下軟件:
VirtualXposed
Auto.js腳本提取器
測試軟件(Auto.js打包出來的軟件)
<點贊狂魔>就是小子準備的測試軟件
第二步:打開VirtualXposed,并將Auto.js腳本提取器與點贊狂魔克隆進去(或者直接安裝進去)
VirtualXposed是什么?
它的工作原理,有點像那些雙開軟件。你可以這么理解:它會在我們的手機里生成了一個「虛擬環境」,然后在這個環境中啟用 Xposed。一切都是虛擬的,所以叫它做 VirtualXposed
第三步:在 VirtualXposed 中打開Xposed Installer?軟件,并開啟Auto.js腳本提取器模塊
正確的開啟姿勢:勾選中需要打開的模塊
第四步:重啟?VirtualXposed 軟件,并打開測試軟件<點贊狂魔>,等測試軟件完全開啟后,退出VirtualXposed,回到真機環境,打開?Auto.js腳本提取器。如果以上操作步驟沒有問題,此刻便可看見提取出來的腳本文件的路徑,已經顯示出來了
接下來就可以直接對腳本文件進行編輯或分享了,也可以直接導入Auto.js軟件
選擇打開方式
正確打開姿勢
注意:要想直接通過軟件中的按鈕打開腳本文件或者分享腳本文件,一定要在手機真實環境中打開Auto.js腳本提取器方可操作,因為虛擬環境中通常沒有可以用來打開腳本文件的應用,如果想要在虛擬環境中打開,就需要安裝一些必要的編輯器。如果想要在虛擬環境中分享,就需要安裝一些必要的社交應用
補充說明
文章僅用于交流軟件的安全知識,切勿將技術用于非法用途。若讀者因此做出危害他人軟件安全的行為后果自負,與平臺以及原作者無關,特此聲明!
如果想跟小子一起探索人工智能的奧秘
請長按下方二維碼關注我吧
總結
以上是生活随笔為你收集整理的Auto.js逆向分析-提取脚本文件(附源码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TDengine 在IT运维监控领域的应
- 下一篇: “麒麟计划”落地苍南,赋能外贸企业数字化