利用AI+大数据的方式分析恶意样本(十四)

   日期:2020-05-31     浏览:91    评论:0    
核心提示:二进制样本分析之脱壳方法研究大数据

文章目录

    • 系列文章目录
    • 本文主旨
      • 加壳分类
      • 脱壳分类
      • Example
        • 硬脱壳示例:
        • 软脱壳示例:

系列文章目录

  • 《利用AI+大数据的方式分析恶意样本(一)》:通过四种方法静态分析恶意软件
  • 《利用AI+大数据的方式分析恶意样本(二)》:x86架构反汇编基本原理及实践
  • 《利用AI+大数据的方式分析恶意样本(三)》:通过动态运行恶意软件来解析其功能
  • 《利用AI+大数据的方式分析恶意样本(四)》:通过提取特征来构建恶意代码样本相互关联关系
  • 《利用AI+大数据的方式分析恶意样本(五)》:一些常用的机器学习方法
  • 《利用AI+大数据的方式分析恶意样本(六)》:以多种测试标准的评价方法
  • 《利用AI+大数据的方式分析恶意样本(七)》:构建基于机器学习的恶意代码检测器
  • 《利用AI+大数据的方式分析恶意样本(八)》:可视化恶意软件的趋势
  • 《利用AI+大数据的方式分析恶意样本(九)》:介绍深度学习基础
  • 《利用AI+大数据的方式分析恶意样本(十)》:基于卷积神经网络的恶意代码家族标注
  • 《利用AI+大数据的方式分析恶意样本(十一)》:关于利用卷积神经网络进行恶意代码检测的一些改进方法
  • 《利用AI+大数据的方式分析恶意样本(十二)》:通过AI对抗攻击来混淆基于机器学习的恶意样本检测
  • 《利用AI+大数据的方式分析恶意样本(十三)》:Cuckoo沙箱的搭建教程
  • 《利用AI+大数据的方式分析恶意样本(十四)》:二进制样本分析之脱壳方法研究

本文主旨

最近在做恶意代码样本检测的数据集处理过程,就批量化的通用加壳和脱壳技术产生了一点小问题,目前还不知道如何解决。下面先简单介绍一下有关壳的理论知识:

加壳分类

  • 压缩壳:资源体积缩小,常见的压缩壳有UPX、ASPACK、TELOCK、PELITE、NSPACK等
  • 加密壳:防止反汇编或者跟踪,常见的加密壳有ARMADILLO、ASPROTECT、ACPROTECT、EPE、SVKP 等

如图一所示,运行加壳程序过程相当于模拟windows加载器的过程

脱壳分类

  • 硬脱壳:根据加壳算法写出逆向算法进行脱壳
  • 软脱壳:将程序加载到内存中,其自行脱壳后,抓取内存镜像,重新构造PE可执行文件

脱壳一般方法:

  • 查壳
  • 寻找OEP(程序入口点)
  • dump(镜像)内存
  • 修复IAT(导入函数表)

Example

经yara规则匹配,我所爬取的样本中所含壳的种类如下:

Borland_Delphi
BobSoft_Mini
Nullsoft_PiMP
Armadillo_v4x
Safeguard_103
UPX_v0896
UPX_wwwupxsourceforgenet
MSLRH_V031
yodas_Protector
PeCompact_v208
PECompact_2x
ExeShield_Protector
PECompact_20x
ExeShield_36
PECompact_2xx
ExeShield_v37
PECompact_v2xx
PECompact_V2X
PECompact_v20
PeCompact_2xx
PeCompact_253
_ExeShield
Armadillo_v2xx
WinRAR_SFX
RAR_SFX
PackerUPX_CompresorGratuito
ASPack_v212
ASPack_v21
ASProtect_V2X
ASPack_v211d
ASPack_212withouth
AHTeam_EP
FSG_v110
ASPack_v2001
ASPack_v10804
ASPack_v2000
UPX_302
UPX_293
UPX_290
Netopsystems_FEAD
ASProtect_v132
Install_Shield
InstallShield_2000
VMProtect_1704
Armadillo_V3X
Armadillo_3X
Armadillo_v430
UPX_v30
Armadillo_v1xx
Symantec_Visual
WinZip_32
Inno_Setup
PC_Guard
Borland_Cpp
GCC_RealBasic
ASPack_V22
PureBasic_4x
MingWin32_GCC
MingWin32_v
MinGW_GCC
PESpin_03
PESpin_0b
PE_Spin
Installer_VISE
MPRESS_V200
Obsidium_v10061
ASProtect_v123
ASProtect_v12x
ASProtect_v11
ASProtect_133
ASProtect_v12
ASProtect_123
eXPressor_120
eXPressor_v12
eXpressor_v12
eXPressor_120b
eXpressor_v10x
eXPressor_12
eXPressor_13
eXPressor_v120b
eXPressor_V12
PureBasic_DLL
NsPack_14
nSPack_1x2x
MASMTASM
TASM_MASM
PE_Diminisher
Stelth_PE
Inno_Installer
ASPack_v107b
ASPack_v106b
StarForce_V3X
Program_Protector
EXECryptor_V22X
EXE_Cryptor
Pelles_C
ACProtect_13x
Upack_036
Upack_V028
Upack_028
Upack_V03X
WinUpack_v039
Upack_v028
Upack_Patch
Upack_V036
NsPack_v37
NsPacK_V37
NSPack_3x
NsPack_3x
FSG_v11
FSG_v10
FSG_110
FSG_100
FSG_v100
Dev_Cpp
Dev_Cue
MingWin32_Dev
LCC_Win32
KGB_SFX
MSVCpp_DLL
NeoLite_vxx
PKLITE32_v11
PKLITE32_11
PKLITE32_V11
Obsidium_v10059
Enigma_Protector
ASPack_v211
ASPack_211
tElock_096
tElock_v095
tElock_v096

