暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Proxy代理(二次修改)

y小白 2022-02-09
2438

Proxy(二次修改)

Proxy
二次封装,js逆向补环境,修复了昨天的bug,挺尴尬的

(function () {
function set_traverse_object(tarrget, obj, recursion_layers) {
recursion_layers -= 1;
console.log();
for (let prop in obj) {
const value = obj[prop];
const tg_name = `${tarrget}.${prop.toString()}`;
const value_type = get_value_type(value);
if (value && value_type === "object" && recursion_layers >= 1) {
set_traverse_object(tg_name, value, recursion_layers);
continue
}
if (value && value.toString() !== '[object Object]') {
console.log(`setter hook->${tg_name}; value-> ${value}; typeof-> ${value_type}`);
continue
}
console.log(`setter hook->${tg_name}; value-> ${value}; typeof-> ${value_type}\n`)

}
}

function new_handel(target_name, obj, number) {
return new Proxy(obj, my_handler(target_name, number))
}

function get_value_type(value) {
if (Array.isArray(value)) {
return 'Array'
}
return typeof value;
}

function my_handler(target_name, number) {
return {
set: function (obj, prop, value) {
const value_type = get_value_type(value);
const tg_name = `${target_name}.${prop.toString()}`;

if (value && value_type === "object") {
set_traverse_object(tg_name, value, number)
} else {
console.log(`setter hook->${tg_name}; value-> ${value}; typeof-> ${value_type}`)
}
return Reflect.set(obj, prop, value);
},
get: function (obj, prop) {
const tg_name = `${target_name}.${prop.toString()}`;
const value = Reflect.get(obj, prop);
let value_type = get_value_type(value);
if (value && value_type === 'object') {
return new_handel(tg_name, value, number)
}
console.log(`getter hook->${tg_name}; value-> ${value}; typeof-> ${value_type}\n`);
return value
}
}
}

window = new Proxy(window, my_handler(Object.keys({window})[0], 30));
}());

代理效果如下,深层代理,更直观

getter  hook->window.document.cookie;  value-> undefined;  typeof-> undefined

getter hook->window.location.href; value-> https://mobile.pinduoduo.com/; typeof-> string

getter hook->window.location.port; value-> ; typeof-> string

{ addEventListener: [Function: addEventListener] } addEventListener
getter hook->window.document.addEventListener; value-> function () {
}; typeof-> function

getter hook->window.document.addEventListener; value-> function () {
}; typeof-> function

getter hook->window.document.addEventListener; value-> function () {
}; typeof-> function


文章转载自y小白,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论