README.md
Rendering markdown...
package
{
/**
* ...
* @author dango
*/
import flash.utils.ByteArray;
public class ExploitByteArray
{
private const MAX_STRING_LENGTH:uint = 100;
public var ba:ByteArray;
public var original_length:uint;
public function ExploitByteArray(l:uint = 2048)
{
ba = new ByteArray();
ba.length = l;
ba.endian = "littleEndian";
ba.writeUnsignedInt(0);
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";
}
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:int;
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);
}
}
}
}