声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
分析过程
写一个调用方法
function getTestAB(){
result[1]()
result = result.map(function(num) {
return String.fromCharCode(num);
}).join('');
return result
}
放到vm执行
const {VM} = require("vm2")
const m = new VM({
require: {
external: true, // 允许引入外部模块
root: './' // 设置根目录,确保 vm2 可以找到 jsencrypt 模块
},
sandbox: {
atob: atob,
btoa: btoa,
eval:eval,
}
});
m.setGlobal('bodadominoWindow', dominoWindow)
var code = fs.readFileSync('./环境.js')
code += "\n\n\n\n\n"
code += fs.readFileSync('./携程旅行temp.js')
debugger
function getEncrypt() {
code += `;debugger;headers1()`;
res = m.run(code)
// console.log(res,res.length)
return res
}
补环境代码
const jsdom = require('jsdom');
const crypto = require('crypto');
const {JSDOM} = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`, {
url: ''
});
window = dom.window;
document = window.document; //document对象:代表给定浏览器窗口中的HTML文档,
navigator = window.navigator; // 关于运行当前脚本的应用程序的相关信息
location = window.location; //对象包含当前页面的URL信息
history = window.history; // 历史会话
screen = window.screen; // 浏览器屏幕
setInterval = function () {
}
setTimeout = function () {
}
结果