JS逆向补环境

我们做js逆向常常遇到这样一个问题,就是把“js加密算法代码”扣出来了,在浏览器也能正常得到结果了,
却在使用python execjsnode环境执行时报错、无法得到正确的值。

这是因为:这段 “js加密算法代码” 中使用到了 “浏览器环境”BOM: navigator.userAgent DOM:document.cookie
而这些对象是浏览器自带的,node中没有,所以就会出现上述情况。 那么我们就需要在 “js加密算法代码” 前面补齐这些对象,让它能正确运行,
即补浏览器环境:

var navigator = { "userAgent":"xxx"};
var document = {"cookie":'xx'};

当然,这只是非常粗浅的补了一下,更加细致的补环境可以参考:
JS逆向之浏览器补环境详解

JavaScript逆向分析过程中,充运行环境(即“环境”)是一个关键步骤。由于目标代码通常依赖于特定的执行环境,例如浏览器中的`window`、`document`对象或某些全局函数和变量,直接在非浏览器环境中(如Node.js或调试器中)运行这些代码可能导致错误或无法正常执行。 ### 环境的基本方法 为了确保目标JavaScript代码能够顺利执行,需手动模拟其依赖的运行环境。常见的环境方法包括: - **模拟全局对象**:在非浏览器环境下,需要手动定义`window`、`document`等对象,以防止代码因引用未定义而报错。 - **重写内置函数**:部分代码可能使用了`navigator`、`location`等浏览器API,应根据实际需求进行模拟或覆盖。 - **拦截网络请求**:使用工具如`Proxy`或`fetch`钩子来捕获和分析网络请求,有助于追踪加密参数生成逻辑[^3]。 ### 实践技巧 1. **识别关键依赖**:通过静态分析确定目标代码所依赖的全局变量和函数,例如加密函数是否依赖于某个特定的上下文变量。 2. **逐步调试与断点设置**:在关键函数入口处设置断点,观察调用栈和变量变化,帮助理解加密逻辑流程[^3]。 3. **动态替换函数实现**:可以将原生函数替换成自定义版本,以便记录参数或返回值,辅助分析复杂逻辑。 ### 示例:构造基础运行环境 以下是一个简单的环境示例,模拟浏览器全局对象并支持基本的DOM操作: ```javascript // 模拟 window 和 document 对象 const jsdom = require("jsdom"); const { JSDOM } = jsdom; const dom = new JSDOM(`<!DOCTYPE html><html><body></body></html>`); global.window = dom.window; global.document = dom.window.document; // 模拟 navigator 和 location global.navigator = { userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36" }; global.location = { href: "https://example.com", hostname: "example.com" }; // 现在可以安全地加载和执行目标JS代码 ``` ### 自定义函数拦截与调试 若目标代码中存在类似如下结构的函数: ```javascript function f() { // 此处省略n行 } ``` 可将其替换为带有日志输出的版本,用于跟踪输入输出: ```javascript const originalF = f; f = function(...args) { console.log('Function f called with:', args); const result = originalF.apply(this, args); console.log('Function f returned:', result); return result; }; ``` 此类技术适用于对加密参数生成函数进行监控和调试[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值