反汇编专用工具——objdump

命令

参数:

-d: 将代码段反汇编

-S: 将代码段反汇编的同时,将反汇编代码和源代码穿插显示,编译时需要给出-g,即需要调试信息

-C: 解决Name mangling导致函数名无法看懂的问题

-l: (小写L)插入源代码的文件名称和行号

-j section: 仅反汇编指定的section。可以有多个-j参数来选择多个section

-M: 语法模式,例如att(AT&t),intel

一般用:

objdump -SlC -d audit_version_info.fcgi

参考

Hackers Disassembler 1.06 汉化版是一个非常快速和舒适的免费反汇编工具,玩过破解的我相信Hacker’s Disassembler 会成为你收藏的工具之一。 软件功能特色:对于COM,MZ和PE可执行文件的支持 在JMP和CALL指令和给定的地址,存储地址的历史 认识到引用字符串,对话框和菜单 认识到导入函数的调用 有关导出函数的信息 自定义的热键和颜色,语法高亮 “跟踪模式” 程序和全局变量名称 注释 书签 使用拖放和拖放打开文件 保存文本片段 对话框中的“反汇编模式” 在正常模式下可以反汇编或者整个文件(二进制和MZ),部分路段(PE)或间隔(虚拟地址在相应的字段中指定)。 在跟踪模式下反汇编开始从虚拟地址在现场开始设置,到结束设置地址,或到最接近的指令JMP或沤。然后当控制被转移到块被分解。这种模式便于拆卸的代码的小片段,例如,在RTL函数调用一些辅助功能。请注意,该守则某些部分可以通过反汇编,如果控件使用间接寻址指令(例如,调用[ESI EAX*4])转让有被错过。默认情况下,现场开始包含入口点的地址。 当打开二进制文件,需要指定文件图像(物理地址)的偏移量,图像的大小,对应于图像(虚拟地址)的开头的虚拟地址,进入点的和是否该代码是32位的虚拟地址。     反汇编 最小的字符串长度:具有长度小于给定数量少的字符串是由反汇编忽略,并且不包括在字符串引用列表。此参数用于预防参考其他不属于字符串符号的短序列。
### 如何进行Linux可执行文件的逆向工程或反汇编 #### 工具准备 为了有效地对Linux可执行文件进行逆向工程,需要一系列专门设计来处理此类任务的工具。常见的工具有`objdump`, `gdb`, 和`radare2`等[^2]。 - **Objdump**: 这是一个多用途实用程序,能够提供关于目标文件的各种信息,并且可以用来反汇编这些文件的内容。 ```bash objdump -d /path/to/binary ``` 此命令会展示给定路径下二进制文件中的机器码对应的汇编指令。 - **GDB (GNU调试器)**: 不仅可用于调试程序,还可以帮助理解程序的行为模式以及内部结构。通过设置断点并逐步执行代码片段,可以获得有关函数调用流程的重要见解。 - **Radare2**: 是一款开源框架,支持多种架构下的二进制分析工作。它提供了丰富的API接口和插件机制,使得复杂操作变得简单易行。 对于特定类型的ELF格式(Executable and Linkable Format),即Linux环境常用的可执行文件格式,上述提到的对象转储工具(`objdump`)尤为适用。 #### 实际案例解析 假设有一个名为`example_program` 的32位Intel 80386 ELF可执行文件想要对其进行初步探索: 1. 使用`file` 命令确认文件类型: ```bash file example_program ``` 这一步骤有助于验证待分析对象确实为预期的目标平台上的有效可执行文件。 2. 应用`objdump` 查看其基本组成单元——各个部分(section),包括但不限于`.text`(只读代码区), `.data`(初始化数据区) 等: ```bash readelf -S example_program ``` 这里利用的是另一个辅助工具`readelf` ,它可以更直观地呈现ELF头信息及其各组成部分详情。 3. 接下来就是实际的反汇编过程了,借助之前介绍过的`objdump` : ```bash objdump -D -M intel example_program | less ``` 选项 `-D` 表示强制反汇编整个文件;而 `-M intel` 则指定了采用INTEL风格而非默认AT&T语法输出汇编码列。最后管道符后面跟上`less` 方便分页浏览大量输出内容。 4. 如果希望进一步深入探究某些具体位置处发生了什么,则可以通过加载该二进制至动态链接库(GDB) 中来进行交互式的单步跟踪或是查看寄存器状态变化情况。 以上方法结合使用可以让使用者较为全面地掌握所选样本的整体布局及运行原理。 #### 高级技巧:自动化脚本编写 随着经验积累和技术水平提升,可能会遇到更加复杂的场景需求更高层次的支持。此时不妨考虑开发一些定制化的Python或其他语言的小型应用程序配合现有工具链完成批量处理任务、提取特征值等工作。例如,在Kali Linux环境下利用Flasm这样的专用工具针对Flash SWF文件做相应修改时,就可以按照如下方式创建批处理作业[^3]: ```python import subprocess def compile_flasm(input_file, output_file=None): command = ["flasm"] if not output_file: # 将结果打印到终端 command.extend(["-a", input_file]) else: # 输出重定向保存为新文件 with open(output_file, 'w') as f: process = subprocess.Popen( ['flasm', '-b', input_file], stdout=f, stderr=subprocess.PIPE ) compile_flasm('foo.txt') ``` 这段代码展示了如何调用外部命令行工具并将产生的日志记录下来供后续审查之用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值