# 代码还原
接着上一篇。
# 环境加载
在上一篇,我们将加载函数抠出来了后,就可以直接保存在内存中,然后通过直接在内存里面计算拿到结果在还原,这里还原方法类似解 Ob 混淆的还原,通过遍历所有的 CallExpression 节点,找到解密函数实参,然后传参,最后将结果还原即可。
const InFuncReplace = { | |
CallExpression(path){ | |
const {callee,arguments} = path.node; | |
if(!types.isMemberExpression(callee)) return; | |
let func_name = callee.object.name; | |
if(func_name !== 'ff') return; | |
path.replaceWith(types.valueToNode(eval(path.toString()))); | |
} | |
}; |
# 补环境
现在基本的混淆已经解的差不多了,开始补环境。
null_function = function (val) { | |
console.log(val); | |
}; | |
location = { | |
"href": "https://ntp.msn.cn/edge/ntp?locale=en-US&title=New%20tab&dsp=1&sp=%E5%BF%85%E5%BA%94&prerender=1" | |
}; | |
document = {}; | |
document.location = {}; | |
document.location.protocol = "https:"; | |
document.currentScript = {}; | |
document.getElementsByTagName = function (val) { | |
if (val === "script") { | |
return [{ | |
src: "/_sec/cp_challenge/sec-cpt-3-6.js" | |
}, ""]; | |
} | |
}; | |
window = global; |
暂时运行不了,推测有加盐的地方。