# 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版本 在浏览器控制台中执行: ```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) ```python 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) ```python 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`: ```python 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编码的密钥解码为十六进制字符串: ```python key_encoded = 'Aw5PDg9JAw4=' key_hex = base64.b64decode(key_encoded).hex() # 结果: '030e4f0e0f49030e' ``` ### 3. 异或运算 将重排后的字符串与解码后的密钥进行按位异或: ```python 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 ``` ## 输入输出示例 ### 输入 ```python arg1 = '1EEB3321F0286855D50CD9E96C1CDF3D4A913DB0' ``` ### 输出 ```python 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版本 - 包含完整的使用示例 ## 致谢 感谢所有为逆向工程和反爬虫技术研究做出贡献的开发者。