js逆向基础-hook调试
object.definePrperty
方法一 控制台注入hook
缺点有的站点还是会晚一点
Object.defineProperty()
是 JavaScript 中用于定义或修改对象属性的方法。通过该方法,可以对对象的属性进行更细粒度的控制,例如:设置 getter 和 setter、修改属性是否可枚举、可配置、可写等特性。
示例
let obj = {};
Object.defineProperty(obj, 'fullName', {
get: function() {
return this.firstName + ' ' + this.lastName;
},
set: function(value) {
const parts = value.split(' ');
this.firstName = parts[0];
this.lastName = parts[1];
},
enumerable: true,
configurable: true
});
obj.firstName = 'John';
obj.lastName = 'Doe';
console.log(obj.fullName); // 输出 "John Doe"
obj.fullName = 'Alice Smith';
console.log(obj.firstName); // 输出 "Alice"
console.log(obj.lastName); // 输出 "Smith"
get
方法:这是属性fullName
的访问器(getter)方法。当你访问obj.fullName
时,get
方法会被调用,返回this.firstName + ' ' + this.lastName
。这里this
指代obj
对象,因此firstName
和lastName
是该对象的其他属性。set
方法:这是属性fullName
的设置器(setter)方法。当你给obj.fullName
赋值时,set
方法会被调用。set
方法中的value
是传入的值(例如Alice Smith
),通过split(' ')
方法将值按空格拆分成firstName
和lastName
。然后,这两个值分别赋给obj.firstName
和obj.lastName
。
hook断cookie
(function(){
var aaa ="";
Object.defineProperty(document,'cookie', {
get: function(){
return aaa;
},
set: function(val){
console.log(val);
aaa = val;
return aaa;
}
});
})();
刷新一下,找到第一个js文件,点击在面板中打开
在第一行打上断点
输入代码
放行cookie就被打印了出来
从输出的里面点击vm虚拟机,在对应行上打上断点
刷新重新输入
这样只要他想设置这个值,我们就能够拿到他调用堆栈
一步一步往上跟就可以了
方法二:利用fidder-hook
把上面获取cookie的代码复制过来到编程猫插件
让流量走fidder
直接刷新页面cookie直接输出
案例 iqiyi
首先输出cookie
dfp,尝试键入_dfp的时候让他debugger
(function(){
var aaa ="";
Object.defineProperty(document,'cookie', {
get: function(){
return aaa;
},
set: function(val){
if(val.indexOf("_dfp")!==-1)
{
debugger;
}
console.log(val);
aaa = val;
return aaa;
}
});
})();
刷新页面成功断点
这里为空放行一次
从堆栈往前跟
iqiyi这里window.name就是这个值 _dfp
把代码修改一下只要设置window.name就debug
(function(){
var aaa ="";
Object.defineProperty(window,'name', {
get: function(){
return aaa;
},
set: function(val){
debugger;
aaa = val;
return aaa;
}
});
})();
同样断点成功