# 代码还原

接着上一篇。

# 环境加载

在上一篇,我们将加载函数抠出来了后,就可以直接保存在内存中,然后通过直接在内存里面计算拿到结果在还原,这里还原方法类似解 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;

暂时运行不了,推测有加盐的地方。

Edited on

Give me a cup of [coffee]~( ̄▽ ̄)~*

Mr2 WeChat Pay

WeChat Pay