本文来源吾爱破解论坛
本帖最后由 syszt 于 2019-5-5 15:27 编辑
通过抓包、脱壳、逆向分析湖南干教App,获取了post参数中的jytoken的加密算法,完成了自动学习的python代码:
应要求分享打包后的exe文件(已更新为支持64位和32位系统的版本):链接:https://pan.baidu.com/s/1xwtBNpWYd81Gor-GRkcckQ 提取码:cz2o
[Python] 纯文本查看 复制代码
import requests import time import hashlib import random url = 'http://app.hngbjy.com/api/mobile/default.aspx' def get_jytoken(*args): appid = 'jyzxapp' privateKey = 'jyapp@001!' version = '20181101' datatime = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) s = privateKey + "&" + appid + "&" + datatime + "&" + version + "&" + "&".join(args) md = hashlib.md5() md.update(s.encode()) md5str = md.hexdigest() s = md5str + "&" + appid + "&" + datatime + "&" + version + "&" + "&".join(args) jytoken = ''.join('{:2X}'.format(ord(i)) for i in s) return jytoken def get_CourseInfoList(userid, pagecount, page): data = { 'method': 'getCourseInfoList', 'channelname': '全部课程', 'UserID': userid, 'PageCount': pagecount, 'Page': page, 'Keyword': '', 'Portal': '1' } response = requests.post(url, data=data).json() courselist = response['CourseInfoList'] return courselist def add_course(userid, coursenumber, jytoken): data = { 'method': 'UpdateUserCourse', 'userid': userid, 'coursenumber': coursenumber, 'AddAndDel': 'add', 'jytoken': jytoken } response = requests.post(url, data=data).json() return response def upload_timenode(userid, coursenumber, timenode, jytoken): data = { 'method': 'UploadTimeNode', 'userid': userid, 'coursenumber': coursenumber, 'timenode': timenode, 'jytoken': jytoken } response = requests.post(url, data).json() return response def get_timenode(): timenode = random.randrange(300000, 320000, 1) timenode = '%06d' % timenode return timenode if __name__ == '__main__': userid = input('请输入用户ID:') pagecount = 700 page = 1 courselist = [i for i in get_CourseInfoList(userid, pagecount, page) if float(i['Credit_hour']) >= 1] coursecount = len(courselist) selenumber = random.randrange(60, coursecount) print('-----------------找到学分大于1.0的课程:{}个,选择{}个开始学习-----------------'.format(coursecount, selenumber)) print() starttime = time.time() for i, course in enumerate(courselist[:selenumber]): coursenumber = course['Course_Number'] print('{}、正在学习的课程:{}'.format(i + 1, course['Course_Name'])) # 选课 jytoken = get_jytoken(userid, coursenumber) print('\t选课返回值:', add_course(userid, coursenumber, jytoken)) # 完成学习 timenode = get_timenode() jytoken = get_jytoken(userid, coursenumber, timenode) print('\t提交完成学习进度的返回值:', upload_timenode(userid, coursenumber, timenode, jytoken)) print() print('学习总用时:{:.2f}秒'.format((time.time() - starttime)))
版权声明:
本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。
- 上一篇: 树莓派第二课之JQC-3FF继电器-四行代码控制家里电源
- 下一篇: 从图片提取经纬度简易版