| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> JS函数hook -> 正文阅读 |
|
[JavaScript知识库]JS函数hook |
前言我在阅读《JavaScript设计模式与开发实践》的第15章 装饰者模式,突然发现JS逆向中hook函数和js中的装饰者模式有点像,仔细阅读完全篇后更是对装饰器与hook有了更深的理解于是便有了这篇文章来记录一下该操作。 hook直译的意思为钩子,在逆向领域通常用来针对某些参数,变量进行侦听,打印输出,替换等操作。 正文示例代码
hook代码这是一个很简单加法函数,通过Hook能获取到这两个参数的值,相当于在return之前添加了一句代码
完整代码
再次调用 不过这个例子可能过于简单,我所要表达的意思是,通过Hook,定位到我们想Hook的函数与变量,通过一系列操作(函数复写,元编程),只要触发该函数或使用(取值,修改)该变量,便能将我们想要的结果(前后的结果(如 加密前,加密后))获取到。这才是我们的目的。 书中给的例子想说明的,想为某个原函数(比如这里的add)添加一些功能,但该原函数可能是由其他开发者所编写的,那么直接修改原函数本身将可能导致未知BUG,于是便可以用上面的方式进行复写原函数的同时,还不破坏原函数。 this指向问题但并不是什么函数都能这样操作,或者说这样操作会导致原本函数可能执行不了,比如this指向,虽说没有修改原函数,但是原函数的this已经给我们更改成当前环境下(如
报错:
解决办法: 只需要将this指向设置为document即可,代码改写如下
但这样做略显麻烦,且有些函数你可能都不知道this的指向,但又想要复写该函数,书中也提及到用?AOP装饰函数 用 AOP 装饰函数先给出?
注:这里after与书中略有不同,书中的是将 那么将我们一开始的加法例子便可以替换为
:::danger 注:这种装饰方式叠加了函数的作用域,如果装饰的链条过长,性能上也会受到一定的影响 ::: 但该方法是直接修改原型方法,有些不喜欢污染原型的方式(用原型方式是真的好写),那么做一些变通,将原函数和新函数作为参数传入,代码如下
add函数修改如下
同样也能达到所要的目的。 写后感
对比两者方法,前者是对函数进行替换,而后者通过函数原型链将参数与结果通过回调函数的形式进行使用。在不考虑this指向,我个人更偏向第一种写法,而第二种写法也确实让我眼前一亮,很巧妙的使用js的原型链,从而避免this指向的问题。 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:28:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |