aHR0cHM6Ly9hcHAuc3V5aW53ZWFsdGguY29tL3N5bGMvcGFnZS9pbmRleC5odG1sI3BhZ2UvMTAvMTkvUDEwMTkuaHRtbD9wcmRDb2RlPUowMjM0Nw==
加密
开始两个debugger都可以使用“一律不在此处暂停过掉”
跟栈,或者搜encrypt都可以找到加密位置
b就是请求数据
k是b生成H_TIME和H_NONCE(随机生成,只有-不变和一个4不变,可以写死)之后的请求参数,用于加密
e是一个随机生成的16位uuid(可以写死),用于后续的aes加密的key
4
进去就可以看到是个md5,rsa,aes的混合加密,都没有魔改可以直接使用加密库进行加密即可
解密
解密入口
进去就是一个原生的aes解密
上面一堆对返回的加密数据做处理,然后做aes解密,iv,mode,padding都在里面
cookie
后面只剩下最后一个cookie上的
上面那个是服务器端返回的,下面那个是js生成的
hook一下cookie就可以看到,FSSBBIl1UgzbN7NP的设置位置
跟栈找到vm的生成位置,这个d.的文件是一直不变的,vm里面的是一直会变,而且_$eN不能写死
后面就是把这个d.开头的文件扣下来补环境即可,运行会发现报错找不到$_ts,搜索即可,可以看到生成位置在index.html中的一个script标签中,拿下来补上去就可以正常运行了,剩下的就是补环境了,缺啥补啥,没有检测Error和原型链,也没有检测toString,最后补出来的长度为235位就能过(在浏览器代码块中运行的也是235位),192位过不了。
// 几个检测点
ActiveXObject = undefined
window.name
window.top = window;
window.self = window;HTMLCollection_script = [script, script]
HTMLCollection_script.getAttribute = function getAttribute(tagName) {debugger
}
HTMLCollection_meta = [meta]
HTMLCollection_meta.getAttribute = function getAttribute(tagName) {debugger
}
// document中注意一下getElementsByTagName这个方法不能直接返回一个标签对象,要返回HTMLCollection类数组对象,后续调用是通过数组下标调用的
document = {'getElementsByTagName': function getElementsByTagName(tagName) {debugger;if (tagName === "script"){return HTMLCollection_script}if (tagName === "meta") {return HTMLCollection_meta}if (tagName === "base") {return HTMLCollection_base}},"visibilityState": "visible",
}
插桩位置if以及打印日志的变量_$g4