当前位置: 首页 > news >正文

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

你想要的是在10分钟内掌握电商网站JS混淆加密的Python逆向实战方法,核心目标是快速定位、解析加密逻辑,并编写Python代码还原加密过程。本文会以某主流电商网站的签名加密为例,从“加密定位→逻辑还原→Python实现”三步拆解,所有操作都基于实战场景,确保新手也能快速上手。


前置准备(2分钟)

必备工具

  1. Chrome浏览器:F12开发者工具(核心:断点调试、搜索)
  2. Node.js:验证JS逻辑(可选,快速测试)
  3. Python 3.8+:实现加密逻辑
  4. 辅助工具
    • js2py:Python执行JS代码(新手友好)
    • execjs:调用Node执行JS(性能更好)
    • requests:发送加密后的请求

实战目标

逆向某电商网站的sign参数加密逻辑:

  • 请求示例:https://api.xxx.com/api/v1/goods?goodsId=123456&timestamp=1710000000000&sign=xxxxxx
  • 核心:找到sign的生成规则,用Python还原

第一步:定位加密位置(3分钟)

1.1 抓包找到加密参数

  1. 打开Chrome F12 → 切换到Network标签 → 刷新页面/触发请求;
  2. 筛选XHR/Fetch请求,找到包含加密参数(如sign)的接口;
  3. 记录关键参数:goodsIdtimestampsign(目标就是还原sign)。

1.2 搜索加密关键词

  1. 在Chrome F12 →Sources标签 → 按Ctrl+Shift+F全局搜索:
    • 关键词:signencryptmd5sha256hashencode
    • 重点关注:sign:sign =generateSigncreateSign等。

1.3 断点调试验证

  1. 找到疑似加密代码行,点击行号左侧添加断点
  2. 重新触发请求,代码会停在断点处;
  3. 查看Call Stack(调用栈)和Scope(作用域),确认加密逻辑:
    • 观察哪些参数参与加密(如timestampgoodsId、固定密钥);
    • 记录加密算法(MD5/SHA256/HMAC等)。
典型加密代码特征(混淆后)
// 混淆后的加密函数(示例)function_0x4a8b(_0x12c5,_0x3d78){var_0x5e9f=_0x12c5+_0x3d78+"abc123xyz";// 固定密钥var_0x2b7d=md5(_0x5e9f);// MD5加密return_0x2b7d.toUpperCase();// 转大写}// 调用:sign = _0x4a8b(goodsId, timestamp)

第二步:还原加密逻辑(3分钟)

2.1 提取核心加密逻辑

从混淆代码中剥离核心逻辑(忽略混淆的变量名,只关注逻辑):

  1. 参与加密的参数:goodsId+timestamp+ 固定密钥(如abc123xyz);
  2. 加密算法:MD5 → 转大写;
  3. 拼接顺序:goodsId + timestamp + 密钥

2.2 简化验证(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):"""还原加密逻辑(核心)"""# 1. 固定密钥(从JS中提取)secret="abc123xyz"# 2. 参数拼接(严格按照JS顺序)sign_str=f"{goods_id}{timestamp}{secret}"# 3. MD5加密 + 转大写md5_obj=hashlib.md5(sign_str.encode('utf-8'))sign=md5_obj.hexdigest().upper()returnsign# 实战调用defcrawl_goods(goods_id):"""爬取商品数据"""# 1. 生成时间戳(与JS格式一致:13位)timestamp=str(int(time.time()*1000))# 2. 生成签名sign=generate_sign(goods_id,timestamp)# 3. 构造请求参数url="https://api.xxx.com/api/v1/goods"params={"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/"}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# 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):ctx=execjs.compile(js_code)sign=ctx.call("generateSign",goods_id,timestamp)returnsign# 3. 爬取逻辑(同基础版)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 NT 10.0; Win64; x64) Chrome/124.0.0.0 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

