- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开发一个简单的 JavaScript 代码混淆器。
假设您有一个 NxN
javascript 函数的二维方阵。对于 n=3:
var m = [
[function(){return 1}, function(){return 2}, function(){return 3}],
[function(){return 4}, function(){return 5}, function(){return 6}],
[function(){return 7}, function(){return 8}, function(){return 9}]
]
现在,在示例中,这些函数中的每一个实际上都包含来自要混淆的代码的代码块,并将其调用。典型的混淆代码如下所示:
(函数(){ m[1][2](m[2][0](m[0][1]))(m[1][0])(m[2] [2])(m[1][1](m[1][2](m[2][0]))); }());
上面的翻译成这样:
(function(){ 6( 7(2) )( 4 )( 9 )( 5( 6( 7 ) ) ); }());
当然,假设典型的 m[x][y]
返回函数或任何必要的东西,这一切都将很容易破译。所以在每次 m[x][y]
调用之后,m[x][y]
会与 m[x+1][y-1] 切换位置]
会在他的转弯位置切换到 m[0][2]
基本上我想把它们混在一起,你甚至不敢尝试破译。可能使用随机生成的数学,并且按照函数进行。
关键是混淆器需要事先知道这个公式,所以它知道调用哪个m[x][y]
,在哪个点调用,并决定调用的顺序引领功能。有效的实现甚至可能导致:
(函数(m[0][0](m[0][0](m[0][0]))(m[0][0])))
而且还在工作。所以这是我的问题:
如何将 javascript 代码拆分成更小的函数?我知道编译器基本上是这样做的,但我也看到一些在线 JS 美化器和语法高亮器能够区分代码并正确地做他们的事情。我的意思是基本的正则表达式可以完成这项工作吗?
这是行不通的,它应该:
window.a = function(x){
var r = x*2;
window.a =alert; // redefines itself after first call
return r;
};
a('2 * 2 = ' + a(2)); // doesn't work. it should've alerted "2 * 2 = 4"
另一方面,这确实有效:
var i = 0;
window.a = function(x){
if(i===1){
i=0;
return alert(x);
}
i=1;
return x*2;
};
a('2 * 2='+a(2));
为什么?
有没有类似的正在进行的项目?也许我可以获得一些注释或引用。
最佳答案
首先祝贺您所做的一切。这有点疯狂,但几乎是绝妙的。
问题一:
我不知道你是怎么做到的。我花了一些时间思考同样的原则。
问题二:
您的第一个示例不起作用,因为第一次调用 a 它实际上是 a( "2 * 2 = "+ x )
其中 x 将是第二次调用,因此当第一个 a被称为你得到一个 NaN
因为你给它一个 String
问题三:
相似的项目?嗯,让我想想……我想每个人都有自己的项目来做这样的事情,因为代码是可见的。我不知道实际来源。
提案:
您可以将 2D 方形矩阵视为 3D Rubik's Cube,这样您就可以将其打乱并解开。有趣的是,您可以将一系列 Action 结合起来,实际上成为做某事的重要功能。无论如何,对于这类事情,恕我直言,最好的解决方案可能是复制然后删除 JS 语言的主要对象,并将其存储在匿名函数内的复杂图形中,没有人可以进入其中乱七八糟,至于代码是不可读,我认为这是一门艺术。
关于Javascript - 如何在每次调用后跟随功能并改变它们的用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9936626/
我是一名优秀的程序员,十分优秀!