My備忘録(又の名を雑記帳)

WinMacのMy備忘録(IT系?)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- | スポンサー広告 | トラックバック(-) | コメント(-) | このエントリーをブックマークに追加する | このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク | [*Edit] |
SWF(Flash)ファイルのActionScript 3.0をデコンパイル(逆コンパイル)したかったので、AS3に対応しているデコンパイラを探した。
下はその時のまとめというかメモ。(10/01/19あたりに書いたものなので、情報が古くなっているかもしれません。特に価格やレート。)

●フリーウェア
HugFlash
http://www.paw.hi-ho.ne.jp/milbesos/apldl.shtml

HugDimensionモードで可能。(HugFlashのウィンドウ上で右クリック → モード → HugDimension)

SWFDump
http://www.swftools.org/

swfdump.exe -D hoge.swf > hoge.txt
または、
swfdump.exe -a hoge.swf > hoge.txt
詳しい使用方法はこちら

AbcDump
http://iteratif.free.fr/blog/index.php?2006/11/15/61-un-premier-decompileur-as3


flash-decompiler
http://code.google.com/p/flash-decompiler/


スポンサーサイト
2010.03.18 | TOOL | トラックバック(0) | コメント(0) | このエントリーをブックマークに追加する | このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク | [*Edit] |
メモ。
static unsigned int pelength;
static unsigned int peheader;

static bfd_boolean
coff_read_word (bfd *abfd, unsigned int *value)
{
unsigned char b[2];
int status;

status = bfd_bread (b, (bfd_size_type) 2, abfd);
if (status < 1)
{
*value = 0;
return FALSE;
}

if (status == 1)
*value = (unsigned int) b[0];
else
*value = (unsigned int) (b[0] + (b[1] << 8));

pelength += (unsigned int) status;

return TRUE;
}

static unsigned int
coff_compute_checksum (bfd *abfd)
{
bfd_boolean more_data;
file_ptr filepos;
unsigned int value;
unsigned int total;

total = 0;
pelength = 0;
filepos = (file_ptr) 0;

do
{
if (bfd_seek (abfd, filepos, SEEK_SET) != 0)
return 0;

more_data = coff_read_word (abfd, &value);
total += value;
total = 0xffff & (total + (total >> 0x10));
filepos += 2;
}
while (more_data);

return (0xffff & (total + (total >> 0x10)));
}

static bfd_boolean
coff_apply_checksum (bfd *abfd)
{
unsigned int computed;
unsigned int checksum = 0;

if (bfd_seek (abfd, 0x3c, SEEK_SET) != 0)
return FALSE;

if (!coff_read_word (abfd, &peheader))
return FALSE;

if (bfd_seek (abfd, peheader + 0x58, SEEK_SET) != 0)
return FALSE;

checksum = 0;
bfd_bwrite (&checksum, (bfd_size_type) 4, abfd);

if (bfd_seek (abfd, peheader, SEEK_SET) != 0)
return FALSE;

computed = coff_compute_checksum (abfd);

checksum = computed + pelength;

if (bfd_seek (abfd, peheader + 0x58, SEEK_SET) != 0)
return FALSE;

bfd_bwrite (&checksum, (bfd_size_type) 4, abfd);

return TRUE;
}

2010.03.17 | memo | トラックバック(0) | コメント(0) | このエントリーをブックマークに追加する | このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク | [*Edit] |

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。