火眼实验室恶意软件开源分析工具Flare-floss
许多恶意软件编写者都会通过混淆一个可执行文件的关键部分来躲避启发式的检测方法,而不是通过加强保护壳的方式。通常情况下,这些关键部分都是字符串以及用于配置域,文件以及感染的其它组件的资源。这些关键功能在静态分析过程中,使用strings.exe也得不到明文显示。
FireEye实验室字符串混淆解释器(FLOSS)采用了先进的静态分析技术,从恶意软件的二进制文件中自动反混淆字符串。你可以就像使用strings.exe一样来加强对未知二进制文件的基本静态分析。
FLOSS的理论知识在这里。
快速运行
正确使用FLOSS,要下载一个单独的可执行文件,地址:https://github.com/fireeye/flare-floss/releases
有关FLOSS的详细说明,可以参考这篇文档。
单独项目地址:
l Windows:这里
l Linux:这里
l OSX:这里
使用方法
从恶意软件中提取混淆字符串:
$ floss /path/to/malware/binary
获取更多的帮助/使用方法:
$ ./floss -h
使用FLOSS更详细的说明,参考这篇文章。
测试FLOSS更详细的说明,参考这篇文章。
样本输出
$ ~/env/bin/floss -a malware.bin
Static ASCII strings
Offset String
---------- -------------------------------------
0x0000004D !This program cannot be run in DOS mode.
0x00000083 _YY
0x000000D0 RichYY
0x000000F0 MdfQ
0x000001E0 .text
0x00000207 `.rdata
0x0000022F @.data
0x00000258 .idata
0x00000280 .didat
0x000002A8 .reloc
0x000005B6 U F
0x000005F1 ?;}
0x000006D4 A@;E
0x000006E4 _^[
0x000008E0 HttHt-H
0x0000099A '9U
0x00007020 WS2_32.dll
0x00007C4E FreeLibrary
0x00007C5C GetProcAddress
0x00007C6E LoadLibraryA
0x00007C7E GetModuleHandleA
0x00007C92 GetVersionExA
0x00007CA2 MultiByteToWideChar
0x00007CB8 WideCharToMultiByte
0x00007CCE Sleep
0x00007CD6 GetLastError
0x00007CE6 DeleteFileA
0x00007CF4 WriteFile
[..snip...]
Static UTF-16 strings
Offset String
---------- -------------------------------------
0x00007614 ,%d
Most likely decoding functions in: malware.bin
address: score:
---------- -------
0x0040102D 0.71000
0x0040101E 0.23000
0x00401046 0.23000
0x00401005 0.21000
0x0040100F 0.21000
0x00401014 0.21000
0x00401023 0.21000
0x004069BF 0.21000
0x00401041 0.21000
0x00406736 0.21000
FLOSS decoded 10 strings
Offset Called At String
---------- ---------- -------------------------------------
0xBFB3B4E8 0x0040595F WinSta0\Default
0xBFB3B4A0 0x0040472E Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings
0xBFB3B4A0 0x0040472E Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings
0xBFB3B4EC 0x0040472E ProxyEnable
0xBFB3B4A0 0x0040472E Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings
0xBFB3B4E0 0x0040472E ProxyServer
0xBFB3B4EC 0x0040472E ProxyEnable
0xBFB3B4A0 0x0040472E Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings
0xBFB3B4E0 0x0040472E ProxyServer
0xBFB3B4EC 0x0040472E ProxyEnable
[..snip...]
FLOSS extracted 81 stack strings
Function: Frame offset String:
---------- ------------ -------
0x00401005 0x001c WinSta0\Default
0x0040100f 0x0010 WinSta0\Default
0x0040100f 0x007f pVAD
0x0040100f 0x0034 '%s' executed.
0x0040100f 0x0038 ERR '%s' error[%d].
0x00401014 0x005c Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings
0x00401014 0x0010 ProxyEnable
0x00401014 0x001c ProxyServer
0x00401019 0x000c wininet.dll
0x00401019 0x001c InternetOpenA
0x00401019 0x0107 0\A4
0x00401019 0x00c8 InternetSetOptionA
0x00401019 0x0064 InternetConnectA
0x00401019 0x00f7 pVAInternetQueryOptionA
0x0040100a 0x0080 Mozilla/4.0 (compatible; MSIE 7.0; Win32)
0x0040100a 0x004c -ERR
0x0040100a 0x0020 FILE(%s) wrote(%d).
0x0040100a 0x0038 Invalid ojbect.
0x0040100a 0x0040 SetFilepoint error[%d].
0x0040100a 0x003c b64_ntop error[%d].
0x0040100a 0x0024 GetFileSize error[%d].
0x0040100a 0x0024 Creates file error[%d].
0x00401041 0x0047 pVAKCeID5Y/96QTJc1pzi0ZhEBqVG83OnXaL+oxsRdymHS4bFgl7UrWfP2v=wtjNukM
[..snip...]