环境与需要的工具准备与介绍
前言
学习的重点就是如何利用一些linux自带的一些通用的本地工具和一些自带的binutils工具还有一些需要的大众linux调试工具对linux的二进制软件如何进行分析,在学习的途中我们不会使用到在CTF中逆向或者pwn,还有现实生活中的二进制漏洞挖掘通用神器IDA进行使用。
Gdb
Gdb调试器不仅可以用来调试有bug或者漏洞的linux二进制文件,他也可以用来研究改变一个程序的控制流,也可以用来修改代码,寄存器,数据结构,对于一个研究二进制漏洞挖掘的黑客来讲,这个工具是非常常见的,他的主要作用就是用来分析ELF格式的二进制文件和linux的一些进程,是linux黑客必备的一个工具,在后续的文章中我们会不断的使用gdb
以下是gdb一下常用的命令介绍
r/run |
运行我们当前调试的软件 |
c/continue |
暂停运行的程序继续运行 |
n/next |
运行下一行 |
s/step |
单步执行,遇到函数会进入 |
u/until |
运行到指定行停止 |
fi/finish |
结束当前调用的函数,回到上一层调用的函数 |
retrn |
结束当前调用的函数,返回指定的值到上一层函数调用的地方 |
j/Jump |
将当前程序执行流跳转到指定行或地址 |
p/print |
打印变量或者寄存器的值 |
Bt/backtrace |
查看当前线程调用的堆栈 |
f/frame |
切换到当前调用线程的指定堆栈 |
thread |
切换到指定线程 |
b/break |
添加断点 |
tb/tbreak |
添加临时断点 |
d/delete |
删除断点 |
enable |
启用某个断点 |
disable |
禁用某个断点 |
watch |
监视某个变量或者内存地址是否发生变化 |
l/list |
显示源码 |
i/info |
查看断点/线程等信息 |
ptype |
查看变量类型 |
dis/disassemble |
查看汇编代码 |
set args |
设置程序启动命令行参数 |
show args |
查看设置的命令行参数 |
Object dump(objdump)
Objdump是一个对代码进行快速反编译的方案,在反编译简单的或者没有被篡改的二进制文件是非常有用的,但是我们要进行任何有挑战性的反编译任务的时候,特别是对恶意软件,Objdump就显示出了他的局限性,他的最主要的缺陷就是需要依赖ELF节头,如果反编译文件没有节头那么使用Objdump就没办法正确的反编译二进制文件中的代码,甚至都不可能打开二进制文件,用来反编译平常的任务,比如反编译没有加固,精简或者任何方式混淆的普通二进制文件就足以,下面是一些使用方法:
查看所有符号
只查看ELF文件中的程序代码
查看ELF文件中所有节的数据或代码
object copy
objcopy被用来复制一个目标文件的内容到另一个文件中,可以使用不同于源文件的格式来输出目的文件,即可以进行格式转换。他还可以用来分析和修改任意类型的ELF目标文件,甚至他还可以修改ELF节,或者将ELF节复制到ELF二进制中(还可以从ELF二进制中复制ELF节)命令需要参考objcopy的使用手册
后续我们也有可能会用到建议先参考学习
参考链接:
zhuanlan.zhihu.com/p/115834422
或者-help
system call trace(strace)
按照strace官网的描述, strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。
strace底层使用内核的ptrace特性来实现其功能。
在运维的日常工作中,故障处理和问题诊断是个主要的内容,也是必备的技能。strace作为一种动态跟踪工具,能够帮助运维高效地定位进程和服务故障。它像是一个侦探,通过系统调用的蛛丝马迹,告诉你异常的真相。命令:
使用strace跟踪一个基本的程序
strace /bin/ls -o cd.out
使用strace命令来附加到一个现存的程序
strace -p
我们还可以使用-e write=fd命令查看写入的数据,这个工具是一个非常有用的工具
Ltrace
library trace(ltrace,库追踪)是另外一个简洁的小工具,与strace非常类似。ltrace会解析共享库,即一个程序的链接信息,并打印出用到的库函数。建议参考用户手册学习
readelf
readelf命令是一个非常有用的解析ELF二进制文件的工具。在进行反编译之前,需要收集目标文件相关的信息,该命令能够提供收集信息所需Linux工具5要的特定于ELF的所有数据。我们将会他使用readelf命令收集符号、段、节、重定向入口、数据动态链接等相关信息。readelf命令是分析ELF二进制文件的利器,下面是几个常用的标记命令
查询节头表: readelf –S
查询程序头表: readelf –l
查询符号表: readelf -s
查询ELF文件头数据: readelf –e
查询重定位入口: readelf –r
查询动态段: readelf –d
有用的设备和linux文件
/proc/
/proc/kcore
/boot/System.map
/proc/kallsyms
/proc/iomem
ECFS
链接器相关环境指针
LD_PRELOAD 环境变量
LD_SHOW_AUXV 环境变量
链接器脚本
以上文件和设备百度均可百度到
原文始发于微信公众号(Kone安全):liunx逆向分析学习(一)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论