恶意代码分析-静态分析基础

静态分析

静态基础分析

使用反病毒软件扫描

在线扫描工具

哈希识别

恶意代码样本通过一个哈希程序,会产生出一段用于唯一标识这个样本的独特哈希值

可以在线搜索这个文件是否被识别

在线文件hash计算工具

字符串查找

程序中的字符串就是一串可打印的字符序列

可以通过搜索可执行文件中的可打印字符串

如:微软strings程序,它会忽略上下文和格式,可用来分析任何文件类型

加壳与混淆

恶意代码编写者经常使用加壳或混淆技术,让他们的文件更难被检测或分析。混淆程序是恶意代码编写者尝试去隐藏其执行过程的代码。而加壳程序则是混淆程序中的一类,加壳后的恶意程序会被压缩,并且难以分析。这两种技术将严重阻碍你对恶意代码的静态分析。
合法程序大多总是会包含很多字符串。而由被加壳或者混淆的恶意代码直接分析获取得到的可打印字符串则很少。如果使用Strings程序来搜索一个程序,发现它的字符串很少时,它就很可能是混淆的或是加壳的,也表明它可能是恶意的。

注意:加壳和混淆代码通常至少会包含LoadLibraryGetProcAddress函数,它们是用来加载和使用其他函数功能的。

如果可打印的字符串很少的换,可能就是加壳或混淆的程序

文件加壳

文件加壳

在这里插入图片描述

检测加壳

检测是否加壳的一种方法是使用PEID工具
PEID检测加壳器的类型,链接应用程序的编译器类型
程序被加壳后,必须进行脱壳,才能执行下一步
使用参考后文实验内容

PE文件概述

PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL),详细可参考其他博文。

链接库与函数

​ 对于一个可执行程序,我们可以收集到的最有用信息之一,就是它的导入表。导入函数是一个程序所使用的但存储在另一程序中的那些函数,比如包含了对于很多程序都通用的一些代码函数库。代码库可以通过链接方式,被连接到主程序中。
​ 程序员选择将一些导入函数链接到他们编写的程序中,这让他们不必重新在多个程序中重复实现特定功能。代码库可以被静态链接,也可以在运行时链接,或者动态链接。了解代码库是如何被链接的,对于我们理解恶意代码来说,是非常关键的,因为我们在PE文件头中可以找到的信息取决
于链接了哪些代码库。

静态,运行与动态链接
  • 静态链接

    Windows平台链接代码库最不常用的方法,而Unix和Linux中常见

    特点:库被静态链接到可执行程序时,库中的所有代码都会被复制到程序中,显然这样程序的代码就会大大增多,你也很难区分哪些是静态链接的代码,哪些又是程序本身的代码,PE文件头中没有提示

  • 运行时链接

    一些特定的windows API如LoadLibraryGetProcAddressLdrGetProcAddressLdrLoadDll也会被使用。LoadL ibraryGetProcAddress允许一个程序访问系统上任何库中的任何函数,这意味着当这些函数被使用时,你无法静态分析出可疑样本程序中会链接哪些函数。

  • 动态链接

    最常见,当代码库被动态链接时,宿主操作系统会在程序装载时搜索所需的代码库,如果程序调用了被链接的库函数,则函数会在代码库中执行

PE文件头中存储了每个将被装载的库文件,以及每个会被程序使用的函数信息。程序所使用的库与调用的函数,识别它们尤为重要

常见的DLL程序

在这里插入图片描述

识别函数小技巧
​ 当微软更新一个函数, 而且新函数与原先函数不兼容的时候,微软还会继续支持原先的旧函数。这时新函数会给一个 与旧函数相同的名字,并在后面加上Ex后缀。而被显著更新过两次的函数,则会在它们的名字后面有两个Ex后缀。

​ 以字符串作为参数的许多函数,在它们的名字后面会包含一个A或者一个W,如CreateDirectoryW.这个字母A或者W在这个函数的文档中并没有出现。它只是表明这个接受字符
串参数的函数有着两个不同的版本:以A结尾的输入参数类型为ASCII字符串,而以W结尾的输入参数为宽字符字符串。当你在微软的文档中搜索这个函数时,需要记得丢掉后缀的A或者W。

导入导出函数

PE文件头中包含可执行文件使用的特定函数信息

DLL和EXE的导出函数,使用与与其他程序和代码进行交互时所使用的,通常一个DLL会实现一个或多个功能函数,然后导出它们,从而别的程序可以导入并使用。

恶意代码使用导出函数,它经常会要么完全省略名字,要么使用不明确或误导性的名字

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值