User-Profile-Image
hankin
  • 5
  • 首页
  • 留言
  • 仓库
  • 云端
  • 分类
    • 随笔
    • 安卓逆向
    • php
    • node.js
    • C#
  • 页面
    • 个人技术栈
    • 留言
  • 友链
    • 沉沦云API
    • 沉沦云端
    • SinKingMusic
    • 美和易思刷课
    • 神奇的七云
    • khaos编程小站
    • 小九实验室
    • 一叶三秋
    • 青年的故事
    • :李白云博客
    • 噜阿噜-资源站
    • 小k
Help?

Please contact us on our email for need any support

Support
    首页   ›   php   ›   正文
php

今日校园app协议分析(自动提交问卷,自动打卡等等)

2020-07-01 09:06:37
330167  1264 40

项目原由

因为疫情原因,学校需要每天提交问卷,在开始时候也分析过app,挺简单,后来觉得疫情应该很快就过去,写这个就不值当了。可是一转眼过了半年……还是要每天打卡,就很烦!于是写了这个功能类!

项目说明

发出来肯定有喷子说是抄袭代码,本博客全部本人原创技术和代码,包括此app的分析过程也会详细讲出来!本项目的代码仅供学习交流!

下载APP

下载地址

下载HttpCanary

HttpCanary是一款安卓抓包神器,可自行百度下载

开始抓包

经过抓包,发现核心请求有部分是加密的,根据以往经验,这种情况会很费劲,只能逆向app拿到加密算法,但是我发现了更简单的办法

分析请求

于是我换了一种思路,在app中查看网页请求,app是可以使用教务账号登陆,每个学校的网址也都是学校【域名前缀.campusphere.net】这个格式,

我们可以直接登陆进去,f12分析请求,可以看到有很多js文件,这些js是压缩过的,但是不妨碍我们查看代码!

js已经拿到,我们可以继续查阅代码,经过分析会发现一个api合集

通过此api,我们可以执行任意操作!

模拟登陆

此app登陆使用的是sso单点登录系统,登陆的同时会携带安全码等信息,但是我们仍可以模拟登陆,如果失败次数过多,此账号登陆下一次必定出现验证码,登陆成功,则下次登陆验证码消失,下面是安全码的请求

则验证码,是按照lt值来的,重新登陆携带lt值和cookie值即可

登陆成功会进行多次重定向跳转,这里不再叙述了,到最后我们可以拿到MOD_AUTH_CAS名的cookie值,这就是最终结果了,

其他api

以上已经说过一个api合集,通过合集的api名以及查找,会找到每个api的参数列表,发送模拟post即可,但是要注意的是content-type为json,这个api只是一小部分,很多api在app还是可以抓到的,都是明文传输!

更新日志

2020/09/26:
1. 修复登录协议

登陆接口

接口地址:
http://tool.clwl.online/cpdaily/login.php?url=【学校iap地址】&user=【账户】&pwd=【密码】
说明:
本接口可强制登录,无视验证码各种操作!适用于各种iap登录
例如:
http://tool.clwl.online/cpdaily/login.php?url=https://ahctc.campusphere.net&user=test&pwd=test

功能实现

以下是我封装的今日校园功能类,基本实现了所有接口,代码仅供学习交流!

<?php
/**
 * 今日校园功能类
 * @param Author 流逝中沉沦
 * @param QQ 1178710004
 * @param Date 2020/06/30
 */
class CpDaily
{
    private $loginapi = ''; //登陆API

    private $ua = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36'; //默认UA

    private $ApiUrl = 'https://ahctc.campusphere.net'; //学校网站地址

    private $cookies = "";

    /**
     * 设置cookie
     * @param String $cookie cookies值
     */
    public function SetCookie($cookie)
    {
        if (is_array($cookie)) {
            $this->cookies = urldecode(str_replace("&", ";", http_build_query($cookie)));
        } else {
            $this->cookies = urldecode($cookie);
        }
    }

    /**
     * 设置学校地址
     * @param String $url 学校网站地址
     */
    public function SetSchool($url)
    {
        $this->ApiUrl = $url;
    }

