Hook 钩子技术及代码注入的 3 种方式

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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值