步骤

  • 寻找Hook
  • 编写hook逻辑
  • 调试

公式

old_func = func
func = function(){my task;return func.apply(argument)
}
// 修改原生的方法,伪装没有被hook,比如toString方法
func.prototype······  = ······

hook对象中的属性

hook对象中的属性
old_attr = obj.attr
Object.defineProperty(obj, 'attr', {get:function(){console.log(cookie_cache);return old_attr},set:function(val){return ·······}
})

关于hook

  1. 如果能修改源码,那么一般来说源码修改比hook方便
  2. 系统/框架API无法轻松通过源码修改来实现我们的目的
  3. js由于是解释型语言,代码 == 二进制,一般使用源码修改修改方法
  4. js语言由于是解释型语言,无法通过全局root定位到js所有方法定义,现代js为了避免变量污染大多对js代码进行多层js函数包装,故很难通过框架自动化寻找hook点。

为什么能实现hook

客户端拥有js的最高解释权,可以决定在任何时候注入js而服务器无法左右,只能通过检测和混淆手段令hook难度加大,但是却无法阻止。

hook的目的

js hook目的是找到函数入口以及一些参数变化,便于分析js逻辑,但是hook的能力远不及此,只能借助其寻找函数入口。

hook的弊端和缺陷

函数hook一般不会出现hook失败的情况,只有可能是__proto__模拟的不好被检测到了

属性hook当所有网站逻辑都采用Object.defineProperty绑定后,属性hook就会失效

还有一种叫做局部hook,只不过需要在当进入作用域的那一刻进行hook

hook插件(油猴脚本注入)

//run-at document-start
(function(){alert('hook success');var eval_bk = eval;eval = function(val){console.log(val)return eval_bk(val);};eval.toString = function(){return "function eval(){[native code]}"};eval.length = 1;
})();

例子:

// ==UserScript==
// @name         万能hook eval函数
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  eval-everything
// @author       xiaosheng
// @include      *
// @grant        none
// @run-at      document-start
// ==/UserScript==(function() {alert('hook success');var eval_bk = eval;eval = function(val){console.log(val)return eval_bk(val);};eval.toString = function(){return "function eval() { [native code] }"};eval.length = 1;
})();

原型链相关的hook

a = "加密逻辑"
按常规的hook方式,hook   a.split
a.split = function(){debugger;
}
这种方式重写不了得用原型链   ---  :因为a.split方法是通过原型链来的,其实是 String.prototype.splitString.prototype.split = function(){debugger;
}
/*
改进一下,为了让hook之后的代码也能正常执行,下面这样写是错误的
x下面这样写 会导致 递归 栈溢出
String.prototype.split = function(val){str = this.toString()debugger;return str.split(val)
}
再改进一下,
下面这样不行,因为,return str.split_bk(val) 找的是str里面的split_bk方法,
而不是自己重写的这个方法
split_bk = String.prototype.split
String.prototype.split = function(val){str = this.toString()debugger;return str.split_bk(val)
}
*/
String.prototype.split_bk = String.prototype.split
String.prototype.split = function(val){str = this.toString()debugger;return str.split_bk(val)
}
这样也能被检测到,比如通过toString
String.prototype.split.toString = function(){return "function split() { [native code] }"
}
XMLHttpRequest.prototype.setRequestHeader = function(){debugger;
}

hook对象
思考题:比如ob混淆的内存泄露,他是通过依靠正则完成的,那么是否能hook正则,然后让test的检测逻辑发生变化(恒为true, 或者取反,由此处理内存泄露的问题)

RegExp.prototype.test_bk = RegExp.prototype.test
RegExp.prototype.test = function(val){t = thisdebugger;return !t.test_bk(val)
};
RegExp.prototype.test.toString = function(){return "function test() { [native code] }"}

两个常用hook函数

Object.defineProperty(document, "cookie", {get:function(){console.log('getting cookie')},set:function(val){if(val.indexOf('sign')!=-1){debugger;return val;}
}
})
Function.prototype.constructor_bk = Function.prototype.constructorFunction.prototype.constructor = function(){if (arguments[0]=="debugger"){}else{return Function.prototype.constructor_bk.apply(this, arguments)}}

