我的样本文件在此
本次分析文件特征
-
请求HTML文件包含:
set-cookie: 36501JSESSIONID与set-cookie: lD01YhBPHVTHO, 在dev-tools的应用面板中查到cookie: lD01YhBPHVTHP -
HTML引入JS文件
cIZgBeQvEQK9/AiHJXIs5GyJH.dee59c7.js -
JS文件开头为
$_ts...$_ts['dee59c7'], 其中dee59c7为版本 -
HTML中JS多为如下形式
function _$lt(_$EZ) { var _$aS = _$EZ.length; var _$$N, _$VC = new _$XD(_$aS - 1), _$vC = _$EZ.charCodeAt(0) - 97; for (var _$Vw = 0, _$JP = 1; _$JP < _$aS; ++_$JP) { _$$N = _$EZ.charCodeAt(_$JP); if (_$$N >= 40 && _$$N < 92) { _$$N += _$vC; if (_$$N >= 92) _$$N = _$$N - 52; } else if (_$$N >= 97 && _$$N < 127) { _$$N += _$vC; if (_$$N >= 127) _$$N = _$$N - 30; } _$VC[_$Vw++] = _$$N; } return _$yn.apply(null, _$VC); }
大致工作原理
- 获取HTML文件, HTML文件携带两个Cookie
- HTML请求JS文件(JS文件为乱码)
- HTML中JS解密JS文件, 得到JS字符串
- 使用
eval执行JS字符串, JS字符串计算并设置加密Cookie(lD01YhBPHVTHP) - 离谱的是
RUISHUTESTFUNCTIONENTRY每次请求获取值不同(其中除了$_ts之外变量名都是变化的, 但是保证每次计算结果相同)
解决思路
将代码从压缩(单行)形式转为格式化后的多行模式, 方便debug
准备工作(解决动态JS)
由于JS与HTML中变量都是动态的, 打开网站后Ctrl+S保存全部文件. 在VSCode中打开HTML文件, 使用格式化工具格式化, 得到如下形式HTML
<!DOCTYPE html>
<html lang="en">
<head>
<!-- ... -->
<meta content="{qXVS74Mnw/*...*/03336qqqqqqqq">
<script type="text/javascript" src="../cIZgBeQvEQK9/AiHJXIs5GyJH.dee59c7.js"></script>
<script>
(function () {
var _$XI = 16,
// _$_0 = [
// [14, 10, 13, 15, 12, 1, 0, 8, 5, 12, 7, 3, 2, 9, 12, 11, 5],
// [
})()
</script>
</head>
<!-- ... -->
其中
<meta>中字符串参与加密- 第一个
<script>请求乱码JS - 第二个
<script>中的立即执行函数是"解码器"
为了方便分析, 我们将立即执行函数分离到outer.js并引入
本文详细介绍了瑞数Cookie混淆的工作原理,包括HTML文件携带的加密Cookie、动态解密过程以及前端反调试机制。通过分析JS文件,利用格式化工具、劫持与、模拟执行等手段,逐步揭示了解密逻辑,最终提出了解决方案,涉及Cookie劫持、dev-tools调试技巧和模拟执行环境的构建。
最低0.47元/天 解锁文章
1299

被折叠的 条评论
为什么被折叠?



