Hook 技术介绍
-
-
Hook 技术中文又叫作钩子技术,它就是在程序运行的过程中,对其中的某个方法进行重写,
-
在原有的方法前后加入我们自定义的代码。相当于在系统没有调用该函数之前,钩子程序就先捕获该消息,
-
可以先得到控制权,这时钩子函数便可以加工处理(改变)该函数的执行行为。
-
通俗点来说呢,比如我要 Hook 一个方法 funA,可以先临时用一个变量存一下,把它存成 A,
-
然后呢,我再重新声明一个新的方法 funB,里面添加自己的逻辑,比如加点调试语句、输出语句等等,
-
然后在新的方法 funB 里面再调用 A,这里调用的 A 就是之前原始的方法 funA。
-
这样就相当于新的方法 funB 里面混入了我们自己定义的逻辑,同时又把原来的方法 A 也执行了一遍。
-
所以这不会影响原有的执行逻辑和运行效果,但是我们通过这种改写便可以顺利在原来的 A 方法前后加上了我们自己的逻辑,这就是 Hook。
-
def funA():
print('hello')
A = funA()
def funB():
print('你好')
funA()
print('world')
B = funB()
-
上面案例就是一Hook方法的简单演示
- 我们要寻找funA执行的位置,通过执行我们funB方法,输出 你好 以后就是执行 funA 的位置
-
怎么使用 Hook 的方式来找到加密 id 的加密入口点呢?原理和上面一样
- 加密 id 是一个 Base64 编码的字符串,那么生成过程中想必就调用了 JavaScript 的 Base64 编码的方法,
- 这个方法名叫作 btoa,这个 btoa 方法可以将参数转化成 Base64 编码。
- 当然 Base64 也有其他的实现方式,比如利用 crypto-js 这个库实现的,这个可能底层调用的就不是 btoa 方法了。
- 所以,其实现在并不确定是不是调用的 btoa 方法实现的 Base64 编码,那就先试试吧。
- 要实现 Hook,其实关键在于将原来的方法改写,这里我们其实就是 Hook btoa 这个方法了,
- btoa 这个方法属于 window 对象,我们将 window 对象的 btoa 方法进行改写即可。
-
具体使用方法如下:
(function () {
'use st