    /**
     * 设置登陆代理
     */
    public function SetLoginProxy($url)
    {
        $this->loginapi = $url;
    }

    /**
     * 获取学校列表
     * @return Mixed 数据集
     */
    public function SchoolList()
    {
        $url = 'https://static.campushoy.com/apicache/tenantListSort';
        $res = $this->get_curl($url);
        $arr = json_decode($res, true);
        if (empty($arr) || $arr['errCode'] != 0) {
            return false;
        }
        return $arr['data'];
    }

    /**
     * 获取学校信息
     * @param Int $id 学校ID
     * @return Mixed 数据集
     */
    public function SchoolInfo($id = 'cd2eeac7-8519-4d02-80eb-8e582f30c1ed')
    {
        $url = 'https://mobile.campushoy.com/v6/config/guest/tenant/info?ids=' . $id;
        $res = $this->get_curl($url);
        $arr = json_decode($res, true);
        if (empty($arr) || $arr['errCode'] != 0) {
            return false;
        }
        return $arr['data'];
    }
    /**
     * 账户登录(获取Cookie)
     * @param String $user 账户
     * @param String $pwd 密码
     * @param String $lt 验证码ID
     * @param String $cookie Cookie值
     * @param String $code 验证码值
     * @return Mixed 数据集
     */
    public function Login($user, $pwd, $lt = "", $cookie = "", $code = "")
    {
        if (empty($lt) || empty($cookie)) {
            $res = $this->get_curl($this->ApiUrl . "/portal/login", 0, 0, 0, 1, 0, 0, 0, 1);
            $location = $this->GetLocation($res['header']);
            $res = $this->get_curl($location, 0, 0, 0, 1, 0, 0, 0, 1);
            $location = $this->GetLocation($res['header']);
            $cookie = $this->GetCookie($res['header']);
            $lt = explode("=",$location)[1];
        }
        //进行登录请求
        $post = 'username=' . $user . '&password=' . $pwd . '&mobile=&dllt=&captcha=' . $code . '&rememberMe=false&lt=' . $lt;
        $referer = $this->ApiUrl . "/iap/login/mobile.html";
        $res = $this->get_curl($this->ApiUrl . "/iap/doLogin", $post, $referer, $cookie, 1, 0, 0, 0, 1);
        $arr = json_decode($res['body'], true);
        $codelist = '[["SUCCESS", "成功"],["FAIL_UPNOTMATCH","用户名密码不匹配"],["FAIL_UPNULL", "用户名获取密码为空"], ["LT_NULL", "LT为空"], ["LT_NOTMATCH", "LT安全校验失败"], ["CAPTCHA_NOTMATCH", "验证码不匹配"], ["USER_FREEZED", "用户冻结"], ["USER_STOPPED", "用户停用"], ["CAMPUS_UNKOWNHOST", "公有云平台认证-校内认证集成提供服务域名没法解析"],["CAMPUS_TIMEOUT", "公有云平台认证-校内认证集成提供服务连接超时或者响应超时"], ["UNIQUE_CONFLICT", "账号和考生号冲突,请检查数据!"], ["ERROR", "程序发生错误"], ["REDIRECT", "重定向"], ["NO_AUTH", "没有权限"], ["NEW_ORIGINAL_PASS_SAME", "新密码不能与最近一次密码一致"],["TOKEN_NULL", "token为空"], ["TOKEN_EXPIRE", " token过期、或者token匹配不正确"], ["ORIGINAL_PASS_FAIL", "原密码校验失败"], ["NEW_PASS_NOTRULE", "新密码密码规则不达标"], ["FORCE_PASS_FAIL", "强制修改密码失败"], ["SOCIAL_LOGIN_FAIL", "社交账号绑定登录失败"],["SOCIAL_LOGIN_EXIST", "社交账号已被绑定"], ["MOBILE_CAPTCHA_NOTMATCH", "手机验证码不匹配"], ["MOBILE_BINDING_ERROR", "手机号绑定异常"], ["ACCOUNT_ALREADY_BINDING_MOBILE", "该账户已经绑定手机号"]]';
        $codearr = json_decode($codelist, true);
        $newarr = array();
        foreach ($codearr as $key) {
            $newarr[$key[0]] = $key[1];
        }
        if ($res['body'] == '') {
            //进行重定向
            $cookie .= $this->GetCookie($res['header']);
            $referer = $this->ApiUrl . "/iap/login/mobile.html";
            $url = $this->ApiUrl . "/iap/login?service=" . urlencode($this->ApiUrl) . "%2Fportal%2Flogin";
            $res = $this->get_curl($url, 0, $referer, $cookie, 1, 0, 0, 0, 1);
            //获取Ticket重定向
            $ticket = $this->GetLocation($res['header']);
            $ret = $this->get_curl($ticket, 0, 0, 0, 1);
            $cookie = $this->GetCookie($ret, true);
            return array('code' => 1, 'msg' => '登陆成功!', 'cookie' => $cookie);
        } elseif ($arr['resultCode'] == 'CAPTCHA_NOTMATCH') {
            return array('code' => 2, 'msg' => '需要验证码', 'verfy' => $lt, 'cookie' => $cookie, 'captcha' => $this->ApiUrl . '/iap/generateCaptcha?ltId=' . $lt);
        }
        return array('code' => 0, 'msg' => $newarr[$arr['resultCode']]);
    }

