【猿人学】第九题 js 混淆 - 动态cookie 2 [ 编程杂谈 ]
大数据男孩 文章 正文
明妃
{{nature("2022-08-14 19:26:49")}}更新难点
使用 SoJsonV5 加密混淆代码,各种反调,还有各种坑
Tip:例子:https://pan.bigdataboy.cn/s/aZOsL
猿人学该题官网:https://match.yuanrenxue.com/match/9
分析流程
题目已经说了是 cookie 了,那就跳过看值的步骤
清空缓存,一打开控制台,就被断住,并且下一步一直在循环带,但是一直放行,就能正常加载,说明不是 检测控制台调试,但是一格式化,重新加载,再放行就不行了,说明检测了代码格式化
反调试
sojson 混淆后的代码,很 恶心,各种混淆,反调,阻止你调试代码
sojson 检测代码格式,使用了 正则匹配
toString()
方式,所以我们在所有的 正则表达式出,打上断点,然后使用本地替换的方式来进行慢慢调试
修改方式有两种,一种是 修改检测代码块的位置,另一种是 取反正则匹配的结果,看那种结果能正常执行
然后保存,执行,下一步,正常执行,说明这个反调就过了
当所有的正则都 按照正常的流程执行后,会在这里一直
debugger
,但是为什么网站加载又不会被debugger
,因为debugger
只有当控制台打开时才会生效,直接把这两个debugger 注释
,然后再执行,发现来到另一个 js 文件,说明 udc 的反调就过掉了,并且debugger 还在 VM 里面
向上找栈,看看有什么信息
然后设置
一律不在此暂停
继续执行,有时候能正常进入,有时候
提示 cookie 失效
,但至少说明已经可以执行了
Hook
现在反调已经过了,启用
Hook Cookie
大法,定位生成点,这就定位到生成点了
分析加密逻辑
// 源代码
for (var m = 0x1; f[$b('\x30\x78\x31\x34\x31', '\x72\x64\x71\x5d') + '\x68\x42'](m, 5); m++) {
res = f[$b('\x30\x78\x65\x38', '\x4c\x44\x70\x29') + '\x79\x67'](f[$b('\x30\x78\x61\x36', '\x4f\x58\x71\x66') + '\x68\x43'](decrypt, '1650879458'), '\x72');
}
document[$b('\x30\x78\x35\x35', '\x32\x6d\x25\x21') + $b('\x30\x78\x32\x39', '\x31\x48\x56\x25')] = f[$b('\x30\x78\x37\x31', '\x30\x46\x35\x73') + '\x79\x67'](f[$b('\x30\x78\x31\x61', '\x56\x39\x5b\x42') + '\x79\x67'](f[$b('\x30\x78\x35\x32', '\x6f\x41\x29\x28') + '\x7a\x58']('\x6d\x3d', f[$b('\x30\x78\x31\x65', '\x54\x5e\x64\x6a') + '\x43\x77'](m, 0x1)[$b('\x30\x78\x63\x38', '\x30\x46\x35\x73') + $b('\x30\x78\x61\x34', '\x6b\x46\x52\x77') + '\x6e\x67']()), res), f[$b('\x30\x78\x31\x37\x63', '\x4f\x58\x71\x66') + '\x4c\x42']);
// 手动解混淆一下,就很清晰了,使用的 第五次加密的结果,但是这里有个小疑问,难道每次加密的值一样???这就需要注意,如果不成功这些地方就需要注意
for (var m = 1; m<=5; m++) {
res = decrypt('1650879458') + 'r';
}
document['cookie'] = 'm='+ (m - 1)[ 'toString']() + res + '; path=/';
代码整理
然后把之前改写的
udc.js
放到 Node 去跑,然后补充缺少的环境,选择用 const 补环境,有个就是当代码里有重定义 window
之类的能报错,然后去删除
,然后把 定时器干掉,没有报错
测试加密,然后呢
console.log
不来??? 原来是console.log
被置空了
整理流程
1. 访问 https://match.yuanrenxue.com/match/9 获取 sessionid 和 时间戳,每次都写死在 Js 文件里的,需要重新请求
2. 然后传入时间错,获得加密的 m
3. 带上 m 和 seesion 请求数据
测试
{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读
目录
标签云
一言
评论 3
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}