Login
Immutable PageDiscussionInfoAttachments
CTF/Toolkit/ndisasm

MMA

ndisasm

ndisasmはnasmに付属する逆アセンブラである。x86系の16-, 32-, 64-bit modeに対応している。 シェルコードのようなコードの断片の逆アセンブルに向いている。

使い方

デフォルトでは16-bit modeで逆アセンブルするので必ず-bでビットを指定する。

ファイル名として-を指定すると標準入力から読み取る。

x86の場合

$ ndisasm -b 32 file

$ ndisasm -u file

でもよい。

x86-64の場合

$ ndisasm -b 64 -p amd file

-p amdをつけておかないとsyscallがloadall286になるなど。

ずれる場合

文字列などが挟まっていて、命令の開始位置ずれる場合には-sで正しい位置を指定するか、文字列部分を-kで読み飛ばす。

次のコード片を逆アセンブルしてみる。

   1 BITS 64
   2         jmp main
   3 sh:     db '/bin/sh',0
   4 main:   mov eax,0x3b ; execve
   5         lea rdi,[rel sh]
   6         mov esi,0
   7         mov edx,0
   8         syscall

$ ndisasm -b64 -pamd sc
00000000  EB08              jmp short 0xa
00000002  2F                db 0x2f
00000003  62                db 0x62
00000004  696E2F736800B8    imul ebp,[rsi+0x2f],dword 0xb8006873
0000000B  3B00              cmp eax,[rax]
0000000D  0000              add [rax],al
0000000F  488D3DECFFFFFF    lea rdi,[rel 0x2]
00000016  BE00000000        mov esi,0x0
0000001B  BA00000000        mov edx,0x0
00000020  0F05              syscall

jump先の0xaが前の文字列とくっついてしまっている。 -s 0xaで0xaからが一つの命令であることを指示する。

$ ndisasm -b64 -pamd sc -s 0xa
00000000  EB08              jmp short 0xa
00000002  2F                db 0x2f
00000003  62                db 0x62
00000004  69                db 0x69
00000005  6E                outsb
00000006  2F                db 0x2f
00000007  7368              jnc 0x71
00000009  00                db 0x00
0000000A  B83B000000        mov eax,0x3b
0000000F  488D3DECFFFFFF    lea rdi,[rel 0x2]
00000016  BE00000000        mov esi,0x0
0000001B  BA00000000        mov edx,0x0
00000020  0F05              syscall

あるいは-k 2,8で2バイト目から8バイト分をskipする。

$ ndisasm -b64 -pamd sc -k 2,8
00000000  EB08              jmp short 0xa
00000002  skipping 0x8 bytes
0000000A  B83B000000        mov eax,0x3b
0000000F  488D3DECFFFFFF    lea rdi,[rel 0x2]
00000016  BE00000000        mov esi,0x0
0000001B  BA00000000        mov edx,0x0
00000020  0F05              syscall

CTF/Toolkit/ndisasm (last edited 2015-01-14 19:22:59 by ytoku)