你想要的是在10分钟内掌握电商网站JS混淆加密的Python逆向实战方法,核心目标是快速定位、解析加密逻辑,并编写Python代码还原加密过程。
本文会以某主流电商网站的签名加密为例,从“加密定位→逻辑还原→Python实现”三步拆解,所有操作都基于实战场景,确保新手也能快速上手。
/>
前置准备(2分钟)
必备工具
- Chrome浏览器:F12开发者工具(核心:断点调试、搜索)
- Node.js:验证JS逻辑(可选,快速测试)
- Python
3.8+
:实现加密逻辑 - 辅助工具:
js2py:Python执行JS代码(新手友好)execjs:调用Node执行JS(性能更好)requests:发送加密后的请求
实战目标
逆向某电商网站的sign参数加密逻辑:
- 请求示例:
https://api.xxx.com/api/v1/goods?goodsId=123456×tamp=1710000000000&sign=xxxxxx - 核心:找到
sign的生成规则,用Python还原
/>
第一步:定位加密位置(3分钟)
1.1F12
刷新页面/触发请求;
sign)的接口;goodsId、timestamp、sign(目标就是还原sign)。1.2F12
按Ctrl+Shift+F全局搜索:
- 关键词:
sign、encrypt、md5、sha256、hash、encode; - 重点关注:
sign:、sign、=
generateSign、createSign等。
1.3
断点调试验证
- 找到疑似加密代码行,点击行号左侧添加断点;
- 重新触发请求,代码会停在断点处;
- 查看
Call(调用栈)和Stack
Scope(作用域),确认加密逻辑:- 观察哪些参数参与加密(如
timestamp、goodsId、固定密钥); - 记录加密算法(MD5/SHA256/HMAC等)。
- 观察哪些参数参与加密(如
典型加密代码特征(混淆后)
//混淆后的加密函数(示例)
function_0x4a8b(_0x12c5,_0x3d78){var_0x5e9f=_0x12c5+_0x3d78+"abc123xyz";//固定密钥
var_0x2b7d=md5(_0x5e9f);//MD5加密
return_0x2b7d.toUpperCase();//转大写
}//调用:sign
timestamp)
/>
第二步:还原加密逻辑(3分钟)
2.1
提取核心加密逻辑
从混淆代码中剥离核心逻辑(忽略混淆的变量名,只关注逻辑):
- 参与加密的参数:
goodsId+timestamp+固定密钥(如
abc123xyz); - 加密算法:MD5
转大写;
- 拼接顺序:
goodsId+
简化验证(Node.js快速测试)
新建
test.js,验证加密逻辑是否正确://引入MD5库(模拟电商网站的加密库)
constcrypto=require('crypto');//核心加密函数
functiongenerateSign(goodsId,timestamp){constsecret="abc123xyz";//从JS中提取的固定密钥
conststr=goodsId+timestamp+secret;//MD5加密并转大写
constsign=crypto.createHash('md5').update(str).digest('hex').toUpperCase();returnsign;}//测试:替换为抓包得到的真实参数
console.log(generateSign("123456","1710000000000"));//输出应与抓包的sign一致!
执行验证:
nodetest.js#输出示例:8E6F798B8A7D6C5B4A3F2E1D0C9B8A7F
/>
第三步:Python实现加密(2分钟)
3.1
基础版:纯Python实现
importhashlibimporttimeimportrequestsdefgenerate_sign(goods_id,timestamp):"""还原加密逻辑(核心)"""#固定密钥(从JS中提取)
secret="abc123xyz"#参数拼接(严格按照JS顺序)
sign_str=f"{goods_id}{timestamp}{secret}"#MD5加密
转大写
md5_obj=hashlib.md5(sign_str.encode('utf-8'))sign=md5_obj.hexdigest().upper()returnsign#实战调用
defcrawl_goods(goods_id):"""爬取商品数据"""#生成时间戳(与JS格式一致:13位)
timestamp=str(int(time.time()*1000))#生成签名
sign=generate_sign(goods_id,timestamp)#构造请求参数
url="https://api.xxx.com/api/v1/goods"params={"goodsId":goods_id,"timestamp":timestamp,"sign":sign}#发送请求(添加基础请求头)
headers={"User-Agent":"Mozilla/5.0(Windows
Safari/537.36"
,"Referer":"https://www.xxx.com/"}response=requests.get(url,params=params,headers=headers)ifresponse.status_code==200:returnresponse.json()else:print(f"请求失败:{response.status_code}")returnNone#测试爬取
if__name__=="__main__":goods_data=crawl_goods("123456")print("商品数据:",goods_data)3.2
进阶版:直接执行JS代码(应对复杂混淆)
如果加密逻辑复杂(如多层混淆、自定义加密算法),直接用
execjs执行提取的JS代码:importexecjsimporttimeimportrequests#提取的JS加密代码(去除混淆后的核心)
js_code="""function
模拟电商网站的MD5函数(实际从网站复制)
function
crypto.createHash('md5').update(str).digest('hex').toUpperCase();
return
执行JS生成签名
defget_sign_by_js(goods_id,timestamp):ctx=execjs.compile(js_code)sign=ctx.call("generateSign",goods_id,timestamp)returnsign#爬取逻辑(同基础版)
defcrawl_goods_js(goods_id):timestamp=str(int(time.time()*1000))sign=get_sign_by_js(goods_id,timestamp)url="https://api.xxx.com/api/v1/goods"params={"goodsId":goods_id,"timestamp":timestamp,"sign":sign}headers={"User-Agent":"Mozilla/5.0(Windows
Safari/537.36"
}response=requests.get(url,params=params,headers=headers)returnresponse.json()ifresponse.status_code==200elseNone#测试
if__name__=="__main__":data=crawl_goods_js("123456")print(data)/>
常见加密场景快速解决方案(1分钟)
加密类型 识别特征 Python实现 MD5加密 结果32位/16位,常转大写 hashlib.md5().hexdigest()SHA256加密 结果64位 hashlib.sha256().hexdigest()HMAC加密 有密钥和算法参数 hmac.new(密钥,数据,
hashlib.md5).hexdigest()
Base64编码 结果含+/=,长度为4的倍数 base64.b64encode().decode()AES/DES加密 有iv/key/模式(CBC/ECB) 使用 pycryptodome库快速排错技巧
- 参数顺序错误:严格按照JS中的拼接顺序(如
timestamp+goodsId+密钥≠goodsId+timestamp+密钥); - 编码问题:JS默认
UTF-8,Python需显式指定encode('utf-8'); - 大小写问题:JS中
toUpperCase()/toLowerCase()需对应; - 时间戳格式:13位(毫秒)vs
10位(秒),需与JS一致。
/>
总结
关键点回顾
- 加密定位:通过Chrome开发者工具的“搜索+断点”快速找到加密函数,重点关注
sign、md5等关键词; - 逻辑还原:剥离混淆代码的核心逻辑,用Node.js快速验证;
- Python实现:
- 简单加密:直接用Python内置库(hashlib)还原;
- 复杂加密:用
execjs执行提取的JS代码;
- 核心原则:严格复刻JS的参数拼接顺序、编码、大小写、算法,一步都不能错。
这套方法能解决90%以上电商网站的JS混淆加密问题,10分钟内即可完成从逆向到Python实现的全流程。
核心技巧是“抓包→定位→验证→实现”,新手只要按步骤操作,就能快速搞定JS加密逆向!
- 参数顺序错误:严格按照JS中的拼接顺序(如


