前段时间通过学习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

更多优质文章,可以微信扫码关注:

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

  1. iOS开发通过微信学习WCDB(二)

      通过<iOS开发通过微信学习WCDB(一)>这篇博客,相信大家对WCDB已经有了一个简单的了解和认识.这篇文章主要是为了进一步深入的学习 ###数据库加密   上篇文章中提到了,自己在 ...

  2. iOS开发通过微信学习WCDB(一)

      最近通过对微信ipa包解压发现微信有使用WCDB这个开源库,搜索了一下了解到WCDB(WeChat Database)是一个高效.完整.易用的移动数据库框架,基于SQLCipher,支持iOS, ...

  3. iOS开发通过微信学习WCDB(三)

      通过之前的两篇文章对wcdb能够简单的使用了,这些知识储备多时,最近终于可以派上用场了,最近app有一个通讯录的新功能,实现联系人列表的排序,以及检索,刚好可以用用wcdb去实现. 联系人模型的建 ...

  4. iOS开发通过微信学习WCDB(四)

      最近打算将封装一个基于wcdb操作的数据库私有库,在封装使用的过程中遇到了一些问题,将问题整理了一下,分享给大家. 私有pod库依赖于WCDB 造成lint失败   最开始遇到这个问题的时没有眉目 ...

  5. iOS开发Swift语言学习教程-欧阳坚-专题视频课程

    iOS开发Swift语言学习教程-16345人已学习 课程介绍         Swift这套视频是针对有Objective-C/iOS基础,想转成Swift开发的学习视频,视频中从Swift语法,结 ...

  6. iOS开发-类似微信录音上滑取消功能

    iOS开发-类似微信录音上滑取消功能 前言 效果 代码 先自定义UIButton 使用 监听上下滑动代码 前言 在社交媒体中开发中遇到需要做类似微信录音上滑取消功能,例子,虽然不是很好看,但是细节满满 ...

  7. iOS开发-关于微信WCDB的使用 WCDB嵌套模型的使用

    iOS开发-关于微信WCDB的使用 WCDB嵌套模型的使用 前言 开发前准备 开发 关于生成WCDB文件 选择new file即可找到 关于嵌套模型的生成 分两步 选择new file即可找到 增删改 ...

  8. IOS 开发高手课 学习笔记(第二部分)

    第二部分主要是性能监控相关 Part 7. 包大小:如何从资源和代码层面实现全方位瘦身? 官方 App Thinning App Thinning 是由苹果公司推出的一项可以改善 App 下载进程的新 ...

  9. 插件 iOS开发之微信自动抢红包功能

    最近在学习 iOS 逆向开发的时候,为了练手,开发了一个 iOS 版的微信抢红包 tweak,并且已经发布到了 Github 上面. 微信抢红包 Tweak 的 Github 地址   点击打开链接 ...

  10. iOS开发之微信自动抢红包功能

    最近在学习 iOS 逆向开发的时候,为了练手,开发了一个 iOS 版的微信抢红包 tweak,并且已经发布到了 Github 上面. 微信抢红包 Tweak 的 Github 地址   点击打开链接 ...

最新文章

  1. Google 顶级论文:机器学习系统,隐藏多少技术债?
  2. 南阳理工大学 gnns 新基准
  3. mongodb与java结合_MongoDB初探系列之四:MongoDB与Java共舞
  4. 20172325 2018-2019-1 《Java程序设计》第二周学习总结
  5. SparkSQL调优
  6. vscode中安装webpack_VSCode下手动构建webpack项目(示例代码)
  7. plsql中文乱码,显示问号
  8. LVGL(2)Visual Studio模拟器使用
  9. java对mysql进行查找替换_java对mysql的增删改查
  10. ITK简介与ITK Pipeline
  11. android 多媒体相册,朵朵多媒体相册免费版
  12. 如何编译运行opencv的sample
  13. 用微信公众号控制ESP8266的LED,进一步使用微信当遥控器
  14. 對Googgle adsense廣告作弊和Googeladsense點擊廣告的生存前景看法
  15. ALFA机器视觉深度学习外观检测自学习人工智能软件——ocr字符检测
  16. c++语言常量,C++常量(constant)
  17. 不常用SQL语句整理
  18. 【FAQ】应用集成HMS Core部分服务出现“ 6003报错”情况的解决方法来啦
  19. Winform自定义MessageBox
  20. excel怎么设置打印区域_如何设置打印预览,Excel打印功能介绍

热门文章

  1. delphi char数组、string和Pchar的相互转换
  2. id 查找apple,怎么查找我的apple id?
  3. Nginx跳转到用户首页
  4. 自定义QGraphicsItem
  5. Android 软件行为监控系统 的原理 主要是利用binder机制原理添加一个filter
  6. 十种常见的代码编辑器
  7. org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lett
  8. 小米笔记本Ruby默认开启fn键如何解决方法步骤
  9. springmvc(表现层/Web层框架)
  10. win32应用程序和win32控制台应用程序