Files
getDomain/domainCheck/README_acw_sc__v2.md
2026-04-16 13:33:06 +08:00

4.6 KiB
Raw Permalink Blame History

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'

注意事项

  1. 输入长度arg1 必须是40位的十六进制字符串
  2. 输入格式arg1 必须是有效的十六进制字符串
  3. 密钥:默认使用内置密钥,也可以自定义密钥
  4. 输出格式:输出为十六进制字符串

错误处理

完整版生成器包含以下错误处理:

  • 输入长度验证
  • 输入格式验证
  • Base64解码错误处理
  • 异常捕获和错误信息输出

应用场景

  • 网站爬虫绕过阿里云CDN的反爬虫保护
  • 安全测试:测试网站的反爬虫机制
  • 学习研究了解混淆JavaScript代码的逆向工程

技术细节

混淆技术

原始HTML代码使用了多种混淆技术

  1. 字符串编码Base64编码 + URL编码
  2. 变量名混淆:使用无意义的变量名
  3. 控制流混淆:使用闭包和条件函数
  4. 反调试:通过数学计算和正则表达式检测调试器

逆向工程

通过分析原始代码,提取出核心算法:

  1. 移除反调试逻辑
  2. 简化字符串解码
  3. 提取核心计算逻辑
  4. 重构为可读代码

性能优化

  • 使用缓存机制避免重复解码
  • 批量生成功能提高效率
  • 简化算法减少计算量

安全提示

本工具仅供学习和研究使用,请勿用于非法用途。使用本工具绕过网站的反爬虫保护可能违反网站的使用条款。

许可证

本代码仅供学习和研究使用。

联系方式

如有问题或建议,请通过以下方式联系:

  • 提交Issue
  • 发送Pull Request
  • 联系作者

更新日志

v1.0.0 (2024-01-01)

  • 初始版本发布
  • 支持JavaScript和Python版本
  • 包含完整的使用示例

致谢

感谢所有为逆向工程和反爬虫技术研究做出贡献的开发者。