硬脱壳示例:

UPX壳:https://upx.github.io/

在该网站的github链接库的release界面中,下载最新版本的upx-3.96-win64.zip。

将下载的压缩包在虚拟机中解压,打开cmd,并将upx加壳后的样本复制入虚拟机。

输入以下指令,获取upx加壳脱壳的基本用法,可以发现,该压缩壳支持很多种文件的加壳,用法也相当简单。

C:\Users\gmz-pc\Desktop\upx\upx-3.96-win64>upx --help
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2020
UPX 3.96w       Markus Oberhumer, Laszlo Molnar & John Reiser   Jan 23rd 2020

Usage: upx [-123456789dlthVL] [-qvfk] [-o file] file..

Commands:
  -1     compress faster                   -9    compress better
  --best compress best (can be slow for big files)
  -d     decompress                        -l    list compressed file
  -t     test compressed file              -V    display version number
  -h     give this help                    -L    display software license

Options:
  -q     be quiet                          -v    be verbose
  -oFILE write output to 'FILE'
  -f     force compression of suspicious files
  --no-color, --mono, --color, --no-progress   change look

Compression tuning options:
  --brute             try all available compression methods & filters [slow]
  --ultra-brute       try even more compression variants [very slow]

Backup options:
  -k, --backup        keep backup files
  --no-backup         no backup files [default]

Overlay options:
  --overlay=copy      copy any extra data attached to the file [default]
  --overlay=strip     strip any extra data attached to the file [DANGEROUS]
  --overlay=skip      don't compress a file with an overlay

Options for djgpp2/coff:
  --coff              produce COFF output [default: EXE]

Options for dos/com:
  --8086              make compressed com work on any 8086

Options for dos/exe:
  --8086              make compressed exe work on any 8086
  --no-reloc          put no relocations in to the exe header

Options for dos/sys:
  --8086              make compressed sys work on any 8086

Options for ps1/exe:
  --8-bit             uses 8 bit size compression [default: 32 bit]
  --8mib-ram          8 megabyte memory limit [default: 2 MiB]
  --boot-only         disables client/host transfer compatibility
  --no-align          don't align to 2048 bytes [enables: --console-run]

Options for watcom/le:
  --le                produce LE output [default: EXE]

Options for win32/pe, win64/pe, rtm32/pe & arm/pe:
  --compress-exports=0    do not compress the export section
  --compress-exports=1    compress the export section [default]
  --compress-icons=0      do not compress any icons
  --compress-icons=1      compress all but the first icon
  --compress-icons=2      compress all but the first icon directory [default]
  --compress-icons=3      compress all icons
  --compress-resources=0  do not compress any resources at all
  --keep-resource=list    do not compress resources specified by list
  --strip-relocs=0        do not strip relocations
  --strip-relocs=1        strip relocations [default]

Options for linux/elf:
  --preserve-build-id     copy .gnu.note.build-id to compressed output

file..   executables to (de)compress