    /**
     * 获取正在进行问卷数据
     * @param Int $pageSize 分页容量
     * @param Int $pageNumber 页码
     * @param Mixed cookies失效|数据集
     */
    public function GetProcessingList($pageSize = 99999, $pageNumber = 1)
    {
        $url = $this->ApiUrl . '/wec-counselor-collector-apps/stu/collector/queryCollectorProcessingList';
        $post = '{"pageSize":"' . $pageSize . '","pageNumber":"' . $pageNumber . '"}';
        $res = $this->get_curl($url, $post, 0, $this->cookies, 0, 0, 0, 1);
        $arr = json_decode($res, true);
        if (empty($arr) || (isset($arr['datas']['WEC-HASLOGIN']) && !$arr['datas']['WEC-HASLOGIN'])) {
            return false;
        }
        return $arr['datas']['rows'];
    }

    /**
     * 获取已经填写的问卷数据
     * @param Int $pageSize 分页容量
     * @param Int $pageNumber 页码
     * @param Mixed cookies失效|数据集
     */
    public function GetHistoryList($pageSize = 99999, $pageNumber = 1)
    {
        $url = $this->ApiUrl . '/wec-counselor-collector-apps/stu/collector/queryCollectorHistoryList';
        $post = '{"pageSize":"' . $pageSize . '","pageNumber":"' . $pageNumber . '"}';
        $res = $this->get_curl($url, $post, 0, $this->cookies, 0, 0, 0, 1);
        $arr = json_decode($res, true);
        if (empty($arr) || (isset($arr['datas']['WEC-HASLOGIN']) && !$arr['datas']['WEC-HASLOGIN'])) {
            return false;
        }
        return $arr['datas']['rows'];
    }

    /**
     * 获取问卷信息
     * @param Int $collectorWid 问卷ID
     * @param Mixed cookies失效|数据集
     */
    public function CollectorInfo($collectorWid)
    {
        $url = $this->ApiUrl . '/wec-counselor-collector-apps/stu/collector/detailCollector';
        $post = '{"collectorWid":"' . $collectorWid . '"}';
        $res = $this->get_curl($url, $post, 0, $this->cookies, 0, 0, 0, 1);
        $arr = json_decode($res, true);
        if (empty($arr) || (isset($arr['datas']['WEC-HASLOGIN']) && !$arr['datas']['WEC-HASLOGIN'])) {
            return false;
        }
        return $arr['datas'];
    }

    /**
     * 获取阿里云OSS信息
     * @param Mixed cookies失效|数据集
     */
    public function OssInfo()
    {
        $url = $this->ApiUrl . '/wec-counselor-collector-apps/stu/collector/getStsAccess';
        $res = $this->get_curl($url, '{}', 0, $this->cookies, 0, 0, 0, 1);
        $arr = json_decode($res, true);
        if (empty($arr) || (isset($arr['datas']['WEC-HASLOGIN']) && !$arr['datas']['WEC-HASLOGIN'])) {
            return false;
        }
        return $arr['datas'];
    }

