19 JavaScript的hook

什么叫hook?

Hook技术又叫钩子函数,在系统没有调用该函数之前,钩子程序就捕获该消息,钩子函数先得到该函数的控制权,这时钩子函数既可以改变该函数的执行行为,还可以强制结束消息的传递,简单来说。就是把系统的程序拉出来,来变成我们自己执行的片段。我们可以控制执行函数的入参和出参。

为什么能实现hook?

客户端拥有js的最高解释权,可以决定在任何的时候注入js服务器而无法左右,只能通过 检测和混淆手段令hook难度加大,但是却无法阻止hook。

hook的目的:找到函数入口以及一些参数的变化,便于分析js逻辑。

例如, hook eval:

  1. eval_ = eval; // 先保存系统的eval函数
  2. eval = function(s){
  3. console.log(s);
  4. debugger;
  5. return eval_(s);
  6. }
  7. eval()
  8. eval.toString = function(){return 'function eval() { [native code] }'} // 可能会被检测到, 用这种方案来进行

对Function的hook, 主要为了解决无限debugger:

  1. var free_function_constructor = (function(){}).__proto__.constructor;
  2. (function(){}).__proto__.constructor = function(arg){
  3. console.log("自由无畏");
  4. if(arg ==='debugger'){
  5. return function(){}
  6. } else {
  7. return new qiaofu_function_constructor(arg);
  8. }
  9. }

上面都是hook的系统函数. 但有时, 我们需要hook某个属性. 此时应该怎么办?

  1. var v;
  2. Object.defineProperty(document, "cookie", {
  3. set: function(val) {
  4. console.log("有人来存cookie了");
  5. v = val;
  6. if(val.indexOf("uuid")){debugger;}
  7. return val;
  8. },
  9. get() {
  10. console.log("有人提取cookie了");
  11. debugger;
  12. return v;
  13. }
  14. });

剩下的咱就不再赘述了. 在逆向时, 常用的主要有:

hook eval 、hook Function 、hook JSON.stringify、JSON.parse 、setInterval, setTimeout, hook cookie

19 JavaScript的hook的更多相关文章

  1. 19+ JavaScript 常用的简写技巧

    博主说:对于任何基于 JavaScript 的开发人员来说,这绝对是一篇必读的文章,乃提升开发效率之神器也. 正文 js 1. 三元运算符 当你想用一行代码来写if...else语句的时候,使用三元操 ...

  2. 19.JavaScript

    简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型 1.注释 单行 // 多行 /* */ 2.引用方式 <head> <meta c ...

  3. python笔记-19 javascript补充、web框架、django基础

    一.JavaScript的补充 1 正则表达式 1.1 test的使用 test 测试是否符合条件 返回true or false 1.2 exec的使用 exec 从字符串中截取匹配的字符 1.3 ...

  4. javascript总结19:javascript 使用概述

    1 JS作用 1.验证表单(以前的网速慢)`` 2.页面特效(PC端的网页效果) 3.移动端(移动web和app) 4.异步和服务器交互(AJAX) 5.服务端开发(nodejs) 2 浏览器的主要构 ...

  5. 19 JavaScript数组 &数组增删&最值&排序&迭代

    关联数组(散列) 关联数组又叫做散列,即使用命名索引. JavaScript数组只支持数字索引. JavaScript对象使用命名索引,而数组使用数字索引,JavaScript数组是特殊类型的对象. ...

  6. 2016/01/19 javascript学习笔记-name属性

    1. name属性只在少数html元素中有效:包括表单.表单元素.<iframe>和<img>元素. 基于name属性的值选取html元素,可以使用document对象的get ...

  7. frida(hook工具)的环境搭建

    一.简介 frida 是一款基于 python+javascript 的 hook 框架,可运行在 android.ios.linux.win等各个平台,主要使用的动态二进制插桩技术. Frida官网 ...

  8. javascript 笔记!

    1.通过javascript向文档中输出文本 document是javascript的内置对象,代表浏览器的文档部分 document.write("Hello Javascript&quo ...

  9. JavaScript第一天

    1.静态的网页技术和动态的网页技术 静态网页是相对于动态网页而言,是指没有后台数据库.不含程序和不可交互的网页.你编的是什么它显示的就是什么.不会有任何改变.静态网页相对更新起来比较麻烦,适用于一般更 ...

  10. JavaScript深究系列 [一]

    1. JavaScript中 = = = 首先,== equality 等同,=== identity 恒等. ==, 两边值类型不同的时候,要先进行类型转换,再比较. ===,不做类型转换,类型不同 ...

随机推荐

  1. vscode配置远程开发环境

    下载vscode 下载好了后,先安装两个插件,商店里面搜索"Chinese",中文语言包, "python"安装包,安装好后重启vscode. 本地的pytho ...

  2. 【.Net Core】.Net Core 源码分析与深入理解 - 配置中心 Startup.cs (二)

    源码版本: .Net Core 3.1.14 上篇文章: [.Net Core].Net Core 源码分析与深入理解 - 入口 Program.cs (一) 注意:本篇文章主要研究的是 Startu ...

  3. 【Azure 环境】记录使用Notification Hub,安卓手机收不到Push通知时的错误,Error_Code 30602 or 30608

    问题描述 使用Azure Notification Hub + Baidu 推送遇见的两次报错为: 1. {"request_id":2921358089,"error_ ...

  4. 【Azure API 管理】APIM添加Log-to-eventhub的策略后,一些相关APIM与Event Hub的问题

    问题描述 1)    APIM 到Event Hub 写入日志是否有数量限制,比如每秒最大写入数量: 2)    是否可以在同一个APIM配置多个Event Hub,如果可以该APIM写入日志的峰值是 ...

  5. Hugo 建站经验之谈

    前言 建站工具,早已不是一个新颖的话题,抛开可视化建站单论开发层面,各类语言都有推出广受欢迎的建站框架,比如 Python 开发的 Pelican,JavaScript 开发的 Hexo,以及市场份额 ...

  6. c++复习笔记——STL(vector)

    c++-----STL容器系列(1) vector 1 介绍 Vector是stl容器中一种常见的容器 ,基本和数组类似,其大小(size)可变,常用于数组长度不确定时来代替数组,当数据超过vecto ...

  7. [爬坑] termux ssh 设置总是 permission denied

    问题 设置ssh之后,客户端登录会提示 permission denied 的问题,经过排查最终确定是 shell设置错误的问题,解决方法如下 http://new.aidlearning.net/d ...

  8. For 循环跟yield区别?

    for循环遍历一个万亿级别的长列表,会将这个列表的全部数据载入到内存中去,如果你的内存很小就会溢出,即使是内存很大,这个操作也是十分占用资源的. 而使用生成器,则会将数据的状态(例如:遍历到列表的哪个 ...

  9. Java 泛型举例

    1 package com.bytezero.genericity; 2 3 import org.junit.Test; 4 5 import java.util.*; 6 7 /** 8 * @a ...

  10. Java 多线程------例子(1) --创建 三个窗口 买票 总票数为 100张 使用继承Thread类的方式

    1 package com.bytezero.threadexer; 2 3 4 5 /** 6 * 7 * 创建 三个窗口 买票 总票数为 100张 使用继承Thread类的方式 8 * @auth ...