This version supports:
    amd64-darwin.dylib                   dylib/amd64
    amd64-darwin.macho                   macho/amd64
    amd64-linux.elf                      linux/amd64
    amd64-linux.kernel.vmlinux           vmlinux/amd64
    amd64-win64.pe                       win64/pe
    arm-darwin.macho                     macho/arm
    arm-linux.elf                        linux/arm
    arm-linux.kernel.vmlinux             vmlinux/arm
    arm-linux.kernel.vmlinuz             vmlinuz/arm
    arm-wince.pe                         arm/pe
    arm64-darwin.macho                   macho/arm64
    arm64-linux.elf                      linux/arm64
    armeb-linux.elf                      linux/armeb
    armeb-linux.kernel.vmlinux           vmlinux/armeb
    fat-darwin.macho                     macho/fat
    i086-dos16.com                       dos/com
    i086-dos16.exe                       dos/exe
    i086-dos16.sys                       dos/sys
    i386-bsd.elf.execve                  bsd.exec/i386
    i386-darwin.macho                    macho/i386
    i386-dos32.djgpp2.coff               djgpp2/coff
    i386-dos32.tmt.adam                  tmt/adam
    i386-dos32.watcom.le                 watcom/le
    i386-freebsd.elf                     freebsd/i386
    i386-linux.elf                       linux/i386
    i386-linux.elf.execve                linux.exec/i386
    i386-linux.elf.shell                 linux.sh/i386
    i386-linux.kernel.bvmlinuz           bvmlinuz/i386
    i386-linux.kernel.vmlinux            vmlinux/i386
    i386-linux.kernel.vmlinuz            vmlinuz/i386
    i386-netbsd.elf                      netbsd/i386
    i386-openbsd.elf                     openbsd/i386
    i386-win32.pe                        win32/pe
    m68k-atari.tos                       atari/tos
    mips-linux.elf                       linux/mips
    mipsel-linux.elf                     linux/mipsel
    mipsel.r3000-ps1                     ps1/exe
    powerpc-darwin.macho                 macho/ppc32
    powerpc-linux.elf                    linux/ppc32
    powerpc-linux.kernel.vmlinux         vmlinux/ppc32
    powerpc64-linux.elf                  linux/ppc64
    powerpc64le-darwin.macho             macho/ppc64le
    powerpc64le-linux.elf                linux/ppc64le
    powerpc64le-linux.kernel.vmlinux     vmlinux/ppc64le

UPX comes with ABSOLUTELY NO WARRANTY; for details visit https://upx.github.io

脱壳命令及结果如下:

左边为脱壳后大小:2M,右边为脱壳前大小1.28M

拿到peid中进行检测:

很清晰可以看到upx壳已被脱掉。

软脱壳示例:

软脱壳就是如上文所说,利用在虚拟机中执行,当程序控制权移交给源程序后,dump镜像内存中的程序,保存为PE格式文件。

主要reference:

  • https://www.freebuf.com/sectool/135217.html
  • https://github.com/Phat3/PINdemonium

安装步骤:

  • Download the linked version of PIN
  • Unzip PIN to the root directory and rename the folder to pin
  • Clone this repository
  • Extract the archive in PINdemonium/ScyllaDependencies/diStorm.rar into PINdemonium/Scylla/
  • Extract the archive in PINdemonium/ScyllaDependencies/tinyxml.rar into PINdemonium/Scylla/
  • Extract the archive in PINdemonium/ScyllaDependencies/WTL.rar into PINdemonium/Scylla/
  • Open the file PinUnpacker.sln with Visual Studio 2010 ( NB: The version is mandatory )
  • Create a folder C:\pin and copy the folders PINdemonium\PINdemoniumDependencies and PINdemonium\PINdemoniumResults in C:\pin\
  • Be sure that you are compiling in Release mode
  • Be sure that all the module inside the project are compiled using the platform toolset v100 ( you can see this with right click on the module -> Properties -> platform toolset field )
  • Compile the solution

按照该项目github的readme中所述:安装VS2010的链接如下:微软官网

其中有关VS的操作注意以下几点:

  • debug->releases
  • 右侧每个模块,右键点击属性,平台工具集确保为v100,如下图所示:

之后点击绿色三角编译该项目,编译完成后,可能会报错,但直接去C:pin/目录下查看有无PINdemonium.dll文件,有的话代表编译成功了,没有的话,看下上面是哪一步出现了问题。

开始脱壳:

C:\pin>pin -t PINdemonium.dll -- C:\Users\mzgao\feaf6a01dd88eea15431222ad17f9490e8463a6b225.exe

然后在c:\pin\PINdemoniumResults文件夹下查看脱壳后的结果:

左侧脱壳后大小,右侧脱壳前大小,可以看出有明显的变化。

我们将其拖到peid中进行一下查壳操作:

很明显可以看到peid查到的壳变成了nothing

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服