    /**
     * 获取问卷表单信息
     * @param Int $collectorWid 问卷ID
     * @param Int $formWid 表单ID
     * @param Mixed cookies失效|数据集
     */
    public function FormFields($collectorWid, $formWid)
    {
        $url = $this->ApiUrl . '/wec-counselor-collector-apps/stu/collector/getFormFields';
        $post = '{"collectorWid":"' . $collectorWid . '","formWid":"' . $formWid . '"}';
        $res = $this->get_curl($url, $post, 0, $this->cookies, 0, 0, 0, 1);
        $arr = json_decode($res, true);
        if (empty($arr) || (isset($arr['datas']['WEC-HASLOGIN']) && !$arr['datas']['WEC-HASLOGIN'])) {
            return false;
        }
        return $arr['datas'];
    }

    /**
     * 提交问卷表单信息
     * @param Int $collectorWid 问卷ID
     * @param Int $formWid 表单ID
     * @param Int $schoolTaskWid 学校任务ID
     * @param Array $fields 表单内容
     * @param String $address 地点
     * @return Mixed 数据集
     */
    public function SubmitForm($collectWid, $formWid, $schoolTaskWid, $fields = array(), $address = "定位失败")
    {
        $url = $this->ApiUrl . '/wec-counselor-collector-apps/stu/collector/submitForm';
        $post = json_encode(array(
            'formWid' => $formWid,
            'address' => $address,
            'collectWid' => $collectWid,
            'schoolTaskWid' => $schoolTaskWid,
            'form' => $fields
        ));
        $res = $this->get_curl($url, $post, 0, $this->cookies, 0, 0, 0, 1);
        $arr = json_decode($res, true);
        if (empty($arr) || (isset($arr['datas']['WEC-HASLOGIN']) && !$arr['datas']['WEC-HASLOGIN'])) {
            return false;
        }
        return $arr;
    }

    /**
     * 提交所有未填写的问卷
     */
    public function SubmitAllForms()
    {
        $list = $this->GetProcessingList();
        $return = array();
        foreach ($list as $key) {
            $arr = $this->CollectorInfo($key['wid']);
            $wid = $arr['collector']['wid'];
            $formWid = $arr['collector']['formWid'];
            $schoolTaskWid = $arr['collector']['schoolTaskWid'];
            $forminfo = $this->FormFields($wid, $formWid);
            $form = array();
            foreach ($forminfo['rows'] as $key2 => $value) {
                if (!isset($value['fieldItems'])) {
                    continue;
                }
                $temp = array();
                foreach ($value['fieldItems'] as $key3) {
                    if (!isset($key3['isSelected'])||$key3['isSelected']!=1) {
                        continue;
                    }
                    $temp = $key3;
                }
                if (!empty($temp)) {
                    $value['fieldItems'] = array($temp);
                    $form[] = $value;
                }
            }
            $return[] = $this->SubmitForm($wid, $formWid, $schoolTaskWid, $form);
        }
        return $return;
    }

    /**
     * 获取今日任务列表
     * @return Mixed false|数据集
     */
    public function TodayTasks()
    {
        $url = $this->ApiUrl . '/wec-counselor-sign-apps/stu/sign/getStuSignInfosInOneDay';
        $post = '{}';
        $res = $this->get_curl($url, $post, 0, $this->cookies, 0, 0, 0, 1);
        $arr = json_decode($res, true);
        if (empty($arr) || (isset($arr['datas']['WEC-HASLOGIN']) && !$arr['datas']['WEC-HASLOGIN'])) {
            return false;
        }
        return $arr['datas'];
    }

    /**
     * 获取签到任务信息
     * @param Int $signInstanceWid 签到实例ID
     * @param Int $signWid 签到任务ID
     * @return Mixed false|数据集
     */
    public function SignTaskInfo($signInstanceWid, $signWid)
    {
        $url = $this->ApiUrl . '/wec-counselor-sign-apps/stu/sign/detailSignInstance';
        $post = json_encode(array(
            'signInstanceWid' => $signInstanceWid,
            'signWid' => $signWid
        ));
        $res = $this->get_curl($url, $post, 0, $this->cookies, 0, 0, 0, 1);
        $arr = json_decode($res, true);
        if (empty($arr) || (isset($arr['datas']['WEC-HASLOGIN']) && !$arr['datas']['WEC-HASLOGIN'])) {
            return false;
        }
        return $arr['datas'];
    }

