文章总结: 文章详细介绍了Akamai的哈希校验机制及其绕过方法。Akamai通过哈希校验确保加密JS代码未被修改,文章解释了其工作原理:获取目标函数,查找分割标记,拼接函数源码进行哈希计算,然后与固定常量比较。文章提供了绕过方法:将哈希计算代码复制到本地环境,复现哈希计算,使用AST获取必要参数,计算正确哈希值,最后替换检测函数代码,帮助安全研究人员进行反混淆和调试工作。
综合评分: 89
文章分类: 逆向分析,代码审计,安全工具,WEB安全,渗透测试
Akamai 3哈希校验绕过
原创
逆向狗都不学
逆向狗都不学
2025年11月19日 21:16
广东
声明
本文仅供学习交流使用, 如侵立删!
目标网址
aHR0cHM6Ly93d3cuYWRpZGFzLmNvbS5jbi8=
哈希校验
在Akamai的加密JS中
首先会获取一个目标函数
作为哈希目标
然后在这个目标函数中
查找一个分割”标记”
用来把函数源码切成两段
再拼接成最终的哈希输入
然后传入拼接的函数字符串
以及随机种子进行哈希计算
得到一个哈希值
然后再获取一个与动态JS相互绑定的常量
减去这个哈希值
得到一个差值
这个差值是固定的 与动态JS的正确运行相互绑定
如果对加密JS的代码进行了修改
从而修改了目标函数的代码
就会导致生成的哈希值是错误的
那么差值也是错误的
最终校验失败, 导致程序运行错误
需要注意的是
哈希值的生成会直接跳过
换行符、回车符以及空格
不对这些进行处理
所以格式化后的代码进行替换
不会影响哈希值的正确生成
哈希校验绕过
如果不对Akamai动态JS的哈希校验进行绕过
那么会给反混淆以及调试带来很大的麻烦
所以我们首先将哈希计算相关代码
复制到本地环境中
在本地环境中复现动态JS的哈希计算
然后在本地实现最新加密JS的获取
将其保存到指定文件中
const fs = require("fs");
const request = require('sync-request');
// 加密JS链接地址
const new_Akamai_url = "";
// 加密JS代码保存路径
const filePath = './new_Akamai_code.js';
try {
const response = request('GET', new_Akamai_url);
if (response.statusCode === 200) {
const jsContent = response.getBody('utf8');
fs.writeFileSync(filePath, jsContent, 'utf8');
console.log('URL内容已成功保存到new_Akamai_code.js文件中');
} else {
console.error(`请求失败, 状态码: ${response.statusCode}`);
}
} catch (error) {
console.error('操作失败:', error.message);
}
再读取目标文件中的JS代码
获取到目标哈希函数
再将最新加密JS文件中代码转换成ast
编写插件对ast进行操作
获取到分割标记、随机种子、固定常量
将这些传入到本地环境实现的哈希函数中
计算出正确的哈希值
最后使用与动态JS绑定的固定常量
减去哈希值
得到差值
使用ast将这个差值替换检测函数代码
这样就绕过了哈希校验了
视频教程
星球
欢迎加入知识星球
星球里有各种算法实现的安全产品学习代码
后续还会持续更新
AST反混淆课程
如果想学习AST反混淆
可以了解下
我的AST反混淆课程
从原理、思路、拓展、实现
讲述每一个实战案例
并且买课程送一年星球
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:逆向狗都不学 逆向狗都不学《Akamai 3哈希校验绕过》