10分钟搞定!某电商网站JS混淆加密,Python逆向实战详解

📅 发布时间:2026/7/4 20:41:45 👁️ 浏览次数:
10分钟搞定!某电商网站JS混淆加密,Python逆向实战详解
你想要的是在10分钟内掌握电商网站JS混淆加密的Python逆向实战方法核心目标是快速定位、解析加密逻辑并编写Python代码还原加密过程。本文会以某主流电商网站的签名加密为例从“加密定位→逻辑还原→Python实现”三步拆解所有操作都基于实战场景确保新手也能快速上手。前置准备2分钟必备工具Chrome浏览器F12开发者工具核心断点调试、搜索Node.js验证JS逻辑可选快速测试Python 3.8实现加密逻辑辅助工具js2pyPython执行JS代码新手友好execjs调用Node执行JS性能更好requests发送加密后的请求实战目标逆向某电商网站的sign参数加密逻辑请求示例https://api.xxx.com/api/v1/goods?goodsId123456timestamp1710000000000signxxxxxx核心找到sign的生成规则用Python还原第一步定位加密位置3分钟1.1 抓包找到加密参数打开Chrome F12 → 切换到Network标签 → 刷新页面/触发请求筛选XHR/Fetch请求找到包含加密参数如sign的接口记录关键参数goodsId、timestamp、sign目标就是还原sign。1.2 搜索加密关键词在Chrome F12 →Sources标签 → 按CtrlShiftF全局搜索关键词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_0x3d78abc123xyz;// 固定密钥var_0x2b7dmd5(_0x5e9f);// MD5加密return_0x2b7d.toUpperCase();// 转大写}// 调用sign _0x4a8b(goodsId, timestamp)第二步还原加密逻辑3分钟2.1 提取核心加密逻辑从混淆代码中剥离核心逻辑忽略混淆的变量名只关注逻辑参与加密的参数goodsIdtimestamp 固定密钥如abc123xyz加密算法MD5 → 转大写拼接顺序goodsId timestamp 密钥。2.2 简化验证Node.js快速测试新建test.js验证加密逻辑是否正确// 引入MD5库模拟电商网站的加密库constcryptorequire(crypto);// 核心加密函数functiongenerateSign(goodsId,timestamp){constsecretabc123xyz;// 从JS中提取的固定密钥conststrgoodsIdtimestampsecret;// MD5加密并转大写constsigncrypto.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):还原加密逻辑核心# 1. 固定密钥从JS中提取secretabc123xyz# 2. 参数拼接严格按照JS顺序sign_strf{goods_id}{timestamp}{secret}# 3. MD5加密 转大写md5_objhashlib.md5(sign_str.encode(utf-8))signmd5_obj.hexdigest().upper()returnsign# 实战调用defcrawl_goods(goods_id):爬取商品数据# 1. 生成时间戳与JS格式一致13位timestampstr(int(time.time()*1000))# 2. 生成签名signgenerate_sign(goods_id,timestamp)# 3. 构造请求参数urlhttps://api.xxx.com/api/v1/goodsparams{goodsId:goods_id,timestamp:timestamp,sign:sign}# 4. 发送请求添加基础请求头headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/124.0.0.0 Safari/537.36,Referer:https://www.xxx.com/}responserequests.get(url,paramsparams,headersheaders)ifresponse.status_code200:returnresponse.json()else:print(f请求失败{response.status_code})returnNone# 测试爬取if__name____main__:goods_datacrawl_goods(123456)print(商品数据,goods_data)3.2 进阶版直接执行JS代码应对复杂混淆如果加密逻辑复杂如多层混淆、自定义加密算法直接用execjs执行提取的JS代码importexecjsimporttimeimportrequests# 1. 提取的JS加密代码去除混淆后的核心js_code function generateSign(goodsId, timestamp) { var secret abc123xyz; var str goodsId timestamp secret; // 模拟电商网站的MD5函数实际从网站复制 function md5(str) { var crypto require(crypto); return crypto.createHash(md5).update(str).digest(hex).toUpperCase(); } return md5(str); } # 2. 执行JS生成签名defget_sign_by_js(goods_id,timestamp):ctxexecjs.compile(js_code)signctx.call(generateSign,goods_id,timestamp)returnsign# 3. 爬取逻辑同基础版defcrawl_goods_js(goods_id):timestampstr(int(time.time()*1000))signget_sign_by_js(goods_id,timestamp)urlhttps://api.xxx.com/api/v1/goodsparams{goodsId:goods_id,timestamp:timestamp,sign:sign}headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/124.0.0.0 Safari/537.36}responserequests.get(url,paramsparams,headersheaders)returnresponse.json()ifresponse.status_code200elseNone# 测试if__name____main__:datacrawl_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中的拼接顺序如timestampgoodsId密钥≠goodsIdtimestamp密钥编码问题JS默认UTF-8Python需显式指定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加密逆向