JS代码混淆
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!")');