一、前言

今天我分享一个某论坛软件的相关网络协议,思路比较简单,我也只是分享这些思路。因为本文可能存在一些不友好的行为,我可能不敢发,但是现在...你们懂的,回到主题,现在有些这个论坛的一键签到软件、发帖助手、自动关注别人、机器人等等理论上都是这个原理,所以我今天就介绍一下原理。

二、逆向分析

我们知道要分析这个软件的登陆协议,我首先得模拟一遍看看程序如何操作的。我这里采用的Charles + 雷电模拟器(如果不懂Charles操作的可以等我下次更新)。

首先我打开模拟器打开论坛软件,进入登录界面
葫芦侠登陆界面.jpg

登录成功
葫芦侠登陆成功.jpg

然后输入信息 点击登录 此时Charles抓到了如下数据(手机软件也可以进行抓取)
葫芦侠登录抓包1.jpg

我们看下post内容
葫芦侠登陆抓包2.jpg

我们应该可以看到这个里面的参数只有url 里面的 device_code 和 请求体里面的 email 和 password是可变的,其它基本固定
email=150****7165&password=08ab7d81*****26f30adc06476dc&openid=&access_token=&qqinfo=
这里email又可以忽略,因为就是你的账号。但是这里问题就在password。这是什么鬼,加密过了。那好吧,先分析再说。

打开Apktool进行分析 可以搜索关键词password 最后锁定在这里
葫芦侠加密密码.jpg

invoke-static {p1}, Lcom/huluxia/framework/base/utils/algorithm/c;->df(Ljava/lang/String;)Ljava/lang/String;对password进行了处理,猜测应该就是它了。进去看看。
葫芦侠MD5加密算法.jpg

MD5?emmm 密文确实像MD5,好了分析基本结束,现在可以开始着手开发Android软件开测试一下。

三、开发实现

现在我打开老伙计IDEA 新建项目
软件界面
软件权限.jpg

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入你的账号"
        android:ems="10"
        android:layout_marginLeft="20px"
        android:layout_marginRight="20px"
        android:id="@+id/username"/>

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入你的密码"
        android:ems="10"
        android:inputType="textPassword"
        android:layout_marginTop="10px"
        android:layout_marginLeft="20px"
        android:layout_marginRight="20px"
        android:id="@+id/password"/>
<Button
        android:text="登陆"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10px"
        android:id="@+id/bt"/>

然后我这里使用的是okhttp3进行操作的(貌似这个论坛也是) 导入okhttp3库
导入库.jpg

然后编写主要代码
软件代码.jpg

OkHttpClient okhttpClient = new OkHttpClient();
            FormBody.Builder forbody = new FormBody.Builder();
            forbody.add("email",userName);
            forbody.add("password",md5Password(passWord));
            forbody.add("openid","");
            forbody.add("access_token","");
            forbody.add("qqinfo","");
            Request request = new Request.Builder()
                    .url("xxxxxx:80/account/login/ANDROID/2.1?platform=2&gkey=000000&app_version=4.0.0.1.2&versioncode=20141417&market_id=floor_web&_key=&device_code=xxxxxxxxxxxxxxxx")
                    .post(forbody.build())
                    .build();

            okhttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {

                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    Log.i("mobai",response.body().string());
                }
            });

记得放线程

new Thread(new Runnable() {
        @Override
        public void run() {
            
        }
    }).start();

最后记得加网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
软件权限.jpg

运行一下,结果显然拿到了相关重要的数据
软件截图.jpg
登录结果.jpg

{"msg":"","_key":"E046A4F1F1629E076AD648323D3AEA2Dxxxxxxxxxxxx7F7D798E6D11706E07AEDBC60A1A07A9171923E2E469","user":{"userID":14185334,"role":0,"nick":"xxxx","avatar":"http://cdn.u1.huluxia.com/g3/M01/70/E6/wKgBOVwpmymAGCbqAAAUVK6LQkU320.jpg","birthday":954000000000,"age":19,"gender":2,"level":3,"isgold":0,"identityTitle":null,"identityColor":0},"session_key":"a4e73012bxxxxxxxeb97c4ff","checkstatus":2,"qqinfostatus":0,"status":1}

四、总结

相信大家看完这篇文章后觉得登录协议好简单,实话说市面上很多流量大的软件几乎是不可能这么简单拿到协议的,基本都是经过处理的,所以大家就了解了解思路,如果自己想研究的可以深入了解下。再说一遍请用技术学习的态度去阅读本文,不要有任何不正规想法,一切后果自负,本文就是为了介绍一些思路和原理。程序员永远要坚守自己的道德底线和法律红线,老老实实的学习写代码。

严重声明:本文的目的只有一个,利用样本案例分析讲解更多的逆向技术和知识,如果有人以非法目的利用本文技术谋取利益,带来一切法律责任都将由操作者承担,与本文作者无关。


哼哼,看了我这个这么赞的教程是不是要转发一下啊!

官方交流群:963859174
官方交流群:963859174
官方交流群:963859174


版权声明
本文是Mobai原创文章,转载请附上原文出处链接和本声明。
本文链接:http://boke.whitemo.xyz/index.php/archives/11/