爬虫js逆向基础——05`HOOK`相关推荐

  1. js 模拟点击_爬虫js逆向之无限debugger--抖音第三方数据分析平台的坑

    爬虫js逆向系列 我会把做爬虫过程中,遇到的所有js逆向的问题分类展示出来,以现象,解决思路,以及代码实现,这三方面解析,供大家参考爬虫认知 在程序猿所有的方向中,爬虫是离money最近的一个方向,你 ...

  2. 爬虫js逆向获取信息,有道翻译逆向{‘errorCode‘: 50}及UA错误

    直奔错误记录,{'errorCode': 50}的错误原因,在我的这次学习过程错误是由于请求使用错误,用了get方法,有道翻译是需要用post才能请求: 切记留意请求方式,不要习惯性使用request ...

  3. 21.网络爬虫—js逆向详讲与实战

    网络爬虫-js逆向 js逆向 JavaScript逆向的详细讲解 实战演示 有道翻译 设置密钥和初始向量 对密钥和初始向量进行哈希处理 创建AES对象并解密消息 移除padding并返回结果 前言:

  4. Python调用,爬虫JS逆向——ajax类型数据,数据加密获取步骤和方法(二)

    Python调用,爬虫JS逆向--动态数据 JS逆向-ajax加密数据 加密数据是无法通过在后台找到接口进行请求来获取数据 目标网站:https://jzsc.mohurd.gov.cn/data/c ...

  5. **超防 ja3+加速乐(三种加密(md5,sha1,sha256)) 实战(python爬虫js逆向)

    **超防 加速乐+ja3 实战(python爬虫js逆向) 地址 aHR0cHM6Ly93d3cuaGVmZWkuZ292LmNuL2NvbnRlbnQvY29sdW1uLzY3OTQ4MTE/cGF ...

  6. sojson jsjiami.com.v6 爬虫js逆向

    sojson jsjiami.com.v6 爬虫js逆向 地址:aHR0cDovL3d3dy5wYmMuZ292LmNuL3JteWgvMTA1MjA4Lzg1MzIvaW5kZXg1Lmh0bWw= ...

  7. python爬虫JS逆向加密破解之百度翻译

    最近在从基础学习JS逆向,来分享一下百度翻译JS逆向的整个过程,也有助于自己加深记忆. JS逆向可以说是爬虫工程师必备的知识点了,但是如果对前端知识不够了解还是学起来很有难度的. 想学习的话可以在B站 ...

  8. 腾讯爬虫python_【Python爬虫+js逆向】Python爬取腾讯漫画!

    前一段假期期间,博主已经自学完了Python反爬虫的相关内容,面对各大网站的反爬机制也都有了一战之力.可惜因实战经验不足,所以总体来说还是一个字--菜.前两天,在学习并实战爬取了博主最爱看的腾讯动漫后 ...

  9. python爬虫js逆向加密,Web爬虫处理参数js加密、js混淆、js逆向

    中国空气质量在线监测平台(https://www.aqistudy.cn/html/city_detail.html)在众多的练习中,关闭了前台数据信息的展示,也就是说现在网页是这样的: 但我们主要学 ...

最新文章

  1. oracle技术之Oracle 跟踪事件(一)
  2. docker高级应用之赋予容器独立外网ip
  3. sftp工具都有哪些_色彩校正的工具都有哪些?
  4. 一文看懂深度学习与计算机视觉
  5. Python 中的Pyc文件
  6. 何小鹏发文力挺李斌:2019年最惨的人
  7. 2021-05-15 Nginx面试题
  8. VSCode中Clangd无法找到stdio.h
  9. [从零开始学习FPGA编程-26]:进阶篇 - 基本组合电路-数据选择器(Verilog语言)
  10. linux服务器双网卡路由优先级冲突 Metric值
  11. AT89S52单片机之硬件存储结构
  12. 让电脑假装蓝屏的C语言,【技术天地】一句命令让你的电脑蓝屏~(有强迫症的童鞋试试~~)...
  13. cuba_CUBA Platform 6.3的新增功能
  14. java 循环详解_Java for循环详解
  15. 使用 mongorestore恢复数据以及使用 Studio 3T GUI 管理数据库
  16. 1.1.3 操作系统的发展与分类(手工操作阶段、批处理阶段、分时操作系统、实时操作系统、其它操作系统)
  17. 服务器虚拟化技术实现,服务器虚拟化关键技术及其系统实现
  18. Vs2019创建新项目时,没有任何模板,导致无法创建新项目
  19. 直接从数据库中查询数据生成email附件(excel)
  20. Python 霍兰德人格分析雷达图

热门文章

  1. idea自定义壁纸_IDEA2020.1个性化设置(装逼且实用)
  2. 加密内存卡 TF 卡歌曲或资料拷贝出来的方法,完全可行
  3. 毕设项目 - 基于SSM的网上购物商城(含源码+论文)
  4. 【牛客网】滑动窗口的最大值
  5. D/A数模转换实验——微机原理与接口技术
  6. 年度总结思维导图模板(附软件注册码序列号)
  7. EF 框架的简介、发展历史;ORM框架概念
  8. Android是个什么东西?
  9. dve 二维数组信号 显示波形_VCS课时3:使用DVE进行Debug
  10. 如何使用栈非递归地求解Ackerman函数