192 lines
4.6 KiB
Markdown
192 lines
4.6 KiB
Markdown
# 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版本
|
||
- 包含完整的使用示例
|
||
|
||
## 致谢
|
||
|
||
感谢所有为逆向工程和反爬虫技术研究做出贡献的开发者。 |