javascript逆向引用的小例子

本文通过多个实例展示了如何使用JavaScript中的正则表达式进行字符串匹配与检索,包括验证IP地址、提取HTML标签内容及模式匹配等常见应用场景。

javascript逆向引用的小例子:

<script language=javascript>
function isIP(strIP) {
if (strIP=="") return false;
var re=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/g //匹配IP地址的正则表达式
if(re.test(strIP))
{//这里的$1,$2..就是后项引用
if( RegExp.$1 <256 && RegExp.$2<256 && RegExp.$3<256 && RegExp.$4<256)
{
return true;
}
}
return false;
}
if(isIP("123.108.208.42")) a="True"
alert(RegExp.$3);
</script>
<script language=javascript>
function RegExpTest(){
var src = "<第一个><第二个><第三个><第四个>";
var re = /<([^>]*)>/g;
var arr,msg="";
while ((arr = re.exec(src)) != null)
msg+=arr[1] +"\r\n";
alert(msg);
}
RegExpTest();
</script>
<script language=javascript>
var s;
var re = new RegExp("d(b+)(d)","ig");
var str = "cdbBdbsbdbdz";
var arr = re.exec(str);
s = "$1 contains: " + RegExp.$1 + "\n";
s += "$2 contains: " + RegExp.$2 + "\n";
s += "$3 contains: " + RegExp.$3;
alert (s);
var r, re;                     // 声明变量。
var s = "The rain in Spain falls mainly in the spain";
re = new RegExp("Spain","ig");  // 创建正则表达式对象。
r = s.match(re);
alert (r);
</script>
<script language=javascript>
var re = new RegExp("(第一个).*(第二个)","gi");
str="<第一个><第二个>"
var arr = re.exec(str);
alert (RegExp.$1)
alert (RegExp.$2)
</script>