快速排错技巧

  1. 参数顺序错误:严格按照JS中的拼接顺序(如timestamp+goodsId+密钥goodsId+timestamp+密钥);
  2. 编码问题:JS默认UTF-8,Python需显式指定encode('utf-8')
  3. 大小写问题:JS中toUpperCase()/toLowerCase()需对应;
  4. 时间戳格式:13位(毫秒)vs 10位(秒),需与JS一致。

总结

关键点回顾

  1. 加密定位:通过Chrome开发者工具的“搜索+断点”快速找到加密函数,重点关注signmd5等关键词;
  2. 逻辑还原:剥离混淆代码的核心逻辑,用Node.js快速验证;
  3. Python实现
    • 简单加密:直接用Python内置库(hashlib)还原;
    • 复杂加密:用execjs执行提取的JS代码;
  4. 核心原则:严格复刻JS的参数拼接顺序、编码、大小写、算法,一步都不能错。

这套方法能解决90%以上电商网站的JS混淆加密问题,10分钟内即可完成从逆向到Python实现的全流程。核心技巧是“抓包→定位→验证→实现”,新手只要按步骤操作,就能快速搞定JS加密逆向!

http://www.jsqmd.com/news/391471/

相关文章:

  • FLUX.1-dev旗舰版5分钟快速上手:24G显存优化版AI绘图教程
  • RexUniNLU生产环境:日均10万+文本的中文NLU服务稳定性实践
  • BERT模型基于Python的大模型岗位人才需求可视化分析
  • ofa_image-caption高性能部署:消费级GPU上实现<2s端到端图像描述生成
  • Qwen-Image-Edit效果展示:动漫风格转换与角色设计
  • 立知lychee-rerank-mm Linux系统部署:生产环境最佳实践
  • 零基础教程:用图片旋转判断镜像快速修正照片方向
  • Hunyuan-MT-7B与内网穿透技术结合的私有化部署方案
  • 真的太省时间 8个AI论文写作软件测评:本科生毕业论文+科研写作全攻略
  • Jimeng LoRA与STM32嵌入式系统的轻量化部署
  • 2026年口碑好的异形吹塑/塑料吹塑厂家选择参考建议 - 品牌宣传支持者
  • 2026年热门的澳洲移民/澳洲移民成功率保障哪家靠谱可靠供应商参考 - 品牌宣传支持者
  • 揭秘鲜为人知的漏洞赏金平台:我如何用它赚取11,000美元
  • 春联生成模型-中文-base商业应用:直播带货间实时生成观众ID定制春联弹幕
  • Phi-4-mini-reasoning多语言支持实战:跨语言数学问题求解
  • AI助力3D创作:Face3D.ai Pro生成超真实人脸教程
  • DeepSeek-OCR-2实现MySQL数据库自动化文档处理:从图像到结构化数据
  • 2026年比较好的刮板式薄膜蒸发器/不锈钢刮板式薄膜蒸发器厂家采购参考指南(必看) - 品牌宣传支持者
  • MySQL语音数据库:Qwen3-TTS合成结果存储与检索方案
  • Phi-3-mini-4k-instruct与VS Code开发环境深度集成
  • Qwen3-ASR-1.7B快速体验:上传音频秒出文字结果
  • 弦音墨影快速上手:无需Python基础的新中式AI视频理解系统体验
  • AI写教材必看攻略!低查重方法,选择合适工具是关键!
  • 2026年口碑好的搪瓷反应釜/山东氢氟酸反应釜厂家最新推荐 - 品牌宣传支持者
  • 效率直接起飞! 降AI率软件 千笔AI VS speedai,MBA专属神器!
  • 低成本GPU算力适配Qwen3-32B:Clawdbot镜像免配置部署与显存优化指南
  • AgentCPM研报助手实测:离线环境下的智能写作体验
  • SiameseUIE与STM32嵌入式开发:轻量级信息抽取方案
  • 山西现房交付热潮中,学区房成为家长新宠,新房/70年大产权住宅/新楼盘/婚房/现房/实景现房/学区房,学区房源头厂家排行 - 品牌推荐师
  • AI设计革命:Nano-Banana生成工业级分解图教程