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 对象,因此 firstNamelastName 是该对象的其他属性。
  • set 方法:这是属性 fullName 的设置器(setter)方法。当你给 obj.fullName 赋值时,set 方法会被调用。set 方法中的 value 是传入的值(例如 Alice Smith),通过 split(' ') 方法将值按空格拆分成 firstNamelastName。然后,这两个值分别赋给 obj.firstNameobj.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;
    }
  });
})();

同样断点成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值