大麥網搶票工具系列(一)
前言
《大麥網》都知道吧,就是那個被網友聲稱“大麥網你賣啥了?”票務平臺。近期有聽到朋友說《大麥網》的票很難搶,基本上都是說:“哎喲喂,被擠爆啦,請稍後重試!”,也不知道《大麥網》到底有沒有票!!!
言歸正傳,準備做個《大麥網》搶票的軟體,就是想證明下《大麥網》到底有沒有票(推廣公眾號)!!,做之前也從百度、Github裡面搜尋過, Github裡面有幾個好用的Python搶票指令碼,有興趣的可以去裡面搜尋。此次做的搶票小工具是基於《大麥網》移動端介面的,直達《大麥網》伺服器,沒有網頁元素,速度肯定棒。
這個系列的文章主要是偏教程方面,學習一些Hook、抓包、反編譯的知識。再者《大麥網》已經被阿里給收了,所以這是個阿里系的App,看完這個系統的文章對某寶、某豬、某貓App的逆向很有幫助。說了這麼多,先列出逆向時用到的工具軟體,以及主要用途:
- Frida
- Xposed
- Apktool
- Selenium
- Root後的手機一臺
還有一些逆向過程中的難點:
- Charles抓包
- 生成Api簽名
- 自動過人機校驗
大綱
為了思路更加清晰,為大家列出這個系列後面的一些文章相關內容:
- 基本工具使用、介紹
- 阿里網路庫逆向分析、Charles抓包
- MTOP簽名引數分析、繞路
- 人機檢驗分析、繞路
Frida基本使用
使用Frida的目地是為了hook應用關鍵方法,找到App的突破口如:日誌開關、ssl開關等關鍵方法或變數。Frida的安裝方式也非常簡單,只需要將frida-server
上傳到手機裡面使用shell
執行起來,然後就可以執行一些hook操作,篇幅有限就不一一講解了,只簡單介紹一下本系列文章中使用的一些命令,有興趣到檢視具體使用文件。
將frida-server
上傳到手機目錄:
$ adb root # might be required
$ adb push frida-server /data/local/tmp/
$ adb shell "chmod 755 /data/local/tmp/frida-server"
$ adb shell "/data/local/tmp/frida-server &"
檢視系統執行程序:
$ frida-ps -U
開啟需要hook的程式,並傳入hook指令碼:
$ frida -U -l src/index.js -f cn.damai
這幾條命令下來,差不多就夠了,hook相關的點都在src/index.js
Xposed基本使用
使用Xposed的目的是為是資料簽名的,接過阿里系Api的都知道會有簽名這個步驟的。簽名演算法就不去倒騰了,技術有限..., 但是可以繞過的麻,退而求其次。Xposed只需要會建立Module了了解幾個核心Api就可以啦。
引入Xposed依賴:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'
}
宣告你的模組資訊:
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="大麥網簽名" />
<meta-data
android:name="xposedminversion"
android:value="53" />
實現模組入口:
package com.xposed;
import de.robv.android.xposed.*;
import de.robv.android.xposed.callbacks.*;
public class HookToast implements IXposedHookLoadPackage
{
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
....
}
}
Selenium基本使用
使用Selenium主要是過人機校驗,Api調太多後端程式會檢測出是機器在訪問Api,所以為了限制保護系統《大麥網》會彈出一個帶滑塊的網頁來辨別使用者身份,如果不處理就會限制訪問Api基本調用不了Api除非限制時間過了,才能正常訪問,引入Selenium就是模擬人為行為滑動完成人機校驗,告訴後端不是機器人在搶票。
新增Selenium依賴:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
設定WebDriver:
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("excludeSwitches", Arrays.asList("enable-automation"));
chromeOptions.addArguments("--user-agent=" + String.format("Mozilla/5.0 App"));
chromeOptions.addArguments("--no-sandbox");
chromeOptions.addArguments("--lang=zh-CN");
// chromeOptions.setHeadless(true);
webDriver = new ChromeDriver(chromeOptions) ;//new ChromeDriver(chromeOptions);
開啟滑動網頁:
webDriver.get(httpUrl.toString());
new WebDriverWait(webDriver, 2).until(ExpectedConditions.textToBe(
By.className("nc-lang-cnt"),
"請按住滑塊,拖動到最右邊"
));
解鎖地址是動態的,後續再來說明地址的使用和操作。
總結
基本上使用Frida、Selenium、Xposed就能解決抓包、人機校驗、生成簽名這幾個關鍵問題了,後續再來講解具體的操作流程,以及逆向分析關鍵程式碼。
最後歡迎大家關注我的公眾號,獲取最新《大麥網搶票工具》搶票工具的進展。
免責宣告:
本文章僅限用於學習和研究目的;不得將上述內容用於商業或者非法用途,否則,一切後果請讀者自