gpt4 book ai didi

Javascript - 如何在每次调用后跟随功能并改变它们的用途?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:56 24 4
gpt4 key购买 nike

我正在开发一个简单的 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])))

而且还在工作。所以这是我的问题:

  1. 如何将 javascript 代码拆分成更小的函数?我知道编译器基本上是这样做的,但我也看到一些在线 JS 美化器和语法高亮器能够区分代码并正确地做他们的事情。我的意思是基本的正则表达式可以完成这项工作吗?

  2. 这是行不通的,它应该:

    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));

    为什么?

  3. 有没有类似的正在进行的项目?也许我可以获得一些注释或引用。

最佳答案

首先祝贺您所做的一切。这有点疯狂,但几乎是绝妙的。

问题一:

我不知道你是怎么做到的。我花了一些时间思考同样的原则。

问题二:

您的第一个示例不起作用,因为第一次调用 a 它实际上是 a( "2 * 2 = "+ x ) 其中 x 将是第二次调用,因此当第一个 a被称为你得到一个 NaN 因为你给它一个 String

问题三:

相似的项目?嗯,让我想想……我想每个人都有自己的项目来做这样的事情,因为代码是可见的。我不知道实际来源。

提案:

您可以将 2D 方形矩阵视为 3D Rubik's Cube,这样您就可以将其打乱并解开。有趣的是,您可以将一系列 Action 结合起来,实际上成为做某事的重要功能。无论如何,对于这类事情,恕我直言,最好的解决方案可能是复制然后删除 JS 语言的主要对象,并将其存储在匿名函数内的复杂图形中,没有人可以进入其中乱七八糟,至于代码是不可读,我认为这是一门艺术。

关于Javascript - 如何在每次调用后跟随功能并改变它们的用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9936626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com