给定一组任意文件,从 Linux 命令行识别它们之间共享的文本字符串(在所有文件中或在它们的子集中)的最佳方法是什么?
这对于快速识别为类似恶意文件(例如,恶意可执行文件)集群编写 Yara 规则的方法非常有用。
给定一组任意文件,从 Linux 命令行识别它们之间共享的文本字符串(在所有文件中或在它们的子集中)的最佳方法是什么?
这对于快速识别为类似恶意文件(例如,恶意可执行文件)集群编写 Yara 规则的方法非常有用。
这是一种方法,针对名为 的目录中的恶意文件malware:
find malware/ -type f | xargs -n1 -P1 -I{} sh -c 'strings {} | sort | uniq' | sort | uniq -c | sort -n
输出将类似于以下内容,其中每行的第一个数字是包含该字符串的文件数:
...
1 Sleep
...
2 JFIF
2 SetBkColor
...
5 !This program cannot be run in DOS mode.
5 t@PW
5 @tVH
...
当输入文件是 Windows 可执行文件时,一种有用的变体是使用strings -el而不是strings,这将导致显示 UTF-16 小端字符串(也称为宽字符串)。
要将字符串序列与相应的文件联系起来,请使用strings -f malware/* | grep <string>.