使用IDA Pro进行分析时,通常只是利用它的反汇编功能,更快的分析汇编代码辅助后续需要采用的动态调试过程。由于hexray插件的强大,极大的提升了逆向效率。但是对于没有签名库匹配的情况下,得到都是未命名的函数,所以识别这些函数就成了一个问题。
提及一下FLIRT的原理:从函数的前32个字节中提取模式并使其成为签名。当然,如果模式相同,则会发生冲突。如果需要提取签名的库很大,则会遇到很多奔溃错误。
openssl算法库在勒索病毒(853358339279b590fb1c40c3dc0cdb72)中也算是比较常见,会静态链接至恶意软件,这为制作签名提供了基础。
所以接下来就是比较接近实操的IDA签名制作过程,记录一下。
首先逆向勒索病毒的时候通过IDA的字符串搜索功能找到使用的openssl版本号,这里是openssl-1.1.1b。
C:\lib\openssl-1.1.1b\win32-release\lib\engines-1_1
需要一个库文件来制作签名,库文件是.lib文件,等效于.dll,同样编译openssl还需要Perl环境。
在Window安装Perl,Perl在Window平台上有ActiveStatePerl和Strawberry Perl编译器。ActiveState Perl和 Strawberry Perl最大的区别是 Strawberry Perl 里面有多包含一些 CPAN 里的模块, 所以Strawberry Perl 下载的安装文件有 80多M, 而ActiveState Perl 只有20M 左右。
这里使用了 Strawberry Perl 。Window 系统上 Perl 安装步骤如下:
Strawberry 安装包链接: http://strawberryperl.com。
下载对应你系统的版本: 32bit 或 64bit 。
下载后双击打开,按安装向导一步步安装即可。
安装完后,在命令行测试一下环境。
通过字符串找到勒索病毒的编译环境为VS2017,不过其实影响不大,这里就使用本地的VS2015环境。
下载openssl源代码本地编译
https://www.openssl.org/source/old/1.1.1/
管理员打开本地VS2015开发人员命令提示,输入执行以下命令。
perl Configure VC-WIN32 no-shared no-asm --prefix=C:\Users\onion\Desktop\openssl-1.1.1b\x86_build_out
参数解释如下:
Configure是OpenSSl源码中自带的命令文件,必选参数;
VC-WIN32表示编译x86版本,VC-WIN64A表示编译x64版本,debug-VC-WIN32表示编译debug版x86版本,必选参数;
no-shared表示编译成静态链接lib模块,shared表示编译成动态链接库dll模块,必选参数;
no-asm如果要本地优化,还需要下载NASM,这里直接用no-asm选项,因此不需要下载NASM,必选参数;
--prefix是OpenSSL编译完后的安装路径,必选参数;
网上有很多关于Windows系统编译openssl的教程贴,在创建Makefile这一步中,讲到的都是使用
ms\do_ms
ms\do_masm
ms\do_nasm
这之类的命令,在编译时输入这些的命令都是提示找不到这些命令,按照网上的说法也重新去安装了一些编译器,结果是统统无效。从openssl 1.1.0版本以后就不再有ms\do_*.bat这样的文件,而是直接使用nmake命令。
所以执行完上述命令后,执行nmake命令,接着执行nmake install,最后执行nmake test进行下测试。
在编译完lib文件后,接着就到了制作签名文件的步骤了。
利用工具包中的pcf工具创建模式文件(pat),在控制台使用命令pcf .lib .pat生成模式文件。接着使用sigmake .pat .sig命令生成sig文件。
签名应用识别情况如下:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2020-11-6 11:50
被jishuzhain编辑
,原因: