zoukankan      html  css  js  c++  java
  • 大麦网抢票工具系列(一)

    前言

    《大麦网》都知道吧,就是那个被网友声称“大麦网你卖啥了?”票务平台。近期有听到朋友说《大麦网》的票很难抢,基本上都是说:“哎哟喂,被挤爆啦,请稍后重试!”,也不知道《大麦网》到底有没有票!!!

    言归正传,准备做个《大麦网》抢票的软件,就是想证明下《大麦网》到底有没有票(推广公众号)!!,做之前也从百度、Github里面搜索过, Github里面有几个好用的Python抢票脚本,有兴趣的可以去里面搜索。此次做的抢票小工具是基于《大麦网》移动端接口的,直达《大麦网》服务器,没有网页元素,速度肯定棒。

    这个系列的文章主要是偏教程方面,学习一些Hook、抓包、反编译的知识。再者《大麦网》已经被阿里给收了,所以这是个阿里系的App,看完这个系统的文章对某宝、某猪、某猫App的逆向很有帮助。说了这么多,先列出逆向时用到的工具软件,以及主要用途:

    • Frida
    • Xposed
    • Apktool
    • Selenium
    • Root后的手机一台

    还有一些逆向过程中的难点:

    • Charles抓包
    • 生成Api签名
    • 自动过人机校验

    大纲

    为了思路更加清晰,为大家列出这个系列后面的一些文章相关内容:

    1. 基本工具使用、介绍
    2. 阿里网络库逆向分析、Charles抓包
    3. MTOP签名参数分析、绕路
    4. 人机检验分析、绕路

    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里面,后面再来讲解需要hook的关键点。

    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就能解决抓包、人机校验、生成签名这几个关键问题了,后续再来讲解具体的操作流程,以及逆向分析关键代码。

    最后欢迎大家关注我的公众号,获取最新《大麦网抢票工具》抢票工具的进展。

    免责声明:
    本文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请读者自负




    《架构文摘》每天一篇架构领域重磅好文,涉及一线互联网公司应用架构(高可用、高性 能、高稳定)、大数据、机器学习等各个热门领域。

  • 相关阅读:
    很难理解的三个设计模式
    设计模式思考(转)
    AOP
    CAP理论(摘)
    DDBS
    NoSql
    Enterprise Library 企业库
    padright padleft
    Process ProcessThread Thread
    053374
  • 原文地址:https://www.cnblogs.com/xwgblog/p/11619219.html
Copyright © 2011-2022 走看看