    /**
     * 提交签到
     * @param Int $wid 签到任务ID
     * @param Float $longitude 精度
     * @param Float $latitude 纬度
     * @param String $abnormalReason 补充原因
     * @param String $signPhotoUrl 图片地址
     * @param String $position 位置
     * @return Mixed 数据集
     */
    public function submitSign($wid, $longitude, $latitude, $abnormalReason = "", $signPhotoUrl = "", $position = "定位失败")
    {
        $url = $this->ApiUrl . '/wec-counselor-sign-apps/stu/sign/submitSign';
        $post = json_encode(array(
            'signInstanceWid' => $wid,
            'longitude' => $longitude,
            'latitude' => $latitude,
            'isMalposition' => 1,
            'abnormalReason' => $abnormalReason,
            'signPhotoUrl' => $signPhotoUrl,
            'position' => $position
        ));
        $res = $this->get_curl($url, $post, 0, $this->cookies, 0, 0, 0, 1);
        $arr = json_decode($res, true);
        if (empty($arr) || (isset($arr['datas']['WEC-HASLOGIN']) && !$arr['datas']['WEC-HASLOGIN'])) {
            return false;
        }
        return $arr['datas'];
    }

    /**
     * 返回cookie
     * @param String $header 头部信息
     * @param Bolean $array 是否数组输出
     * @return Mixed 数据集
     */
    private function GetCookie($header, $array = false)
    {
        preg_match_all('/Set-Cookie: (.*?);/iU', $header, $matchs);
        $cookie = '';
        $cookies = array();
        foreach ($matchs[1] as $val) {
            if (substr($val, -1) == '=') continue;
            $cookie .= $val . '; ';
            $temp = explode("=", explode(";", $val)[0]);
            $cookies[$temp[0]] = $temp[1];
        }
        if ($array) {
            return $cookies;
        }
        return $cookie;
    }
    /**
     * 返回重定向
     * @param String $header 头部信息
     * @return String 数据
     */
    private function GetLocation($header){
        $location = substr($header, strpos($header, "Location: "));
        $location = trim(str_replace(array("Location:"), "", $location));
        return $location;
    }

