问卷星(答题)协议全参数分析

查看 149|回复 11
作者:hygzs   
之前用py写的提交有点问题,这次来从头分析一下协议
这个布局排版不会,凑合看一下吧
答题和问卷的协议几乎一样
工具:edge浏览器,fiddle
使用语言:python


QQ截图20220421120331.png (86.11 KB, 下载次数: 0)
下载附件
2022-4-21 12:05 上传

为了保证所有cookies和其他缓存不会影响接下来的抓包,这里新建一个InPrivate窗口(无痕)


QQ截图20220421121046.png (40.18 KB, 下载次数: 0)
下载附件
2022-4-21 12:10 上传

这里有个小技巧
vj
的会进行debug处理但是
vm
不会,可以直接修改地址,省去一些步骤
例如:ks.wjx.top/vj/xxxxx.aspx
改成:ks.wjx.top/vm/xxxxx.aspx
先提交一次看需求的参数


QQ截图20220421121549.png (94.88 KB, 下载次数: 0)
下载附件
2022-4-21 12:16 上传

url附加参数如下
[Python] 纯文本查看 复制代码
shortid
starttime
source
submittype
ktimes
hlv
rn
jqpram
jcn
nw
jwt
jpm
t
jqnonce
jqsign
post附带的data需求参数
[Python] 纯文本查看 复制代码submitdata
我们分析参数来源当然要看参数怎么生成的,但是直接去搜索参数发现搜不到,于是查看发起程序,第一个是jq的不用看,直接点第二个jqmobo2.js


QQ截图20220421122129.png (27.65 KB, 下载次数: 0)
下载附件
2022-4-21 12:21 上传

简单获得和固定的的参数:
shortid         : ks.wjx.top/vm/
xxxxx
.aspx
starttime         : HTML页面内获取
source                : directphone
submittype        : 1
ktimes                : 操作时间 可随机
hlv                : 1
rn                : HTML页面内获取 var rndnum="
607374188.63586548
";
nw                : 1
jwt                : 4
jpm                : 70
t                : 现在时间戳
jqnonce                : HTML页面内获取 var jqnonce="
d0c9ba05-56ab-4938-9b6f-8844f114d279
";
接下来还有jqsign,jcn,jqpram 三个参数是通过加密或者运算得来的
jqsign


QQ截图20220421135900.png (104.44 KB, 下载次数: 0)
下载附件
2022-4-21 13:59 上传

