forked from: flash on 2012-10-15
♥0 |
Line 98 |
Modified 2013-01-30 10:03:45 |
MIT License
archived:2017-03-30 10:28:19
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();
}
}
}