package { import flash.utils.ByteArray public class ExploitByteArray { private const MAX_STRING_LENGTH:uint = 100 public var ba:ByteArray public var original_length:uint private var platform:String public function ExploitByteArray(p:String, l:uint = 1024) { ba = new ByteArray() ba.length = l ba.endian = "littleEndian" ba.writeUnsignedInt(0) platform = p original_length = l } public function set_length(length:uint):void { ba.length = length } public function get_length():uint { return ba.length } public function lets_ready():void { ba.endian = "littleEndian" if (platform == "linux") { ba.length = 0xffffffff } } public function is_ready():Boolean { if (ba.length == 0xffffffff) return true return false } public function read(addr:uint, type:String = "dword"):uint { ba.position = addr switch(type) { case "dword": return ba.readUnsignedInt() case "word": return ba.readUnsignedShort() case "byte": return ba.readUnsignedByte() } return 0 } public function read_string(addr:uint, length:uint = 0):String { ba.position = addr if (length == 0) return ba.readUTFBytes(MAX_STRING_LENGTH) else return ba.readUTFBytes(length) } public function write(addr:uint, value:* = 0, zero:Boolean = true):void { var i:uint if (addr) ba.position = addr if (value is String) { for (i = 0; i < value.length; i++) ba.writeByte(value.charCodeAt(i)) if (zero) ba.writeByte(0) } else if (value is ByteArray) { var value_length:uint = value.length for (i = 0; i < value_length; i++) ba.writeByte(value.readByte()) } else ba.writeUnsignedInt(value) } } }