关于前端:js常见入门加密技术之控制流平坦化

34次阅读

共计 970 个字符,预计需要花费 3 分钟才能阅读完成。

控制流平坦化是一种 JavaScript 代码混同技术,其目标是减少代码的复杂度以避免恶意代码剖析和反编译。

该技术通过从新组织代码中的控制流语句(如 if、for、while 语句等)来减少代码的复杂性。具体而言,它会将这些语句拆分成多个小的、互相嵌套的语句,使得代码中的控制流门路更加简单、难以了解。

以下是一个简略的控制流平坦化示例代码:

function foo(x, y) {
  var a = x + y;
  if (a > 10) {while (a < 100) {
      a += x;
      if (a < 50) {a -= y;} else {a += y;}
    }
  } else {for (var i = 0; i < a; i++) {if (i % 2 == 0) {a += x;} else {a -= y;}
    }
  }
  return a;
}

foo(3, 4);

通过控制流平坦化解决后,上述代码的构造将变得更加简单和难以了解,如下所示:

function foo(x, y) {
  var a = x + y;
  if (a > 10) {if (a < 100) {while (true) {if (a < 50) {
          a -= y;
          continue;
        }
        a += y;
        continue;
      }
    } else {while (true) {if (a < 50) {
          a -= y;
          continue;
        }
        a += y;
        continue;
      }
    }
  } else {for (var i = 0; i < a; i++) {if (i % 2 == 0) {
        a += x;
        continue;
      }
      a -= y;
      continue;
    }
  }
  return a;
}

foo(3, 4);

通过上述解决,代码中的控制流语句被拆分成了多个小的语句块,并应用了一些有限循环和 continue 语句来减少代码复杂性。这样解决后的代码更加难以了解和剖析,从而减少了代码的安全性。在这个例子中,本来的 if/else 分支语句和 while 循环被替换成了一系列的 goto 语句。这种扭转使得代码的执行流程变得更加简单和难以了解,减少了代码的混同水平,从而进步了程序的安全性。

值得注意的是,控制流平坦化并不会改变程序的行为,它只是扭转了程序的构造和执行流程。

以上是一个简略的例子,理论应用控制流平坦化技术时,可能会应用更加简单的算法和变换形式来混同代码。

jsjiami.com

如果您对文章内容有不同认识, 或者疑难,欢送到评论区留言,或者私信我都能够。

也能够到上方网站,底部有我联系方式详谈

如遇本人源码加密后没备份,能够找咱们解决解出复原源码,任何加密都能够。

正文完
 0