通过代码观看发现,jqsign是有jqnonce经过dataenc获得,直接断点跳过去,把代码拿出来
[JavaScript] 纯文本查看 复制代码
function dataenc(a) {
    var c, d, e, b = ktimes % 10;
    for (0 == b && (b = 1),
    c = [],
    d = 0; d
函数内用到ktimes,所以我们把代码改改,把ktimes传进去
function dataenc(a,ktimes) {
    var c, d, e, b = ktimes % 10;
    for (0 == b && (b = 1),
    c = [],
    d = 0; d
QQ截图20220421135928.png (160.22 KB, 下载次数: 0)
下载附件
2022-4-21 13:59 上传

jqpram
从代码中得到 [JavaScript] 纯文本查看 复制代码window.jqParam && (w += "&jqpram=" + encodeURIComponent(jqParam)),
jqpram是通过encodeURIComponent(jqParam)
当前JS内并没有关于jqParam的来源,我们全局搜索,发现来源于一个混淆的js,用的是ob混淆
"
查阅github找到了可以通过这个来解混淆
下载好node环境,git文件,配制好系统环境后执行


QQ截图20220421142132.png (10.43 KB, 下载次数: 0)
下载附件
2022-4-21 14:21 上传



QQ截图20220421142231.png (150 KB, 下载次数: 0)
下载附件
2022-4-21 14:22 上传



QQ截图20220421142325.png (26.04 KB, 下载次数: 0)
下载附件
2022-4-21 14:23 上传

并把文件用fd映射到网页去,方便调试和了解代码,刷新网页
断点测试


QQ截图20220421142535.png (189.11 KB, 下载次数: 0)
下载附件
2022-4-21 14:25 上传

[JavaScript] 纯文本查看 复制代码
      var _0x4b9009 = rndnum["split"](".")[0]; //分隔rn 获取前置 给予_0x4b9009
      var _0x37348b = abcd1(parseInt(_0x4b9009));//abcd1处理_0x4b9009 给予_0x37348b
      var _0x307a46 = (_0x37348b + "")["split"]("");//_0x37348b 给予_0x307a46
      var _0x2f4e03 = $("#starttime")["val"]() || window["initstime"];//获取starttime 给予_0x2f4e03
      var _0x17071c = abcdu(new Date(_0x2f4e03["replace"](new RegExp("-", "gm"), "/"))); //转换时间戳通过abcdu处理 给予_0x17071c
      var _0x12e25a = _0x17071c + "";
      if (_0x17071c % 10 > 0) _0x12e25a = _0x12e25a["split"]("")["reverse"]()["join"](""); //_0x17071c%10>0 处理
      var _0x24bc24 = parseInt(_0x12e25a + "89123"); //时间戳 1650522320+89123    结果:165052232089123
      var _0x307a46 = (_0x24bc24 + "" + (_0x37348b + ""))["split"]("");//分隔上面
      var _0xd36323 = abcd4(_0x307a46, "kgESOLJUbB2fCteoQdYmXvF8j9IZs3K0i6w75VcDnG14WAyaxNqPuRlpTHMrhz");//abcd4处理_0x307a46
      var _0xc23193 = _0x24bc24 + _0x37348b + parseInt(activityId);//值得一提activityId打开页面的时候就处理了
      jqParam = abcd3(_0xc23193, _0xd36323);
      var _0x16feb7 = abcd5(jqParam);
      jqParam = _0x16feb7;
activityId        :页面获取
[JavaScript] 纯文本查看 复制代码
        function DecodeId(input) {
            return input ^ 2130030173;
        }
        var activityId =2035206417;
        activityId = DecodeId(activityId);
这里已经分析完了,然后处理一下逆向后的js发出来
[JavaScript] 纯文本查看 复制代码
function abcd1(_0xd7a12a) {
    return abcd2(_0xd7a12a, 3597397);
}
function abcd2(_0x5d3f51, _0x2da958) {
    if (!abcdx()) return;
    var _0x17fe67 = 2147483648;
    var _0x330f76 = 2147483647;
    var _0x8c2ab2 = ~~(_0x5d3f51 / _0x17fe67);
    var _0x33045d = ~~(_0x2da958 / _0x17fe67);
    var _0xa5b0b1 = _0x5d3f51 & _0x330f76;
    var _0x352369 = _0x2da958 & _0x330f76;
    var _0x3f97b8 = _0x8c2ab2 ^ _0x33045d;
    var _0x4307f8 = _0xa5b0b1 ^ _0x352369;
    return _0x3f97b8 * _0x17fe67 + _0x4307f8;
}
function abcd3(_0x2a839f, _0x29778) {
    if (_0x2a839f - 62  0) _0x12e25a = _0x12e25a["split"]("")["reverse"]()["join"](""); //_0x17071c%10>0 处理
    var _0x24bc24 = parseInt(_0x12e25a + "89123"); //时间戳 1650522320+89123    结果:165052232089123
    var _0x307a46 = (_0x24bc24 + "" + (_0x37348b + ""))["split"](""); //分隔上面
    var _0xd36323 = abcd4(_0x307a46, "kgESOLJUbB2fCteoQdYmXvF8j9IZs3K0i6w75VcDnG14WAyaxNqPuRlpTHMrhz"); //abcd4处理_0x307a46
    var _0xc23193 = _0x24bc24 + _0x37348b + parseInt(activityId); //值得一提activityId打开页面的时候就处理了
    jqParam = abcd3(_0xc23193, _0xd36323);
    var _0x16feb7 = abcd5(jqParam);
    jqParam = _0x16feb7;
    return jqParam;
}
var  rndnum = "607374188.44535993";
var  starttime = "2022/4/21 14:25:20";
var  activityId = "129722188";
console.log(_0x156205(rndnum, starttime, activityId))
至于post的参数,应该都能看懂


QQ截图20220421145836.png (29.43 KB, 下载次数: 0)
下载附件
2022-4-21 14:59 上传

到此所有参数分析完毕,如有遗漏或不解,可以回帖问我

下载次数, 代码

hygzs
OP
  

starttime为开始时间,其中ktimes为多少就要延时多久,最低为1,服务器会比较你提交参数内的时间和提交时间还有ktimes,一定要逻辑合理.(有点忙没办法细说,你们自己注意一下)
zhangsir95   

大佬能否做一个问卷星的答题脚本,现在很多公司搞答题活动,先发题目,然后在问卷星答题,看谁抢答的快,前几名就有奖。能否作个已知题目输入之后,一键提交答案,这样一秒不到就完成了。又或者要这样搞,思路如何实现?
ShanGuiOne   

学习学习
ksiv   

这是要多么有耐心才能分析到这一步
lighterleon   

感谢分享,谢谢
别放弃   

讲的很好,分析的很明确,谢谢分享
sina001   

这个是真有用,要仔细看看
luckydog88   

这个可以做什么呢,
komuhaha   

学习了,之前有段时间还在研究这个刷得
您需要登录后才可以回帖 登录 | 立即注册

返回顶部