flare-floss是一款功能强大的恶意软件分析工具,该工具可以帮助广大研究人员自动从恶意软件中提取混淆字符串。
许多恶意软件作者不会使用硬核打包程序严密保护后门,而是通过仅混淆可执行文件的关键部分来逃避启发式检测。通常,这些部分是用于配置域、文件和其他感染工件的字符串和资源。这些关键特征不会以纯文本形式显示,因此会在基本静态分析期间给我们的工作提升难度。
flare-floss使用高级静态分析技术自动从恶意软件二进制文件中提取和反混淆所有字符串,我们可以使用它来增强对未知二进制文件的基本静态分析。
当前版本的flare-floss支持提取以下所有字符串类型:
1、静态字符串:“常规” ASCII 和 UTF-16LE 字符串;
2、堆栈字符串:运行时在堆栈上构造的字符串;
3、紧密字符串:堆栈字符串的一种特殊形式,在堆栈上解码;
4、解码字符串:在函数中解码的字符串;
Python 3
由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好最新版本的Python 3环境。
接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:
git clone https://github.com/mandiant/flare-floss.git
然后切换到项目目录中,使用pip命令和项目提供的requirements.txt安装该工具所需的其他依赖组件:
cd flare-floss
pip install -r requirements.txt
从恶意软件二进制文件中提取混淆的字符串:
floss malware.exe
仅提取堆栈和紧密字符串:
floss --only stack tight -- suspicious.exe
不提取静态字符串:
$ floss --no static -- backdoor.exe
显示帮助/使用屏幕:
# show core arguments floss -h
$ floss -H # show all supported arguments
floss malware.bin
FLOSS static ASCII strings
!This program cannot be run in DOS mode.
_YY
RichYY
MdfQ
.text
`.rdata
@.data
.idata
.didat
.reloc
U F
?;}
A@;E
_^[
HttHt-H
'9U
WS2_32.dll
FreeLibrary
GetProcAddress
LoadLibraryA
GetModuleHandleA
GetVersionExA
MultiByteToWideChar
WideCharToMultiByte
Sleep
GetLastError
DeleteFileA
WriteFile
[..snip...]
FLOSS static UTF-16 strings
,%d
FLOSS decoded 4 strings
WinSta0\Default
Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings
ProxyEnable
ProxyServer
FLOSS extracted 81 stack strings
WinSta0\Default
executed.
ERR '%s' error[%d].
Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings
ProxyEnable
ProxyServer
wininet.dll
InternetOpenA
0\A4
InternetSetOptionA
InternetConnectA
InternetQueryOptionA
(compatible; MSIE 7.0; Win32)
-ERR
wrote(%d).
Invalid ojbect.
SetFilepoint error[%d].
b64_ntop error[%d].
GetFileSize error[%d].
Creates file error[%d].
wtjNukM =
[..snip...]
本项目的开发与发布遵循Apache-2.0开源许可协议。
flare-floss:
https://github.com/mandiant/flare-floss
https://www.mandiant.com/resources/automatically-extracting-obfuscated-strings