JS安全防护算法与逆向分析——问卷星自写算法

问卷星自写算法

声明:本教程从安全角度出发讲解,只为增加读者的安全知识,提升读者数据安全意识,以及对于病毒和钓鱼网站的防护能力。绝无其他任何目的与用途。

在学校里经常会填写调查问卷,那这些调查问卷到底需要我们的什么信息呢?传输的时候是否会把我们的个人信息传输上去?再就是我们填写的选项到底是以怎样的形式传输的,让笔者为您详述。

 

笔者为了测试,自己创建了一个问卷星,接下来我选择前两项,点击提交,抓包看看到底会传输什么数据。

 

依然是我们的POST请求包,不过这次后边有一大堆的参数,我们来详细看看,笔者的params如下:

curid: 76628639
starttime: 2020/5/10 16:00:12
source: directphone
submittype: 1
ktimes: 47
hlv: 1
rn: 3727396004.04013384
t: 1589097777417
jqnonce: eecfe203-8472-40f7-b32c-d0070fbc07c9
jqsign: bbdab574*?305*37a0*e45d*c7707aed70d>

 

我们发现有两个很显然是经过加密的参数jqnonce和jqsign,我们先直接在search里边搜索jqnonce,只有两个匹配的,而第二个里边声明了变量jqnonce,我们查看上边的参数,发现并不匹配,那就只能是第一个了,我们点入第一个js脚本。

这里有件很奇怪的事,那就是jqnonce取自window,也就是说直接从页面获取,那照这样说,我们上边就该直接取第二个JS脚本里的数值。其实也确实如此,我们之所以看到不一致是因为这里声明了的jqnonce是下一次请求的,也就是说你按下了提交键后才会用的,而我们params里的jqnonce是本次的,根本不是一回事儿。

 

 

搞清楚了jqnonce之后,我们来看看jqsign,它调用了一个函数dataenc,既不是rsa,也不是aes,只是自己写了个名字,我们看到这里心里就明白了半分,这必定是开发者自己写的函数,可能会很麻烦,也可能会异常简单,我们来看一看。按下F11,进入dataenc函数,我们发现它把jqnonce当做参数,为了以防万一,我们把这个jqnonce数值和写死在window里边的jqnonce数值对比一下:

 

我们发现它们一模一样,显然就是同一个参数,那这样就没问题了!我们继续看它的自写加密。它对ktimes进行了取模运算,那我们就需要找到ktimes才行,因为它是个变量,我们就全局搜索一下。发现有9个符合的,它的初始值是0,但是没有哪个函数能让我们具体知道它是多少,我们根据下边的this.onmouseover函数大致推测是鼠标移动到某个控件上,这个数值就会+1。

看代码得不出具体的值,那我们就打开console,在里边输出一下ktimes,发现它是37!

那我们暂时就把它当做37处理,编写以下JS脚本:

function dataenc(a) {
var ktimes=37;
    var c, d, e, b = ktimes % 10;
    for (0 == b && (b = 1),
    c = [],
    d = 0; d < a.length; d++)
        e = a.charCodeAt(d) ^ b,
        c.push(String.fromCharCode(e));
    return c.join("")
}

用Python执行一下,得出结果为`3f6cbd?7*b651*33cc*?5bd*ba163122eea2`。

我们让网站恢复运作,把新的提交的POST参数拿过来,笔者的参数如下:

curid: 76628639
starttime: 2020/5/10 16:21:24
source: directphone
submittype: 1
ktimes: 37
hlv: 1
rn: 3727396004
t: 1589098876075
jqnonce: 4a1dec80-e126-44dd-82ec-ef614655bbf5
jqsign: 3f6cbd?7*b651*33cc*?5bd*ba163122eea2

jqsign取出来了,确实如此!

 

至此,问卷星的自写算法已分析完毕,希望读者能有所得。

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值