JS逆向之浏览器补环境(一)
简介
今天分享是是浏览器环境检测以及node js补环境
我们点击检测设备信息看发出的请求,可以看到是sign和data
这个data看起来像base64,我们试一下,发现不是
分析加密位置
可以看到经过混淆了
我们选中看一下
那我们接下来就知道了,要逆向的两个参数变量
_0x392f2d
_0xd9e63f
我们直接把整个文件拷贝到webstrom里,看一下这两个变量在哪里定义的,可以看到在这
由于我们只需要这两个变量,所以下面的代码可以删除了,变成这样
追踪检测
然后引入proxy检测对象变化的代码
proxy.js
let _window = {
};
let _stringify = JSON.stringify;
JSON.stringify = function (Object) {
// ?? 的意思是,如果 ?? 左边的值是 null 或者 undefined,那么就返回右边的值。
if ((Object?.value ?? Object) === global) {
return "global";
}
return _stringify(Object);
};
function getMethodHandler(WatchName) {
let methodhandler = {
apply(target, thisArg, argArray) {
let result = Reflect.apply(target, thisArg, argArray);
console.log(`[${
WatchName}] apply function name is [${
target.name}], argArray is [${
argArray}], result is [${
result}].`);
return result;
},
construct(target, argArray, newTarget) {
let result = Reflect.construct(target, argArray, newTarget);
console.log(`[${
WatchName}] construct function name is [${
target.name}], argArray is [${
argArray}], result is [${
JSON.stringify(result)}].`);
return result;
}
};
return methodhandler;
}
function getObjHandler(WatchName) {
let handler = {
get(target, propKey, receiver) {
let result = Reflect.get(target, propKey, receiver);
if (result instanceof Object) {
if (typeof result === "function") {
console.log(`[${
WatchName}] getting propKey is [