4.6 KiB
4.6 KiB
acw_sc__v2 生成器
从混淆的HTML代码中提取的 acw_sc__v2 cookie 生成函数。
文件说明
JavaScript版本
- acw_sc__v2_generator.js - JavaScript版本的生成函数,可直接在浏览器控制台中使用
Python版本
- acw_sc__v2_fixed.py - 简化版Python生成器,适合快速使用
- acw_sc__v2_complete.py - 完整版Python生成器,包含更多功能和错误处理
- acw_sc__v2_simple.py - 最简化版本,直接使用硬编码密钥
使用方法
JavaScript版本
在浏览器控制台中执行:
// 加载acw_sc__v2_generator.js文件后
var arg1 = '1EEB3321F0286855D50CD9E96C1CDF3D4A913DB0';
var acwScV2 = generateAcwScV2(arg1);
console.log('acw_sc__v2的值:', acwScV2);
// 设置cookie(可选)
setAcwScV2Cookie(acwScV2);
Python版本
简化版(acw_sc__v2_fixed.py)
from acw_sc__v2_fixed import generate_acw_sc_v2
arg1 = '1EEB3321F0286855D50CD9E96C1CDF3D4A913DB0'
acw_sc_v2 = generate_acw_sc_v2(arg1)
print(f'acw_sc__v2的值: {acw_sc_v2}')
完整版(acw_sc__v2_complete.py)
from acw_sc__v2_complete import AcwScV2Generator, generate_acw_sc_v2
# 方法1:使用便捷函数
arg1 = '1EEB3321F0286855D50CD9E96C1CDF3D4A913DB0'
result = generate_acw_sc_v2(arg1)
print(f'acw_sc__v2的值: {result}')
# 方法2:使用生成器类
generator = AcwScV2Generator()
result = generator.generate(arg1)
print(f'acw_sc__v2的值: {result}')
# 方法3:批量生成
test_args = [
'1EEB3321F0286855D50CD9E96C1CDF3D4A913DB0',
'A13D8B4174A10C57667C1CD92E54D01F449CA76E',
'F0286855D50CD9E96C1CDF3D4A913DB01EEB3321'
]
batch_results = generator.generate_batch(test_args)
for arg, res in batch_results.items():
print(f'{arg} -> {res}')
# 方法4:使用自定义密钥
custom_key = 'YXBwbHk=' # Base64编码的密钥
generator.set_key(custom_key)
result = generator.generate(arg1)
print(f'使用自定义密钥的acw_sc__v2值: {result}')
核心算法
1. 字符重排
根据索引映射数组 m 重新排列输入字符串 arg1:
m = [0xf, 0x23, 0x1d, 0x18, 0x21, 0x10, 0x1, 0x26, 0xa, 0x9, 0x13, 0x1f, 0x28, 0x1b, 0x16, 0x17, 0x19, 0xd, 0x6, 0xb, 0x27, 0x12, 0x14, 0x8, 0xe, 0x15, 0x20, 0x1a, 0x2, 0x1e, 0x7, 0x4, 0x11, 0x5, 0x3, 0x1c, 0x22, 0x25, 0xc, 0x24]
2. 密钥解码
将Base64编码的密钥解码为十六进制字符串:
key_encoded = 'Aw5PDg9JAw4='
key_hex = base64.b64decode(key_encoded).hex()
# 结果: '030e4f0e0f49030e'
3. 异或运算
将重排后的字符串与解码后的密钥进行按位异或:
for x in range(0, min(len(u), len(p)), 2):
u_sub = u[x:x+2]
p_sub = p[x:x+2]
a = format(int(u_sub, 16) ^ int(p_sub, 16), '02x')
v += a
输入输出示例
输入
arg1 = '1EEB3321F0286855D50CD9E96C1CDF3D4A913DB0'
输出
acw_sc__v2 = '5ad70a13004a0290'
注意事项
- 输入长度:
arg1必须是40位的十六进制字符串 - 输入格式:
arg1必须是有效的十六进制字符串 - 密钥:默认使用内置密钥,也可以自定义密钥
- 输出格式:输出为十六进制字符串
错误处理
完整版生成器包含以下错误处理:
- 输入长度验证
- 输入格式验证
- Base64解码错误处理
- 异常捕获和错误信息输出
应用场景
- 网站爬虫:绕过阿里云CDN的反爬虫保护
- 安全测试:测试网站的反爬虫机制
- 学习研究:了解混淆JavaScript代码的逆向工程
技术细节
混淆技术
原始HTML代码使用了多种混淆技术:
- 字符串编码:Base64编码 + URL编码
- 变量名混淆:使用无意义的变量名
- 控制流混淆:使用闭包和条件函数
- 反调试:通过数学计算和正则表达式检测调试器
逆向工程
通过分析原始代码,提取出核心算法:
- 移除反调试逻辑
- 简化字符串解码
- 提取核心计算逻辑
- 重构为可读代码
性能优化
- 使用缓存机制避免重复解码
- 批量生成功能提高效率
- 简化算法减少计算量
安全提示
本工具仅供学习和研究使用,请勿用于非法用途。使用本工具绕过网站的反爬虫保护可能违反网站的使用条款。
许可证
本代码仅供学习和研究使用。
联系方式
如有问题或建议,请通过以下方式联系:
- 提交Issue
- 发送Pull Request
- 联系作者
更新日志
v1.0.0 (2024-01-01)
- 初始版本发布
- 支持JavaScript和Python版本
- 包含完整的使用示例
致谢
感谢所有为逆向工程和反爬虫技术研究做出贡献的开发者。