最近在刷题的时候遇到了很多elf文件,虽然可以通过ida分析伪代码解出来,但是发现有些通过动态调试的方式可以直接找到flag,这样简单了不少,因为之前接触的linux下的逆向题目比较少,所以通过这次刷题也记录一下动态调试elf文件的几种方式。
ida不光可以静态分析函数伪代码,也可以通过动态调试的方式来分析linux下的elf文件。
首先将ida/dbgsrv/路径下的linux_server/linux_serverx64文件复制到linux下,两个文件分别是调试32位和64位程序使用的:
在linux下启动对应的文件:
把我们要调试的文件放到相应的文件夹中,这里我放到/homt/test/文件夹中。
在ida中选择Debugger-Run-Remote linux debugger
在弹出的对话框中,Application填写文件存放的位置和文件名,Directory中填写文件存放的路径,Parameters是指传递的参数,如果程序运行需要传参的话可以在这填入,Hostname就是linux的ip地址,Port一般都是默认的23946,如果设置了password在下方填入,没有就空着:
进入ida动态调试界面,默认情况下界面大概分为6个区域(通用寄存器和标志寄存器窗口为1个),模块列表和线程列表我不怎么看,主要是看反汇编和寄存器还有堆栈。
ida在动态调试的时候和OD差不多,F9继续运行,F7步入,F8步过,F2下断点。
通过Debugger-Breakpoints-Breakpoint list或者Ctrl+Alt+B来查看已经下的断点:
也可以通过Debugger-Debugger windows-Stack trace或者Ctrl+Alt+S查看是谁调用了当前的函数:
虽然感觉没有OD好用,但是实现简单的调试还是没有问题的。
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。
一般在kali中,gdb都是默认安装的。
使用gdb调试可执行文件
运行程序
断点
查看
我在使用的过程中大概用到的就是这些命令。
radare2是一个开源项目,他可以使用命令直接执行,也有GUI程序叫做Cutter并且兼容多平台。
在kali中r2也是默认安装的,可以直接在控制台运行,进入程序后使用aaa命令分析程序
也可以直接使用r2 -A ./program来直接分析程序
在分析程序之前,r2的iI命令可以提供很多有用的信息
在了解程序的基本信息后你还可以通过ii和iE命令来看下程序的导入和导出函数,从而能够更好的了解程序实现的功能
你还可以通过afl命令查看程序存在的函数,从而找到main函数,定位到对应的位置,查看反汇编代码
在找到程序内存在的函数后,可以使用axt命令来查看函数调用
在找到main函数后,使用s命令定位到main函数,pdf命令来查看函数的反汇编代码,s命令后可以加地址或者函数名
如果觉得看反汇编不过瘾也可以通过px命令查看十六进制内容
同时,为了能够更好的理解程序的功能,iz命令可以查看程序中的字符串
字符串和函数一样,可以使用axt命令查看是哪里把它打印出来的
r2还提供了可视模式,可以更直观的分析函数的调用,vv命令进入
以上是使用r2静态分析二进制文件,然后r2的功能不止于此,它还可以动态调试二进制文件甚至给我函数的伪代码
使用r2 -d -A ./program命令来进入调试器
动态调试的主要命令
同时,r2可以通过插件实现反编译功能,使用r2pm -l命令查看当前插件,r2的插件有很多,这里使用r2dec反编译插件来实现对程序的反编译,r2pm -install r2dec来安装,安装完成后可以直接在r2中使用-A加载程序,然后使用r2dec反汇编程序,反汇编的命令是pdda
这样可以清晰的对比观察汇编代码和反编译后的伪代码,更方便观察。
radare2还有很多插件可以使用,大家有兴趣的话可以在深入研究一下。
getit这是攻防世界的一道re题,这道题拿到手是个elf文件,我首先是放到ida里看了看伪代码
本来这道题目应该是写逆向算法得到flag,但是经过分析和与反汇编代码对比,发现flag应该是被存在了eax里面
在调试程序的时候,我们可以ida配合gdb来说使用,虽然ida本身也有动态调试的功能,但是我推荐用ida来分析反汇编和伪代码,然后通过gdb或者r2来进行动态调试查看寄存器的值,或者使用r2反编译和反汇编代码对比分析,这样就可以方便不少,这里猜测flag应该存在eax中,可以通过gdb动态调试程序,在0x400832处下断点,让程序运行
运行程序到断点处,查看寄存器存储的地址的值,就能得到flag
这样通过动态调试的方式,省了很多事。
本文简单介绍了ida、gdb和r2动态调试二进制文件的方法,也是自己最近在做ctf题目的时候使用的,之前只会用od和ida,使用gdb和r2很少,正好借此机会也学习了一下,对于我这种菜鸡来说,在分析二进制文件的时候,3种工具一起使用效果会好一些。