    /**
     * Curl get post请求
     * @param String $url 网址
     * @param String $post POST参数
     * @param String $referer refer地址
     * @param String $cookie 携带COOKIE
     * @param String $header 请求头
     * @param String $ua User-agent
     * @param String $nobaody 重定向
     * @return String 数据
     */
    private function get_curl($url, $post = 0, $referer = 0, $cookie = 0, $header = 0, $ua = 0, $nobaody = 0, $json = 0, $split = 0)
    {
        if ($this->loginapi) return $this->get_curl_proxy($url, $post, $referer, $cookie, $header, $ua, $nobaody);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $httpheader[] = "Accept:*/*";
        $httpheader[] = "Accept-Encoding: gzip,deflate,sdch";
        $httpheader[] = "Accept-Language: zh-CN,zh;q=0.8";
        $httpheader[] = "Connection: keep-alive";
        if ($json) {
            $httpheader[] = "Content-Type: application/json";
        }
        curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
        if ($post) {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        }
        if ($header) {
            curl_setopt($ch, CURLOPT_HEADER, TRUE);
        }
        if ($cookie) {
            curl_setopt($ch, CURLOPT_COOKIE, $cookie);
        }
        if ($referer) {
            curl_setopt($ch, CURLOPT_REFERER, $referer);
        }
        if ($ua) {
            curl_setopt($ch, CURLOPT_USERAGENT, $ua);
        } else {
            curl_setopt($ch, CURLOPT_USERAGENT, $this->ua);
        }
        if ($nobaody) {
            curl_setopt($ch, CURLOPT_NOBODY, 1);
        }
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_ENCODING, "gzip");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $ret = curl_exec($ch);
        if ($split) {
            $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
            $header = substr($ret, 0, $headerSize);
            $body = substr($ret, $headerSize);
            $ret = array();
            $ret['header'] = $header;
            $ret['body'] = $body;
        }
        curl_close($ch);
        return $ret;
    }

    /**
     * Curl 代理 get post请求
     * @param String $url 网址
     * @param String $post POST参数
     * @param String $referer refer地址
     * @param String $cookie 携带COOKIE
     * @param String $header 请求头
     * @param String $ua User-agent
     * @param String $nobaody 重定向
     * @return String 数据
     */
    private function get_curl_proxy($url, $post = 0, $referer = 0, $cookie = 0, $header = 0, $ua = 0, $nobaody = 0)
    {
        $data = array('url' => $url, 'post' => $post, 'referer' => $referer, 'cookie' => $cookie, 'header' => $header, 'ua' => $ua, 'nobaody' => $nobaody);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_URL, $this->loginapi);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $ret = curl_exec($ch);
        curl_close($ch);
        return $ret;
    }
}
$test = new CpDaily();
$arr = $test->Login("*******","*******");
if($arr['code']==1){
    $test->SetCookie($arr['cookie']);
    $arr = $test->SubmitAllForms();
}

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
  101. 101
  102. 102
  103. 103
  104. 104
  105. 105
  106. 106
  107. 107
  108. 108
  109. 109
  110. 110
  111. 111
  112. 112
  113. 113
  114. 114
  115. 115
  116. 116
  117. 117
  118. 118
  119. 119
  120. 120
  121. 121
  122. 122
  123. 123
  124. 124
  125. 125
  126. 126
  127. 127
  128. 128
  129. 129
  130. 130
  131. 131
  132. 132
  133. 133
  134. 134
  135. 135
  136. 136
  137. 137
  138. 138
  139. 139
  140. 140
  141. 141
  142. 142
  143. 143
  144. 144
  145. 145
  146. 146
  147. 147
  148. 148
  149. 149
  150. 150
  151. 151
  152. 152
  153. 153
  154. 154
  155. 155
  156. 156
  157. 157
  158. 158
  159. 159
  160. 160
  161. 161
  162. 162
  163. 163
  164. 164
  165. 165
  166. 166
  167. 167
  168. 168
  169. 169
  170. 170
  171. 171
  172. 172
  173. 173
  174. 174
  175. 175
  176. 176
  177. 177
  178. 178
  179. 179
  180. 180
  181. 181
  182. 182
  183. 183
  184. 184
  185. 185
  186. 186
  187. 187
  188. 188
  189. 189
  190. 190
  191. 191
  192. 192
  193. 193
  194. 194
  195. 195
  196. 196
  197. 197
  198. 198
  199. 199
  200. 200
  201. 201
  202. 202
  203. 203
  204. 204
  205. 205
  206. 206
  207. 207
  208. 208
  209. 209
  210. 210
  211. 211
  212. 212
  213. 213
  214. 214
  215. 215
  216. 216
  217. 217
  218. 218
  219. 219
  220. 220
  221. 221
  222. 222
  223. 223
  224. 224
  225. 225
  226. 226
  227. 227
  228. 228
  229. 229
  230. 230
  231. 231
  232. 232
  233. 233
  234. 234
  235. 235
  236. 236
  237. 237
  238. 238
  239. 239
  240. 240
  241. 241
  242. 242
  243. 243
  244. 244
  245. 245
  246. 246
  247. 247
  248. 248
  249. 249
  250. 250
  251. 251
  252. 252
  253. 253
  254. 254
  255. 255
  256. 256
  257. 257
  258. 258
  259. 259
  260. 260
  261. 261
  262. 262
  263. 263
  264. 264
  265. 265
  266. 266
  267. 267
  268. 268
  269. 269
  270. 270
  271. 271
  272. 272
  273. 273
  274. 274
  275. 275
  276. 276
  277. 277
  278. 278
  279. 279
  280. 280
  281. 281
  282. 282
  283. 283
  284. 284
  285. 285
  286. 286
  287. 287
  288. 288
  289. 289
  290. 290
  291. 291
  292. 292
  293. 293
  294. 294
  295. 295
  296. 296
  297. 297
  298. 298
  299. 299
  300. 300
  301. 301
  302. 302
  303. 303
  304. 304
  305. 305
  306. 306
  307. 307
  308. 308
  309. 309
  310. 310
  311. 311
  312. 312
  313. 313
  314. 314
  315. 315
  316. 316
  317. 317
  318. 318
  319. 319
  320. 320
  321. 321
  322. 322
  323. 323
  324. 324
  325. 325
  326. 326
  327. 327
  328. 328
  329. 329
  330. 330
  331. 331
  332. 332
  333. 333
  334. 334
  335. 335
  336. 336
  337. 337
  338. 338
  339. 339
  340. 340
  341. 341
  342. 342
  343. 343
  344. 344
  345. 345
  346. 346
  347. 347
  348. 348
  349. 349
  350. 350
  351. 351
  352. 352
  353. 353
  354. 354
  355. 355
  356. 356
  357. 357
  358. 358
  359. 359
  360. 360
  361. 361
  362. 362
  363. 363
  364. 364
  365. 365
  366. 366
  367. 367
  368. 368
  369. 369
  370. 370
  371. 371
  372. 372
  373. 373
  374. 374
  375. 375
  376. 376
  377. 377
  378. 378
  379. 379
  380. 380
  381. 381
  382. 382
  383. 383
  384. 384
  385. 385
  386. 386
  387. 387
  388. 388
  389. 389
  390. 390
  391. 391
  392. 392
  393. 393
  394. 394
  395. 395
  396. 396
  397. 397
  398. 398
  399. 399
  400. 400
  401. 401
  402. 402
  403. 403
  404. 404
  405. 405
  406. 406
  407. 407
  408. 408
  409. 409
  410. 410
  411. 411
  412. 412
  413. 413
  414. 414
  415. 415
  416. 416
  417. 417
  418. 418
  419. 419
  420. 420
  421. 421
  422. 422
  423. 423
  424. 424
  425. 425
  426. 426
  427. 427
  428. 428
  429. 429
  430. 430
  431. 431
  432. 432
  433. 433
  434. 434
  435. 435
  436. 436
  437. 437
  438. 438
  439. 439
  440. 440
  441. 441
  442. 442
  443. 443
  444. 444
  445. 445
  446. 446
  447. 447
  448. 448
  449. 449
  450. 450
  451. 451
  452. 452
  453. 453
  454. 454
  455. 455
  456. 456
  457. 457
  458. 458
  459. 459
  460. 460
  461. 461
  462. 462
  463. 463
  464. 464
  465. 465
  466. 466
  467. 467
  468. 468
  469. 469

