js逆向技巧(持续更新)

本文探讨了JavaScript逆向工程中的防止改包方法,包括请求参数加密、请求体加密和签名验证。同时,介绍了测试思路,如寻找入口、调试分析和模拟执行,并详细讲解了各个步骤。此外,还提到了全局搜索指定参数、调用分析和Hook等技术在实战中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反无限debugger

这里还提一个chrome的小tips,以无限debugger的测试页面为例

打开f12,在源代码/来源中选中debugger字符,右击选择向忽略列表添加脚本

 

这个时候我们调试代码,将不会被debugger阻断 

 

防止改包方式

主要是这么几个方面

1. 请求参数和路径的加密(靶场未实现)
  • 如果原始请求是GET请求,或防止访问者获取请求路径,通常会将用户实际的请求路径和GET请求参数封装都封装为POST请求的请求体,通过加解密网关再还原为原始GET请求传入后端分布式服务上。 在APP中比较常见。

    表现的形式通常为: 抓包后发现访问任何功能都是同一路径,并且请求全为密文

2. 请求体的
<think>好的,我现在需要帮助用户解决关于JS逆向没有思路的问题。首先,用户可能遇到了逆向JavaScript代码时的困难,不知道如何下手。我需要回忆常见的JS逆向方法和步骤,然后组织成一个结构清晰的回答,帮助用户逐步解决问题。 首先,我应该从基础开始,确认用户是否了解JS逆向的基本概念。然后,考虑常见的逆向场景,比如加密参数、混淆代码、反调试机制等。接下来,分步骤介绍应对方法,比如如何定位关键代码、处理混淆、调试技巧等。同时,需要提到常用的工具,比如浏览器开发者工具、AST解析、Hook技术等,可能还要举例说明具体操作。 还要注意用户可能缺乏经验,所以需要将步骤分解得详细一些,并强调实践的重要性。此外,可能需要提醒常见的陷阱和注意事项,比如动态加载、环境检测等。最后,给出学习资源和进一步建议,帮助用户提升技能。 需要确保回答符合系统级指令,使用正确的中文表达,行内公式用$...$,独立公式用$$...$$,但根据当前问题,可能数学公式较少,但如果有涉及算法的地方要正确应用。不过这个问题可能更多是技术步骤,数学内容可能不多,但要注意可能的加密算法中的公式,比如RSA的$n=p*q$之类的,如果有的话要正确使用格式。 现在需要检查是否有遗漏的步骤,是否覆盖了主要难点,比如反调试、混淆处理、AST还原、Hook方法等。同时,结构要清晰,分点说明,让用户能一步步跟着思路走。可能还需要加入实际案例,比如如何追踪加密参数生成过程,如何通过断点调试找到关键函数。 最后,确保语言通俗易懂,避免过于专业的术语,或者如果使用术语要简要解释。这样用户即使基础较弱也能理解大致方向,再通过提供的资源深入学习。</think>以下是针对JS逆向缺乏思路时的分步解决指南,结合实际场景和工具使用: $$逆向问题 = 理解逻辑 + 突破防御 + 还原算法$$ 一、定位关键代码(60%问题在此阶段解决) 1. 网络请求溯源 - 使用Chrome开发者工具的Network面板 - 筛选XHR/Fetch请求,定位目标加密参数(如`token`、`sign`) - 右键请求选择`Copy as Node.js fetch`获取完整调用栈 2. 断点调试技巧 ```javascript // 在可疑参数生成位置插入调试语句 console.trace("参数生成位置:", window._key); debugger; // 强制触发断点 ``` 二、突破常见防御机制 1. 反调试处理 - 禁用无限debugger循环: ```javascript // 在Console提前注入 window._originalDebugger = Function.prototype.constructor; Function.prototype.constructor = function() {   if (!arguments[0].includes('debugger')) {     return new window._originalDebugger(...arguments);   } }; ``` 2. 环境检测绕过 - 补全常见检测点: ```javascript Object.defineProperty(navigator, 'webdriver', {get: () => false}); window.chrome = {runtime: {}}; ``` 三、代码混淆处理(AST级解决方案) 1. 使用Babel工具链 ```bash npm install @babel/core @babel/traverse ``` 2. 典型还原步骤: - 常量折叠:$x = 0x2f3 ^ 0x44d; \rightarrow x = 752$ - 控制流平坦化:识别真实执行路径 - 字符串解密:还原`_0x12ab('0x1a')`类调用 四、算法还原模式识别 1. 常见加密特征识别 | 加密类型 | 关键特征                   | 识别方法                 | |----------|---------------------------|--------------------------| | AES     | `mode/padding`参数       | 搜索`CryptoJS.AES`       | | RSA     | `setPublicKey`调用       | 查找`new JSEncrypt()`   | | MD5     | `0x67452301`魔数         | 特征常量搜索             | 五、实战案例:某电商sign参数逆向 1. 抓包发现请求携带`sign: "a3d8f1..."` 2. 全局搜索`sign:`定位到加密函数 3. 下断点后发现执行流程: $$sign = md5(JSON.stringify(params) + timestamp + "salt_key")$$ 4. 通过Hook验证: ```javascript let _oldMD5 = window.md5; window.md5 = function(str) {   console.log("MD5输入:", str);   return _oldMD5(str); } ``` 六、工具链推荐 1. 动态调试:Chrome DevTools + Fiddler 2. 静态分析:AST Explorer(https://astexplorer.net) 3. 自动化:Puppeteer + Mitmproxy 4. 逆向框架:Crypto-Anguish(密码学特征识别) 七、学习路径建议 1. 基础阶段(2周): - 掌握JavaScript原型链与作用域 - 熟练使用浏览器调试工具 2. 进阶阶段(1个月): - 学习WebAssembly逆向基础 - 掌握AST语法树操作 3. 实战阶段(持续): - 定期分析主流网站(如某宝、某东) - 关注Web安全会议(如HITCON) 遇到具体案例卡顿时,可采用「行为特征分析法」:通过输入输出变化推测算法类型,例如: - 输出长度固定 → 可能为哈希算法 - 输入相同输出不同 → 存在随机salt - 时间相关 → 结合timestamp验证 建议从简单案例入手(如某天气网站加密),逐步过渡到复杂场景,保持每周分析3-5个案例的频率积累经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1136014935

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值