Login
Immutable PageDiscussionInfoAttachments
CTF/Toolkit/udis86

MMA

udis86

udis86は逆アセンブラライブラリである。x86系の16-, 32-, 64-bit modeに対応している。Intel記法とAT&T記法両方に対応している。 udcliというCLIの逆アセンブラが付属しており、シェルコードのようなコードの断片の逆アセンブルに向いている。

インストール

udis86のサイトからソースのtarボールをダウンロードしてconfigureしてmakeする。 make installするまでもなく、生成されたudcli/udcliを適当にコピーして使うことが出来る。

使い方

デフォルトでは32-bit modeで逆アセンブルする。64bitのコードを逆アセンブルするときには-64オプションを指定する。

ファイル名を省略すると標準入力から読み取る。

x86の場合(デフォルト)

$ udcli file

x86-64の場合

$ udcli -64 file

Intel記法(デフォルト)

$ udcli -intel file

AT&T記法

$ udcli -att file

入力を16進数で

$ echo "90 90" | udcli -x

ずれる場合

文字列などが挟まっていて、命令の開始位置ずれる場合には複数回に分けて逆アセンブルする。1

-cオプションで読み込むバイト数を指定、-oで開始アドレスを指定、-sで先頭を読み飛ばす。

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

   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

$ udcli -64 sc
0000000000000000 eb08             jmp 0xa                 
0000000000000002 2f               invalid                 
0000000000000003 62               invalid                 
0000000000000004 696e2f736800b8   imul ebp, [rsi+0x2f], 0xb8006873
000000000000000b 3b00             cmp eax, [rax]          
000000000000000d 0000             add [rax], al           
000000000000000f 488d3decffffff   lea rdi, [rip-0x14]     
0000000000000016 be00000000       mov esi, 0x0            
000000000000001b ba00000000       mov edx, 0x0            
0000000000000020 0f05             syscall                 

jump先の0xaが前の文字列とくっついてしまっている。 一回目の逆アセンブルで-cオプションで先頭10バイトのみ処理、二回目の逆アセンブルで-sオプションで10バイト目以降を処理する。さらにm二回目の開始アドレスを-oオプションで合わせる。

$ udcli -64 -c 10 sc; udcli -64 -o 10 -s 10 sc
0000000000000000 eb08             jmp 0xa                 
0000000000000002 2f               invalid                 
0000000000000003 62               invalid                 
0000000000000004 696e2f736800     invalid                 
0000000000000010 b83b000000       mov eax, 0x3b           
0000000000000015 488d3decffffff   lea rdi, [rip-0x14]     
000000000000001c be00000000       mov esi, 0x0            
0000000000000021 ba00000000       mov edx, 0x0            
0000000000000026 0f05             syscall                 
  1. ちょっとパッチを書いたほうがいい気がする。 (1)

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