集大通100%任务完成度签到

Posted newbeefly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集大通100%任务完成度签到相关的知识,希望对你有一定的参考价值。

一、前言

本文章将讲述 我如何一步一步的用python写一个自己学校的社交app的签到程序,
由于学校的app签到和任务是获得等级经验的唯一途径,而等级的提升可以获得抽奖的资格
,然而脸黑的我始终没有得到一个实物的奖励,气愤而又懒惰激发了程序员的本能用python写了
一个小脚本 挂在服务器上 实现了自动签到,好了 话不多说 

二、基本环境和工具

python2.7环境 、 python编辑器(pycharm ) Charles(抓包工具) 安卓模拟器(本次使用夜神)

三、分析

本次签到的原理是 模拟手机发送信息实现签到的功能。据我们所知签到无非就是一次请求发送
和一个响应回馈,那么我们就需要得到请求的地址和请求的数据,可是手机app我们无法直接的
或者间接的像浏览器一样获取这些信息,因此我们需要夜神(安卓模拟器)和Charles(抓包工
具)来得到这些。这里我将不给出这些工具的配置过程自己百度。
①登陆

技术分享图片
点击登陆抓取数据包
技术分享图片
我们可以很容易的在里面得到这样一条url:https://oa99.jmu.edu.cn/v2/passport/api/user/login1
这条就是登陆账号密码的地址,而却我们可以从它的请求中看到它是以Json格式进行传输的格式如下:

{
"flag": 1,
"unitid": 55,
"encrypt": 1,
"imgcode": "",
"account": "账号",
"appid": "273",
"password": "你的密码加密部分",
"clientinfo": "{"systype":"android","platform":30,"appid":"273","devicetype":"N8010","sysver":"4.4","platformver":"2.3.0","deviceid":"352419010446017"}",
"blowfish": "c7591f0b-d814-4e5b-80ae-cf6675e37c69"
}

经过简单的分析我们可以知道这里面附带了包括账号密码和客户端等信息,由于加密方式不知 所以这
这个数据包是我们主要抓取的。
在观察它的返回信息:

{
"sid": "cookie的值",
"unitid": 55,
"uid": 135348,
"type": 2,
"pwdtime": null,
"bind_uap_account": "paticipant",
"ticket": "门票顾名思义它可能作为免密登陆的凭证"
}

分析这个返回信息它也是json格式通过比较 我们发现 sid 就是他的cookie的值 sid将在送花的
环节起到关键的作用 还ticket 我可以大胆的推测它是免密登陆的凭证 但是由于还要测试他的时效
所以这个暂时不管,以后有空在研究。
做到这里我们就可以写第一部分代码:

import urllib
import urllib2,cookielib
import json
import ssl
import time

ssl._create_default_https_context = ssl._create_unverified_context#取消证书认证
def http_post(openner):
    url = ‘https://oa99.jmu.edu.cn/v2/passport/api/user/login1‘
    values = {
    "flag": 1,
    "unitid": 55,
    "encrypt": 1,
    "imgcode": "",
    "account": "201521122039需要改",
    "appid": "273",
    "password": "秘密 改成自己的",
    "clientinfo": "{"systype":"android","platform":30,"appid":"273","devicetype":"N8010","sysver":"4.4","platformver":"2.3.0","deviceid":"352419010446017"}",
    "blowfish": "fd90991f-8fa9-4ab9-836d-6f41b50ebfb8"
}
    jdata = json.dumps(values)  # 对数据进行JSON格式化编码
    req = urllib2.Request(url, jdata)  # 生成页面请求的完整数据
    response = opener.open(req)  # 发送页面请求
    return response.read()  # 获取服务器返回的页面信息
cj = cookielib.CookieJar()
opener =urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
resp = http_post(opener)

由于python2.7的请求需要证书认证所以在程序的开头 要取消认证需求 这里的用到cookiejar 是
由于要保持登陆的状态下完成签到这里需要cookie的存在 不能简单的进行请求操作 而cookiejar能
实现这个需求。上述的代码就实现登陆获取cookie的操作。

②签到实现

点击签到一天就一次别手抖了 没抓到
技术分享图片
然而签到却更加简单只要请求一下地址不需要数据
技术分享图片
在记录签到的地址:https://oa99.jmu.edu.cn/ajax/sign/usersign
代码就很容易:

 Json_post(opener,Qiandao_url,{})
③生日祝福

点击祝福
技术分享图片
查看数据包
技术分享图片
发现这也是一个简单的请求 并没有数据需求
观察反馈信息发现 发返回一个列表里面有今天生日人的信息
那么随便祝福一位同学:
技术分享图片
发现它只要在请求里携带 生日人的 uid 即可 uid 我们要在上面的请求 用正则表达式获取
url:https://oa99.jmu.edu.cn/ajax/birthday/bless
代码:
技术分享图片
代码里通过 获取生日列表里的uid 然后祝福前5名同学(任务为三名)

④送花

点击送玫瑰花 观察
技术分享图片
发现地址换了
技术分享图片
地址:https://wp.jmu.edu.cn/itemc/useitem?cuid=我的uid&sid=我的cookie
分析的结果如上 此时 sid 和uid 就必须事先保存了 需要正则提取response
代码如下:
技术分享图片
技术分享图片
这里避免尴尬 毕竟送花嘛 我就制定送给舍友了 tuid 送的人的uid

最后一一部很关键 就是领取奖励了 别人的号打码一下:
技术分享图片
技术分享图片
获取url和json
https://oa99.jmu.edu.cn/ajax/score/receivescore
祝福

json {
"itemcode": "BIRTHBLESS"
}

送花的领取

json 
{
"itemcode": "FLOWER"
}

四、完结

基本过程就是如此源码将上传git  建议自己实现 
下附成果

注意 注意 代码 在这

技术分享图片











































以上是关于集大通100%任务完成度签到的主要内容,如果未能解决你的问题,请参考以下文章

软件工程网络15个人作业3——案例分析

实现一个app的签到功能,没你想的那么复杂~

sqa

个人作业2——集大通APP案例分析

软件工程网络15个人作业3(201521123010徐璐琳)

算法竞赛入门码蹄集进阶塔335题(MT3330-3335)