从 Linux 命令行识别多个文件之间共享的字符串

逆向工程 linux 字符串 命令行
2021-07-06 09:03:16

给定一组任意文件,从 Linux 命令行识别它们之间共享的文本字符串(在所有文件中或在它们的子集中)的最佳方法是什么?

这对于快速识别为类似恶意文件(例如,恶意可执行文件)集群编写 Yara 规则的方法非常有用。

1个回答

这是一种方法,针对名为 的目录中的恶意文件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>.