主要是自己遇到了一个Linux样本,记录下从不熟悉到熟悉的过程,也可以帮助更多在逆向分析这条路上的人。
Linux平台调试工具
1、动静分析结合的跨平台工具-IDA
2、无图形界面的调试神器-GDB
3、Linux平台开源调试工具-radare2
使用IDA远程调试
1、Linux系统配置调试ELF文件环境,使用file命令查看elf文件类型,得知文件运行平台是32位
2、拷贝IDA远程调试服务文件linux_server到Linux 平台
1)一定要拷贝IDA对应平台的文件,否则调试报错
2)Linux 64位平台上调试32位程序需安装对应的32位库,根据报错提示自行百度、Google安装对应的库
3、修改linux_server文件属性为可读可写可执行,并运行linux_server
4、设置远程Linux调试,Application和Input file填写样本路径,Directory填写样本上一级目录
Hostname填写Linux IP地址
5、点击start按钮,开始调试样本
6、调试后可以看到pusha,pushad和pusha的差别在于前者操作数是32位,后者操作数是16位。
6.1、我们在调试样本遇到跳转时尽量本着“仅下不上”的原则
6.2、调试时也要注意查看retn这类指令返回到哪个地址?申请空间还是原代码空间?
6.3、样本在执行的过程中肯定会申请空间来操作shellcode代码,需要注意查看区段信息(shift+F7)
7、根据上面自己摸索的原则,开始调试样本,直接鼠标放到下一行代码处(0x00C37665),F4执行过来
8、最后我们调试发现,出现了popa指令,有添加新的区段,通过ret指令执行到申请空间中的shellcode代码
9、执行多次后发现又多了区段debug002,Hex view窗口中查看后起始地址后,发现ELF文件头标
志,但根据经验好像只是解密填充了一部分,继续调试
10、ELF文件填充完整,接下来Dump文件
11、编写IDC脚本Dump内存中ELF文件,shift+F2打开IDC脚本执行窗口,编写完后run执行
IDC脚本
auto fp, begin, end, dump_ELF_byte;
fp = fopen("D:\\dump_elf.bin", "wb");
begin = 0x08048000;
end = 0x080cd000;
for (dump_ELF_byte = 0x08048000 ; dump_ELF_byte < end; dump_ELF_byte ++ )
fputc(Byte(dump_ELF_byte), fp);
return 0
12、IDA中查看Dump文件,可以看到很多有用的字符串信息
样本MD5+SHA-1:A194CF906F67B596FD6E50BEDBABF202+B3AB0907DAE7F7F1E8CF3F313525B07BB0D9438C
参考文章:
https://blog.csdn.net/abc_670/article/details/80066817
https://blog.csdn.net/XXOOYC/article/details/51356342