插桩: 保存代码-->修改保存代码(找到关键信息,输出)-->替换代码     

  • x.push   
  • var n = String.fromCharCode(65);
  • var n = "HELLO WORLD".charAt(2)   // 返回的是L
  • var n = "HELLO WORLD";.charCodeAt(0);  // 返回的是72
  • window.atob    插桩关键字  
  • var bbb = JSON.stringify(aaa, function(key, value){   // 方便查看
        if (value == window){
            return undefined;
        }
        return value;
    })

vmp: 基于栈的vmp,可以使用跳战,跳过部分监测       下面我们是需要找到的

  • 栈-->[2, 1]   
  • OP-->指向下一行指令或者指向下个一个字节     ++操作往下移   
  • 方法参数栈   len v=argument;  v.push()  
  • eval   字符串转成运行的js代码     var aa = eval("function a(){};return a")    aa.apply(this, [.....])   aa.call(this, aaa, aaa, aaa)    使用apply和call 可以向函数穿不定个数的参数

在原型链顶端修改的函数,你在底端是无法hook的,需要在他原型链上进行hook操作,查找只能一步步我看.看这个函数怎么来的,怎么添加上去的

Element.prototype.insertBefore = function insertBefore(a, b) {   // 在原型链上hook
    debugger;
}

promise取值

一旦Promise对象产生结果,可以通过then方法获得这个最终结果。可以通过.then()以及.catch()来操作Promise对象,then()中我们可以接收Promise对象返回的结果作为参数,获取成功和失败的结果,也可以通过catch()把Promise对象返回的失败结果捕捉到。
示例:

let promise = new Promise(( resolve, reject ) => {
 // 进行一些异步操作
 if (/* 异步操作成功 */) {
  resolve(value);
 } else {
  reject(value);
 }

特殊值含义

.abrupt   异步平坦流
mark  wrap可以看成循环
.then  是异步
evle  执行字符串格式的代码
postMessage  // 多线程关键字
worker, Blob //多线程
WebAssembly.instantiateStreaming  WebAssembly.instantiate   //Assm 初始化的
document:
Event:
JSON:
navigator:
location:
window:
Audio: // 视频
canvas:   //画图

6 发xhr请求  替换  修改vm里面的代码

var result = null;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        result = xhr.responseText;
    }
}
xhr.open('GET', 'https://hd.ghzyj.sh.gov.cn/4QbVtADbnLVIc/vm.js', false);     //  使用浏览器替换成自己需要的代码
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send();
result = result.replace('debugger;', '/*debugger;*/'); 
ret = _$Kq.call(_$MB, result);   // 替换result要执行的代码

7.复制对象出来

首先在控制台输出一下对象($_ts)  ----> 然后在控制台输入copy($_)  就可以在外面粘贴了

8.AST还原顺序

还原顺序-->数组乱序处理-->字符串解密处理-->去掉字符串和函数花指令-->流程平坦化还原

9.websocket

let Socket = new WebSocket(url, [protocol]);   // 不管怎么混淆new WebSocket 一定是用的 可以用这个点位WebSocket位置
Socket.readyState;
Socket.onopen;   // 链接建立是触发
Socket.onmessage;  // 客户端接收服务端数据时触发
Socket.send();    // 使用连接发送数据
	1.搜索下断 搜到很多一个个下端
	2.找到Socket对象 hook send方法 直接快速
	假设 p是Socket对象   let p = new WebSocket()
	p.send_ = p.send
	p.send = function(arr){
		debugger;   // 这样下次调用send方法就会在这里断住
		return p.send_(arr)
	}

10.由于es6之前和es6之后版本的区别,然后我配置了package.json里的"type": "module",导致不能window=globalThis,以及只能import导包,,,正确使用应该是globalThis.window = globalThis,或者去掉package.json里的"type": "module"