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