反汇编器

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

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

 
 
  
  
  
  
  1. idabook# ./msfpayload linux_ia32_findsock CPORT=4444 R > fs  
  2. idabook# ls -l fs  
  3. -rw-r--r-- 1 ida ida 62 Oct 30 15:49 fs  
  4. idabook# ndisasm -u fs  
  5. 00000000  31D2              xor edx,edx  
  6. 00000002  52                push edx  
  7. 00000003  89E5              mov ebp,esp  
  8. 00000005  6A07              push byte +0x7  
  9. 00000007  5B                pop ebx  
  10. 00000008  6A10              push byte +0x10  
  11. 0000000A  54                push esp  
  12. 0000000B  55                push ebp  
  13. 0000000C  52                push edx  
  14. 0000000D  89E1              mov ecx,esp  
  15. 0000000F  FF01              inc dword [ecx]  
  16. 00000011  6A66              push byte +0x66  
  17. 00000013  58                pop eax  
  18. 00000014  CD80              int 0x80  
  19. 00000016  66817D02115C      cmp word [ebp+0x2],0x5c11  
  20. 0000001C  75F1              jnz 0xf  
  21. 0000001E  5B                pop ebx  
  22. 0000001F  6A02              push byte +0x2  
  23. 00000021  59                pop ecx  
  24. 00000022  B03F              mov al,0x3f  
  25. 00000024  CD80              int 0x80  
  26. 00000026  49                dec ecx  
  27. 00000027  79F9              jns 0x22  
  28. 00000029  52                push edx  
  29. 0000002A  682F2F7368        push dword 0x68732f2f  
  30. 0000002F  682F62696E        push dword 0x6e69622f  
  31. 00000034  89E3              mov ebx,esp  
  32. 00000036  52                push edx  
  33. 00000037  53                push ebx  
  34. 00000038  89E1              mov ecx,esp  
  35. 0000003A  B00B              mov al,0xb  
  36. 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格式。

你可能感兴趣的:(反汇编器)