JS代码混淆

2018-02-05  本文已影响0人  我爱吃肥肠

1,移动时代的前端加密:王浩集使用 estools 辅助反混淆Javascriptchichou

其中提到的重要思想:

执行代码字符串的方式有:创建执行;调用setTimeout()执行;创建new function()执行;使用dom事件执行;

2,__defineGetter__:

Number.prototype.constructor.constructor:

3,实战:

1,小段代码会通过eval或者function来执行,可以通过修改eval和function的原型来直接执行从而获取内部逻辑.比如:

eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('0 3(){2.1(\'这是准备用来做混淆的\')}0 5(){2.1(\'4 6 \')}',7,7,'function|log|console|test|haha|test2|hah'.split('|'),0,{}))

修改eval: eval = function() {

  console.log('eval', JSON.stringify(arguments));

}; 

修改Function: Function = function() {

  console.log('Function', JSON.stringify(arguments));

  return function() {};

};

new Function(修改后的代码字符串)();

截获constructor: Function.prototype.__defineGetter__('constructor', function () {

    return function () {

        console.log('constructor', JSON.stringify(arguments));

    };

});

(function() {}).constructor('console.log("Hello world!")');

上一篇下一篇

猜你喜欢

热点阅读