<think>好的,我现在需要帮助用户解决如何逆向分析JavaScript生成的加密token的问题。用户提到这可能用于调试或学习目的,所以我需要详细但清晰地解释方法和工具,同时参考之前提供的引用内容。 首先,我应该回顾用户提供的引用,看看有哪些相关信息可以利用。引用[1]提到了一个反爬虫练习平台,涉及Ajax加载的数据接口参数加密和时间限制,适合JS逆向分析。引用[2]展示了某云音乐的加密参数生成,使用了AES加密。引用[3]中的大众点评案例使用了zlib的压缩和Base64编码。引用[4]则是关于RSA加密的token生成,并提到了补环境头的方法。 接下来,用户的问题集中在逆向分析JS生成的加密token的方法和工具上。我需要结合这些引用中的例子,分步骤解释逆向过程。可能需要包括网络抓包、代码定位、调试工具的使用、AST反混淆、模拟执行环境等步骤。此外,还要推荐一些工具,如Chrome开发者工具、Fiddler、AST解析工具、Node.js等。 需要确保回答结构清晰,分点列出方法和工具,同时结合引用中的案例来说明每个步骤的实际应用。例如,在动态调试时,可以引用[2]中的AES加密函数,说明如何设置断点;在AST反混淆时,可以提到引用[1]中的代码混淆问题。补环境的部分则可以用引用[4]中的例子来展示如何模拟浏览器环境。 还要注意用户可能的深层需求,比如学习逆向技术的基础知识,或者如何处理常见的加密方法(AES、RSA、压缩编码)。因此,在回答中应该涵盖这些加密类型的处理方法,并提供实际代码示例,如使用Python或Node.js进行参数生成。 最后,确保语言口语化,避免使用专业术语过多,必要时进行解释。同时,生成的相关问题要贴近用户可能的后续疑问,比如如何反混淆代码或处理WebAssembly加密。</think>以下是逆向分析JavaScript生成加密token的完整方法论和工具链,结合引用内容中的多个实战案例进行说明: --- ### 一、基础逆向流程 1. **网络请求定位** - 使用Chrome开发者工具`Network`面板过滤XHR请求 - 示例定位(引用[1]案例): ```javascript // 查找关键请求 fetch("/api/movie", { headers: { "x-token": encryptedToken // 需要逆向的目标参数 } }) ``` 2. **调用栈回溯** - 在`Sources`面板对加密参数右键选择`Reveal in Initiator` - 示例定位加密函数(引用[2]案例): ```javascript function generateToken(params) { // 设置断点 return CryptoJS.AES.encrypt(...) // 加密核心逻辑 } ``` 3. **代码映射还原** - 使用`Source Map`还原混淆代码(需网站提供.map文件) - 针对引用[3]的压缩参数: ```javascript zlib.deflateSync(str) // 定位到压缩函数 ``` --- ### 二、核心逆向技术 #### 1. 动态调试技术 ```javascript // 在Chrome控制台设置条件断点(引用[2]案例) Debugger.setBreakpoint({ location: { scriptId: targetScriptId }, condition: 'param.includes("token")' }); ``` #### 2. AST反混淆 ```bash # 使用babel工具处理混淆代码(引用[1]案例) npm install @babel/core @babel/generator -g babel --config-file=deobfuscate.json input.js > output.js ``` 反混淆配置示例: ```json { "plugins": [ ["transform-remove-console"], ["transform-rename-variables"] ] } ``` #### 3. 加密算法识别 | 特征代码 | 加密类型 | 处理工具 | |---------------------------|-------------|-----------------------| | `CryptoJS.AES.encrypt` | AES-CBC | Python pycryptodome | | `window.rsa.encrypt` | RSA | NodeJS crypto模块 | | `zlib.deflateSync` | 数据压缩 | Python zlib库 | --- ### 三、实战案例解析 #### 案例1:AES加密参数(引用[2]) ```javascript // 原始JS加密函数 function b(a, b) { var c = CryptoJS.enc.Utf8.parse(b), d = CryptoJS.enc.Utf8.parse("0102030405060708"), e = CryptoJS.enc.Utf8.parse(a), f = CryptoJS.AES.encrypt(e, c, { iv: d, mode: CryptoJS.mode.CBC }); return f.toString() } // Python复现 from Crypto.Cipher import AES def decrypt_token(encrypted, key, iv): cipher = AES.new(key.encode(), AES.MODE_CBC, iv.encode()) return cipher.decrypt(base64.b64decode(encrypted)) ``` #### 案例2:RSA加密token(引用[4]) ```javascript // JS环境补全(防止检测) window = this; const navigator = { userAgent: "Mozilla/5.0" }; // Python复现 from Crypto.PublicKey import RSA def rsa_encrypt(text, pub_key): key = RSA.import_key(pub_key) return key.encrypt(text.encode(), 0)[0] ``` --- ### 四、必备工具链 1. **动态调试工具** - Chrome DevTools (Elements/Network/Sources面板) - Fiddler Everywhere (HTTPS流量解析) 2. **静态分析工具** - AST Explorer (在线AST解析) - JStillery (自动化反混淆) 3. **模拟执行环境** - NodeJS + vm2模块 - Python execjs库 ```python import execjs ctx = execjs.compile(""" function getToken() { return window._genToken(); } """) print(ctx.call("getToken")) ``` 4. **密码学工具** - CyberChef (在线编解码) - Burp Suite (数据包重放) --- ### 五、进阶对抗策略 1. **环境检测绕过**(引用[4]案例) ```javascript // 补全缺失的浏览器环境 Object.defineProperty(navigator, 'platform', { get: () => 'Win32' }) ``` 2. **WebAssembly解析** ```bash # 使用wasm-decompile处理wasm文件 wasm-decompile token.wasm -o token.dcmp ``` 3. **请求签名保护** ```python # Python复现动态签名(引用[3]案例) import zlib def generate_sign(params): compressed = zlib.compress(params.encode()) return base64.b64encode(compressed).decode() ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值