之前在一些关于 BackDoor 的文章中见到过通过 strace 来截获 ssh 密码
https://jvns.ca/blog/2014/02/17/spying-on-ssh-with-strace/
https://joychou.org/web/ssh-backdoor.html
最近在看一本 Linux 二进制安全的书 :
Learning Linux binary Analysis
其中也提到了这个命令
然后就查阅了一下 man 手册
这里简要记录一下一些个人认为比较常用的参数
It is used to monitor and tamper with interactions between processes and the Linux kernel,
which include system calls, signal deliveries, and changes of process state.
The operation of strace is made possible by the kernel feature known as ptrace.
strace [OPTIONS] [COMMAND]
> 输出格式化
-i 打印出 PC 指针的当前值
-o 将命令输出从默认的标准错误流修改为文件
-x 将不可打印字符串以 16 进制打印
-xx 所有字符串以 16 进制打印
-y 将与文件描述符相关联的实际文件路径也打印出来
-yy 将其他类型的文件 (例如套接字) 的协议类型信息也打印出来 (例如: write(3<TCP:[127.0.0.1:35170->127.0.0.1:22]>,...)
> 统计相关
-c 统计某一个系统调用被调用的次数/花费的时间/错误次数等等, 在程序调用结束后再输出统计结果, 在系统调用发生时, 不打印系统调用的参数以及返回值
-C 同 -c, 区别是在系统调用发生时打印每一个系统调用的参数以及返回值
-S 指定 -c 输出的表格的排序关键字, 可以选择 calls (调用次数), time(时间)等等
> 过滤器
-e [EXPR]
-e trace=set 例如 -e trace=read,write,open,close
-e trace=file 只过滤得到文件操作相关的系统调用
-e trace=process 进程相关
-e trace=memory 内存相关
-e trace=desc 文件描述符相关
-e trace=ipc IPC 相关
-e trace=signal 信号相关
-e trace=network 网络相关
-e read=set 指定调用 read 时过滤制定的文件描述符
> 追踪
-D 让 strace 不成为新进程的父进程, 默认不加该参数 strace 就会是命令参数所生成的进程的父进程
-f 追踪目标进程生成的新进程, 其中 -p PID -f 将会附加到这个 pid 的所有线程 (如果该进程是多线程的话)











网友评论