当前位置: 首页 > article >正文

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;
    }
  });
})();

同样断点成功


http://www.kler.cn/a/444172.html

相关文章:

  • linux-----网络编程
  • SQL语句自动加上了LIMIT 10,导致报错
  • go-zero(十四)实践:缓存一致性保证、缓存击穿、缓存穿透与缓存雪崩解决方案
  • Go 1.24即将到来!
  • Android详解——ConstraintLayout约束布局
  • 3.使用SD卡挂载petalinux根文件系统
  • Guava 提供了集合操作 `List`、`Set` 和 `Map` 三个工具类
  • HarmonyOS 输入框组件:TextInput 和 TextArea 深度解析
  • Oracle RAC最佳实践-优化私网连接
  • kubeadm安装K8s高可用集群之集群初始化及master/node节点加入calico网络插件安装
  • 系列1:基于Centos-8.6部署Kubernetes (1.24-1.30)
  • 深入浅出Flink CEP丨如何通过Flink SQL作业动态更新Flink CEP作业
  • git stash 的文件如何找回
  • 数据结构--插入排序
  • JAVA开发时获取用户信息失败,分析后端日志信息
  • spring @Mapper Converter转换泛型异常
  • Kafka Streams 在监控场景的应用与实践
  • 使用正则表达式提取PDF文件页数的实现方案
  • 观察者模式(sigslot in C++)
  • docker pull 报错Get “https://registry-1.docker.io/v2/“: net/http: request canceled while waiting for c
  • CSS学习-第三天
  • 基于springboot的在线政务服务系统的设计与实现-仅供学习
  • 实景视频与模型叠加融合?
  • YOLOv8改进 | 损失函数 | 结合NWD的Shape-IoU【全网独家】
  • 广场维修:JAVA
  • Reactor 响应式编程(第三篇:R2DBC)