forked from: flash on 2012-10-15

by ohisama
♥0 | Line 98 | Modified 2013-01-30 10:03:45 | MIT License
play

ActionScript3 source code

/**
 * Copyright ohisama ( http://wonderfl.net/user/ohisama )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/2p4P
 */

// forked from bazinga286's flash on 2012-10-15
package 
{
 import flash.display.Loader; 
 import flash.display.LoaderInfo;
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.filesystem.File;
 import flash.filesystem.FileMode;
 import flash.filesystem.FileStream;
 import flash.system.LoaderContext;
 import flash.utils.ByteArray;
 public class MochiDecrypt extends Sprite 
 {
     public function MochiDecrypt() 
     {
         var file : File = File.desktopDirectory.resolvePath("game.swf");
         file.browseForOpen("Open Mochicrypt Protected File");
         file.addEventListener(Event.SELECT, fileOpened, false, 0, true);
     }
     private function fileOpened(e : Event) : void 
     {
         var stream : FileStream = new FileStream();
         stream.open(e.currentTarget as File, FileMode.READ);
         var bytes : ByteArray = new ByteArray();
         stream.readBytes(bytes);
         var loader : Loader = new Loader();
         var loaderContext : LoaderContext = new LoaderContext(false, null, null);
         loaderContext.allowCodeImport = true;
         loaderContext.allowLoadBytesCodeExecution = true;
         loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleted, false, 0, true);
         loader.loadBytes(bytes, loaderContext);
         this.addChild(loader);
    }
    private function loaderCompleted(e : Event):void 
    {
         var payloadClass : Class = (e.currentTarget as LoaderInfo).applicationDomain.getDefinition("mochicrypt.Payload") as Class;
         var data : ByteArray = ByteArray(new payloadClass());
         var S : ByteArray;
         var i : uint;
         var j : uint;
         var k : uint;
         var n : uint;
         var u : uint;
         var v : uint;
         if (data.length > 0) 
         {
             S = new ByteArray();
             n = data.length - 32;
             i = 0;
             while (i < 256) 
             {
                 S.writeByte(i);
                 i = (i + 1);
             }
             j = 0;
             i = 0;
             while (i < 256) 
             {
                 j = j + S[i] + data[n + (i & 31)] & 255;
                 u = S[i];
                 S[i] = S[j];
                 S[j] = u;
                 i = (i + 1);
             }
             if (n > 131072) 
             {    
                 n = 131072;
             }
             j = 0;
             i = 0;
             k = 0;
             while (k < n) 
             {
                 i = (i + 1) & 255;
                 u = S[i];
                 j = j + u & 255;
                 v = S[j];
                 S[i] = v;
                 S[j] = u;
                 data[k] = data[k] ^ S[u + v & 255];
                 k = (k + 1);
             }
             try 
             {
                 data.uncompress();
             } 
             catch (e : Error) 
             {
             }
        }
        var file : File = File.desktopDirectory.resolvePath("5_jacksmith.swf");
        var stream : FileStream = new FileStream();
        stream.open(file, FileMode.UPDATE);
        stream.writeBytes(data);
        stream.close();
    }
 }
}