洪水 发表于 2022-1-3 14:44:35

关于写答题脚本的一些问题

本帖最后由 洪水 于 2022-1-3 14:52 编辑

想写一个简道云里面自动答题的脚本,我目前是打算用python写的,但是因为是新手所以有好多问题,想要请教一下哥哥们。

比如说这里的自拍照被设置了只能拍照上传,没有办法上传图片,想知道有没有破解的办法

李恒道 发表于 2022-1-3 16:09:01

既然是用python写了,直接抓出来包分析一下加密,python进行post不就可以了

Ne-21 发表于 2022-1-3 16:28:39

抓包看图片上传接口,解密,再用python实现本地图片上传

Ne-21 发表于 2022-1-3 16:31:42

如果有微信小程序,我觉得可以直接反编译来看看他这部分的代码,当然是要没有加密,加密可能就有难度了

洪水 发表于 2022-1-3 21:36:34

谢谢哥哥们

陈公子的话 发表于 2022-1-3 22:39:19

协议                  

洪水 发表于 2022-1-5 22:15:07

Ne-21 发表于 2022-1-3 16:31
如果有微信小程序,我觉得可以直接反编译来看看他这部分的代码,当然是要没有加密,加密可能就有难度了 ...

之前在学校里用过你写的国安秒过小助手,感觉跟我要写的这个是一个类型的,可以看看你的那个源码吗?想要参考参考

Ne-21 发表于 2022-1-6 10:04:26

本帖最后由 Ne-21 于 2022-1-6 10:05 编辑

```py
import requests
import random
import json

userInfo = {}
schoolList = []
answer = [
    {'number': 66, 'answer': 'C'},
    {'number': 329, 'answer': 'D'},
    {'number': 466, 'answer': 'D'},
    {'number': 171, 'answer': 'A'},
    {'number': 414, 'answer': 'A'},
    {'number': 242, 'answer': 'C'},
    {'number': 422, 'answer': 'B'},
    {'number': 529, 'answer': 'ABCD'},
    {'number': 599, 'answer': 'ABC'},
    {'number': 654, 'answer': 'ABCD'},
    {'number': 694, 'answer': 'ABCD'},
    {'number': 548, 'answer': 'CD'},
    {'number': 553, 'answer': 'ABD'},
    {'number': 1020, 'answer': 'B'},
    {'number': 1046, 'answer': 'A'},
    {'number': 880, 'answer': 'B'},
    {'number': 1079, 'answer': 'B'},
    {'number': 920, 'answer': 'A'},
    {'number': 830, 'answer': 'B'},
    {'number': 1049, 'answer': 'A'}
]
s = requests.Session()
headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,'
            'application/signed-exchange;v=b3;q=0.9',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'Connection': 'keep-alive',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.34 '
}


def getSchoolList():
    global schoolList
    url = "https://haedu-2021.oss-cn-beijing.aliyuncs.com/gjaqzsjs/competition/unit.json"
    res = s.get(url, headers=headers)
    schoolList = res.json()


def getSchoolId(school):
    if school == "":
      return -1
    for i in schoolList:
      if i.get('char') == school:
            return i.get('code')
      else:
            pass
    return -1


def login(unit_code: int, student_id: str, password: str):
    global userInfo
    login_url = "http://gjaqzsjs.haedu.cn/Login/auth"
    data = {
      'unit_code': unit_code,
      'student_id': student_id,# 12345678,
      'password': password,# 12345678
    }
    res = s.post(login_url, data=data, headers=headers)
    res = res.json()
    if res.get('msg') != 'SUCCESS':
      print(res.mag)
      return False
    else:
      userInfo = res.get('data')
      print('登录状态:', res.get('msg'))
      print(userInfo)
      return True


def getExamData():
    global exam_paper_data
    exam_url = 'http://gjaqzsjs.haedu.cn/Answer/getQuestionLists'
    res = s.post(exam_url, headers=headers)
    res = res.json()
    if res.get('code') == 2000:
      print('获取试卷成功')
      exam_paper_data = res.get('data')
      submit()
    else:
      print('获取试卷失败')
      print(res)


def submit():
    global answer
    sub_url = 'http://gjaqzsjs.haedu.cn/Answer/submitAnswer'
    data = {
      'answer': json.dumps(answer),
      'use_time': random.randint(500, 550)
    }
    res = s.post(sub_url, data=data, headers=headers)
    print(res.json())
    print("答案提交成功,请登录网页查看成绩!")


if __name__ == '__main__':
    getSchoolList()
    print("""
    -------------欢迎使用安全知识竞赛助手,请使用账号密码登录。
            ---- 油猴中文网:https://bbs.tampermonkey.net.cn/?fromuser=Ne-21
            ---- 作者: Ne-21
            ---- 交流群:171221220
    ------------- 学习交流使用,请勿用于商业用途。
    """)
    while 1:
      school = input('请输入学校名:')
      unit_code = getSchoolId(school)
      if unit_code == -1:
            print("学校不存在,请重新输入!")
            continue
      else:
            break
    student_id = input("请输入登录账号:")
    password = input("请输入登录密码:")
    login(unit_code, student_id, password)
    getExamData()
    input("任意键退出")

```

Ne-21 发表于 2022-1-6 10:06:23

我这个直接发数据包,你这个恐怕不行吧

Ne-21 发表于 2022-1-6 10:07:14

还是要抓包来看他提交的数据
页: [1] 2
查看完整版本: 关于写答题脚本的一些问题