Writing LoaderHook.as with ActionScript 3.0 for hooking the loader

2012/08/05 15:25

2012년 코드게이트에서 오정욱(@ohjeongwook) 님의 1"AVM Inception" 발표를 듣고 깔짝깔짝 만들었던 LoaderHook 클래스입니다. 내용은 별 거 없구요. Flash 에서 Loader 가 호출되면, 로드되는 데이터(swf나 이미지 등등)를 덤프 뜨는 훅 클래스입니다.

당연히 그냥은 사용 못하고, DoABC 태그를 삽입하고, AVM의 참조테이블을 수정해야 훅이 걸립니다.

LoaderHook.as


package {
import flash.display.Loader;
import flash.system.LoaderContext;
import flash.utils.ByteArray;

public class LoaderHook extends Loader
{
public function LoaderHook() : void
{
super();
}

public function loadbytes( bytes:ByteArray, context:LoaderContext = null ) : void
{
function toHex( decimal:uint, padding:int = 2 ) : String
{
var hex:String = Number( decimal ).toString( 16 );
while( hex.length < padding )
{
hex = "0" + hex;
}
return hex.toUpperCase();
}

var now:Date = new Date();

trace( "[+] start to dump on loadbytes" );
trace( "[+] " + now.toLocaleString() );
trace( "-----------------------------------------------" );

var hexadecimalDump:String = "";

bytes.position = 0;
while( bytes.position < bytes.length )
{
hexadecimalDump += toHex( bytes.readUnsignedByte() );
hexadecimalDump += " ";

if( bytes.position % 16 == 0 )
{
trace( hexadecimalDump );
hexadecimalDump = "";
}
}
trace( hexadecimalDump );

trace( "-----------------------------------------------" );
trace( "[+] completed" );

super.loadBytes( bytes, context );
}
}
}


mm.cfg 세팅


ActionScript 언어가 java 랑 유사해서 특별히 어려운 건 없었는데, 2.0 과 3.0 이 하늘과 땅 차이라서 덤프 뜨는 방법을 찾는 데 조금 헤매었네요. 3.0 에서는 2mm.cfg 를 세팅하면 trace 메소드의 결과가 파일로 저장됩니다.

TraceOutPutFileName=C:\Users\(username)\AppData\Roaming\Macromedia\Flash Player\Logs\flashlog.txt
ErrorReportingEnable=1
TraceOutputFileEnable=1
MaxWarnings=100

크리에이티브 커먼즈 라이센스
Creative Commons License

6l4ck3y3 0x06 Other RCE , , ,

Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. Blog Icon
    청정

    감사합니다.

[로그인][오픈아이디란?]