SWF-Verschlüsselung

SWF-Verschlüsselung (oder Bytecode-Verschlüsselung) macht dekompiliertes ActionScript zu einer verwirrenden und schwer verständlichen Angelegenheit. Es ist keine wirkliche Verschlüsselung, aber im Kontext von Code ist diese Maßnahme sinnvoller. Obwohl Verschlüsselung Ihren Code komplett unlesbar machen kann, leidet sie unter einem klassischen Problem der Kryptographie - der Schlüssel muss bei den verschlüsselten Daten bleiben. Es könnte also ein automatisches Tool erstellt werden, um den Code zu entschlüsseln. Sobald dies passiert, ist der vollständing entschlüsselte, unverschleierte Code sichtbar.

Stoppt Flash-Decompiler:

Aber es ist noch nichts verloren. secureSWF implementiert vier sehr effektive SWF-Verschlüsselungsverfahren, um SWF-Dateien vor Decompilern zu schützen. Diese Verfahren können in verschiedensten Dimensionen genutzt werden.

Wie die Verschlüsselung von secureSWF funktioniert

secureSWF ändert die Bytecode-Anweisungen in SWF-Dateien, indem es Verfahren nutzt, um Flash-Decompiler auszutricksen und zum Absturz zu bringen. Dadurch können sie nichts nutzbares generieren, während das Verhalten und der Output der Flash-Applikation gleich bleibt. Hier ist ein Beispiel, bei dem wir einige der Verfahren angewendet haben, und glücklicherweise hat einer der Decompiler etwas generiert, was wir zeigen können (alle anderen stürzten ab):

Code vor der Verschleierung
private function getNeighbours(i:int, j:int):Array{
  var a:Array = new Array();
  for (var k = 0; k < 8; k++){
    var ni = i + int(neighbour_map[k][0]);
    var nj = j + int(neighbour_map[k][1]) ;
    if (ni < 0 || ni >= xsize || nj < 0 || nj >= ysize)
      continue;
    a.push(Cell(cells[ni][nj]));
  }
  return a;
}

Code nach der Verschleierung
private function getNeighbours(_arg1:int, _arg2:int):Array{
  var _local3:Array = -(((null - !NULL!) % ~(undefined)));
  var _local4:*;
  var _local5:*;
  var _local6:*;
  _local3 = new Array();
  _local4 = 0;
  for (;//unresolved jump
  , _arg2 < 8;_local4++) {
    _local5 = (_arg1 + int(!NULL!));
    _local6 = (_arg2 + int(!NULL!));
    if (true){
      _arg1 = (((//unresolved nextvalue or nextname << !NULL!) + !NULL!) 
<< undefined);
      _arg1 = (!(!NULL!) ^ !NULL!);
      (!NULL! instanceof !NULL!);
      var _local1 = (((!NULL! as !NULL!) + !NULL!) == this);
      if (!(!NULL! == !NULL!)){
        -((true << !NULL!)).push(Cell(cells[_local5][_local6]));
      }
    }
    if (!true){
      (_local6 < 0);
      (_local6 < 0);
      (_local5 < 0);
    }
  }
return (_local3);
}

Was macht die SWF-Verschlüsselung von secureSWF?

secureSWF kann Folgendes tun, um Flash-Decompiler zu stoppen:

  • Kontrollstruktur-Verschleierung
    Ändert mögliche Teile der Kontrollstruktur, die den Ablauf der Applikation nicht beeinflussen. Es fügt auch zusätzliche Kontrollstruktur-Anweisungen in bestimmten Teilen des Codes ein, um die Dekompilierung praktisch unmöglich zu machen.

  • Dynamic Code Wrapping
    Wrappt ActionScript Bytecode-Blöcke in SWF-Dateien dynamisch, um das Finden von Einsprungspunkten im Code für Flash-Decompiler zu erschweren. Damit wird der Decompiler normalerweise zum Absturz gebracht.

  • Statement-Level-Randomisierung
    strukturiert die Sequenz der SWF-Bytecode-Anweisungen, die der Decompiler zum Formen einer kompletten ActionScript-Anweisung nutzt, zufällig neu. Es entfernt alle möglichen Links zwischen dem kompilierten Bytecode und dem ActionScript-Quellcode, wodurch das Dekompilieren praktisch unmöglich wird

  • String-Verschlüsselung
    Ersetzt sensible String-Literale in Ihrem Code mit einem Funktionsaufruf, der den String aus einem verschlüsselten Byte-Array holt. Hier ist ein Beispiel:

    Vorher
    loader.load(new URLRequest(
    "http://www.kindisoft.com/getsomething.php?var=" + foo);

    Nachher
    loader.load(new URLRequest(?.?(-581, -881) + foo);

Download

Was unsere Nutzer sagen

Jacob Miller - MotionVR
  http://www.motion-vr.com/

secureSWF ist ein integraler Bestandteil unseres Unternehmens. Ich kann mir die Veröffentlichung von SWFs ohne secureSWF nicht vorstellen.