iOS开发通过微信学习hijack(一)函数劫持

  前段时间通过学习WCDB,基本掌握了WCDB的使用方法,最近通过解压微信ipa包,发现里面有一个hijack.js文件。就在网上搜了一下hijack, 没想到发现了新天地,JS函数劫持

什么是js函数劫持?

  函数劫持,顾名思义,即在一个函数运行之前把它劫持下来,添加我们想要的功能。当这个函数实际运行的时候,它已经不是原本的函数了,而是带上了被我们添加上去的功能。这也是我们常见的钩子函数的原理之一。

函数劫持的原理

  一般的劫持原理都是一个思路:
一、使用新的变量保存即将被劫持的函数。
二、改写被劫持函数的功能。
三、在被劫持函数的末尾段(或者其他适当部位)重新调用重写之前的函数。注:某些场合下不会有第三步,比如恶意攻击的时候

js函数劫持示例

<html>
    <head>
    </head>
    <body>
        <script>
        let warn = alert
window.alert = (t) => {
    warn('How are you?')
}

alert('Help me...!!!')
        </script>
    </body>
</html>

运行结果如下:
这里写图片描述
大家可以看到按照本来弹框要展示的内容是Help me...!!!但实际上却展示出来了How are you?。大家可以明显感觉到js函数被劫持的效果。
当然了,js函数被劫持后,执行了某些操作后,仍然可以执行原来的内容。具体代码如下:

let warn = alert
window.alert = (t) => {
    if (confirm('How are you?')) warn(t)
}

alert('Help me...!!!')

运行结果如下:
这里写图片描述
选中确认后:
这里写图片描述
我们发现确认后,又重新走了原来的alert方法。这种劫持的方式,在某些时候对我们来说非常的有用,比如采集信息,数据埋点等等。

反劫持

  知道了劫持的原理和方式,我们就可以有针对性的措施。
措施1:新建一个页面,在控制台输入alert可以看到如下的结果:

function alert() { [native code] }

[native code]说明代码没有被劫持,对于别的方法是否被劫持,我们可以如法炮制。
措施2:对于某些方法,我们在开发过程中主动进行劫持,然后加入采集用户信息,并上报的代码,如果有某些人恶意对我们这个敏感函数进行劫持的时候,我们就可以尽可能多的采集到劫持者的信息了。

js函数劫持的作用

由于自己是非专业前端人士,认知有限,在这里就说说自己的看法吧,希望大家不要见笑。个人认为函数劫持在数据埋点,反劫持,增强函数功能等很多的方面都可以使用到。
参考博客:
https://segmentfault.com/a/1190000006967018

更多优质文章,可以微信扫码关注:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/hhl110120/article/details/80054227