结语

至此,app协议已经全部实现出来了,现在90%的app都是http传输,在安全性方面是落后于socket传输的,想了解socket通信的可以看我QQ登陆代码示例!至于自动签到网,后期实现!

网站实现

自动化网址已开发完成,每日可自动进行任务。前往

如本文“对您有用”,欢迎随意打赏作者,让我们坚持创作!

40 打赏
评论 (5,493)

回复给 点击这里取消回复。

欢迎您 游客  

  • Скачать песню Almond – Ты Слишком Близко бесплатно в mp3
    Almond – Ты Слишком Близко

    1年前
    回复
  • Украинские Хиты – Мята – А В Україні скачать песню бесплатно на телефон и слушать онлайн в mp3
    Украинские Хиты – Мята – А В Україні

    1年前
    回复
  • Би-2 – Большие Города скачать песню бесплатно в mp3 и слушать онлайн
    Би-2 – Большие Города

    1年前
    回复
  • Фіолет – Два Світи скачать бесплатно песню и слушать онлайн в mp3
    Фіолет – Два Світи

    1年前
    回复
  • Олег Винник – Вовчиця скачать песню в mp3 и слушать онлайн бесплатно
    Олег Винник – Вовчиця

    1年前
    回复
  • Мари Краймбрери – Самолёт скачать бесплатно песню в mp3
    Мари Краймбрери – Самолёт

    1年前
    回复
  • Скачать песню Коршулик – Волны бесплатно в mp3
    Коршулик – Волны

    1年前
    回复
  • Музыка В Машину 2024 – Olivia Addams – Fool Me Once скачать песню бесплатно на телефон и слушать онлайн в mp3
    Музыка В Машину 2024 – Olivia Addams – Fool Me Once

    1年前
    回复
  • Loverboy Vo – 1000 Forevers скачать песню бесплатно в mp3 и слушать онлайн
    Loverboy Vo – 1000 Forevers

    1年前
    回复
  • Джая Миядзаки – Хаяо скачать бесплатно песню и слушать онлайн в mp3
    Джая Миядзаки – Хаяо

    1年前
    回复
  • Pierre Lapointe – Le Monarque Des Indes скачать песню в mp3 и слушать онлайн бесплатно
    Pierre Lapointe – Le Monarque Des Indes

    1年前
    回复
  • Kozak System – Баста скачать бесплатно песню в mp3
    Kozak System – Баста

    1年前
    回复
  • Скачать песню Budni – Сто Страниц бесплатно в mp3
    Budni – Сто Страниц

    1年前
    回复
  • Украинские Хиты – Grosu – Звичка скачать песню бесплатно на телефон и слушать онлайн в mp3
    Украинские Хиты – Grosu – Звичка

    1年前
    回复
  • http://sujok-forum.ru/forum/viewtopic.php?p=46874#46874

    1年前
    回复
  • http://www.tamboff.ru/forum/viewtopic.php?p=7690694#7690694

    1年前
    回复
  • http://kefirniygrib.7bb.ru/viewtopic.php?id=11167#p23710

    1年前
    回复
  • https://wiki.evil-admin.com/index.php?title=User:LillaGillen7658

    1年前
    回复
  • http://sdm-servis.ru/component/fireboard/?func=view&catid=5&id=67627#67627

    1年前
    回复
  • http://bondpedia.altervista.org/index.php?title=Utente:KirstenBerryman

    1年前
    回复
  • http://piter.bbcity.ru/viewtopic.php?id=10613#p27864

    1年前
    回复
  • http://newropsha.ru/viewtopic.php?f=15&t=8926

    1年前
    回复
  • https://wifidb.science/wiki/Mp3bit.pw_2

    1年前
    回复
  • http://pirat.iboards.ru/viewtopic.php?f=20&t=16387

    1年前
    回复
  • https://infodin.com.br/index.php/User:ChasWhitmer5

    1年前
    回复
  • https://projectforum.liveforums.ru/viewtopic.php?id=802#p40528

    1年前
    回复
  • http://ford-talks.ru/viewtopic.php?f=20&t=3642

    1年前
    回复
  • http://wiki.intradition.ru/index.php/%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%B0%D1%83%D0%B4%D0%B8%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%BE%D0%B2:%D0%9E%D1%82%D0%B2%D0%B8%D0%BD%D0%B8%D0%BB%D0%B0_%D0%B4%D0%BE_%D1%81%D1%82%D1%80%D0%B8%D0%BC%D0%B8%D0%BD%D0%B3%D0%B0

    1年前
    回复
  • https://championsleage.review/wiki/Mp3bit.pw

    1年前
    回复
  • https://pipewiki.org/app/index.php/User:LeathaHooton41

    1年前
    回复
1 2 3 4 … 183
流逝中沉沦
12文章 50928评论 1470点赞 4063461浏览

随机文章
SinKingMusic免费开放使用
5年前
SinKingPHP个人MVC框架
5年前
QQWeb登陆P值算法
5年前
c#模拟QQ空间访问
5年前
归来仍是少年
5年前
最新评论
+376
网站留言
Copyright © 2025 网站备案号: 皖ICP备18022767号-3
沉沦云网络. SinKingCloud
主页
页面
  • 个人技术栈
  • 留言
博主
流逝中沉沦
流逝中沉沦 管理员
一个热爱生活热爱技术的00后少年
12 文章 50928 评论 4063461 浏览
测试
测试

主题风格 设置选项


布局
背景颜色
背景渐变
背景图片
微信 QQ空间 QQ好友 新浪微博

“扫一扫”分享到微信

赞赏作者

请通过微信、支付宝 APP 扫一扫

感谢您对作者的支持!

 支付宝 微信支付