控制流平坦化是一种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

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

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

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