跟栈跟值分析移步大佬文章 没人比大佬更详细 这里主要分析还原算法
样本:aHR0cHM6Ly93d3cuemhpaHUuY29tLw==
主要日志断点位置:
e.r[this.s][r](i[0], i[1]) -->主要是charCodeAt和charAt
e.r[this.c] + e.r[this.n] --> 密文拼接
e.r[this.c] | e.r[this.n] --> 对每组每个元素的运算
e.r[this.c] & e.r[this.n] --> 密文运算
e.r[this.c] >>> e.r[this.n] --> 每组二 三 四次密文运算
不妙 这里说完了怎么分析
直接进入算法分析环节
查看日志 从结果反跟 获得信息:密文为 'aXFqc4uykHtY6Rt0M_Y8FD98e8NpgU28G0Yyo09yoTNX' 当然这里是正确的结果
再往上看 发现 是计算出每个值并拼接而成 且仔细的靓仔也发现了 "X" 来自对照表.charAt(4,) 那么 "4" 来自哪里内 我们接着往上
push(4) pop(4)没用 接着往上
锵锵 对left值进行 & 63 得到 那么接着跟left的4
又是两个值运算 注意这两个值 经过1204791 >>> 得到4 charAt(4,) = “X” 当然还对1204791有兴趣 上跟
没有发现 right值18 反倒是一直在用left的值1204791 又对其12- 6- 63运算 并得到了密文后四位"oTNX" 继续跟1204791的生成 搜索 = 1204791
也是两个值运算得到 right值就在上面 这么近先跟它
两个值运算 好家伙永无止境了嘛 不是
终于看到传入的明文了 取了下标0并charCodeAt 明明是最后一个密文拼接还取0 搜索"8b7997937c8e4f4a0ca46008f9285561u0000".charCodeAt( 嗯 是倒着取明文的
所以前面1204791 的right值= charCodeAt(0,) ^ 42 << 16 当然42 和16 都是根据加密轮数变化的
1204791的left值就长跟短说 搜索 = 25143
删去点没有的日志 1204791的left值 = 55 | charCodeAt(1,) << 8 这么简单 不是 由跑出个55是未知的 还有前面不是 << 16 这里又<< 8
只对charCodeAt(1,) ^ 0 嗯 四个密文到头了 取了前三个下标内容 猜测就是倒序3个一组
单单一组 "oTNX" 的结束了 纵观全局也是这样处理的 无非运算时对几个固定值随加密轮数变化
结论
算法
测试这个函数,与浏览器生成的值是一样的 当然可以写的更优雅点
var jjj = "RuPtXwxpThIZ0qyz_9fYLCOV8B1mMGKs7UnFHgN3iDaWAJE-Qrk2ecSo6bjd4vl5"
function sign(data){
let a = b = c = 0
let A = [42,0,0,0]
let B = [8,16,8,16]
let C = [63,6,12,18]
let len = data.length
len % 3 == 1 ? data += "u0000u0000" : len % 3 == 2 ? data += "u0000" : null
len = data.length
let result = ''
function AA(){
a == A.length ? a = 0:null
return A[a++]
}
function BB(){
b == B.length ? b = 0:null
return B[b++]
}
function CC(){
c == C.length ? c = 0:null
return C[c++]
}
for(;len > 0; len = len-3) {
let D = (data.charCodeAt(len -1) ^ AA()) | ((data.charCodeAt(len -2) ^ AA()) << BB())
let E = D | ((data.charCodeAt(len -3) ^ AA()) << BB())
result += jjj.charAt(E & CC())
result += jjj.charAt((E >>> CC()) & 63)
result += jjj.charAt((E >>> CC()) & 63)
result += jjj.charAt((E >>> CC()) & 63)
}
return result
}
//sign(data)
该内容转载自网络,更多内容请点击“阅读原文”
原文始发于微信公众号(web安全工具库):某乎x96jsvmp算法还原新手初体验
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论