在学习IDA Pro之前先了解一些用于逆向工程二进制文件的工具。

一、分类工具

1. file命令:检查文件中的某些字段来确认文件的类型。能够识别数种Ascii文本文件、各种可执行文件和数据文件。其magic file规定了检查规则。

二进制文件反序列化java 二进制文件逆向_目标文件

2.PE Tools: 是一组用于分析windows系统中正在运行的进程和可执行文件的工具。用户可以将一个进程的内存映像转储到某个文件中,也可以使用PE Sniffer实用工具确定可执行文件由何种compiler构建,或该文件是否经过某种已知的模糊使用工具的模糊处理。

3.PEid: windows工具,主要用户识别构建某一特定windows PE二进制文件所使用的编译器,并确定任何用于模糊windows PE二进制文件的工具。

二、摘要工具

1. nm命令:列举目标文件中的符号。使用nm检查中间目标文件(非可执行文件)时,默认输出结果时在这个文件中声明的任何函数和全局变量的名称。若列举可执行文件中的符号,可以得到更多信息。

2.ldd命令:列举任何可执行文件所需的动态库。在mac上替代工具是otool,用otool -L可以得到文件中用到的动态链接库。(otool在XCode的ToolChains中)

二进制文件反序列化java 二进制文件逆向_目标文件_02

3.objdump 显示与目标文件相关的信息,如每节的摘要信息,内存分布信息,调试信息,符号信息,反汇编代码清单等。在Linux freebsd windows下用。 objdump依靠二进制文件描述符库libbfd来访问目标文件,因此能够解析libbfd支持的文件格式(elf, pe等)。

readelf 也可以解析elf文件,其大多数功能和objdump相同,区别在于readelf不依赖于libbfd.

4. otool OS X下类似于objdump的工具。

5.dumpbin 微软visual studio套件中的使用工具,和otool和objdump类似。

6.c++filt 支持重载的语言在编译时需要有一种机制来区分同一个函数的不同版本,以避免在目标文件中有两个名称相同的函数。编译器将参数类型信息合并到原始的函数名中,从而为重载函数生成唯一的函数名称。用c++filt可以得到这些函数的原始名称。

二进制文件反序列化java 二进制文件逆向_二进制文件_03

二进制文件反序列化java 二进制文件逆向_目标文件_04

二进制文件反序列化java 二进制文件逆向_目标文件_05

三、深度检测工具

1.strings输出文件中所有出现的字符串 使用-e参数可以使strings搜索更广泛的字符,如16位unicode字符。

2.两个用于x86指令集的流式反汇编器:ndisasm 和 diStorm。