前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >内核级木马与病毒攻防:windows恶意代码分析入门

内核级木马与病毒攻防:windows恶意代码分析入门

作者头像
望月从良
发布2020-07-14 16:59:28
1.3K0
发布2020-07-14 16:59:28
举报
文章被收录于专栏:Coding迪斯尼Coding迪斯尼

本节帮助读者入门windows上如何对恶意软件或病毒做初步分析。分析分两种,一种叫静态分析,也就是通过直接读取病毒或恶意程序的可执行文件来分析它的运行原理,一种是动态分析,也就是在病毒或恶意程序正在运行的情况下,监视其一举一动,通过观察它在系统中的运行情况来分析它的目的和原理。

本节介绍基本的静态分析方法,该方法简单易行,但作用有限,要想跟病毒或恶意程序斗智斗勇最终还得依赖于动态分析。静态分析的第一种方法就是直线读取病毒或恶意程序的可执行文件,从中抽取关键信息。很多病毒或恶意程序的作者为了快速实现其非法目的,在代码设计时往往粗制滥造,不会关心软件工程方面的问题,例如他们会将服务器ip,URL等重要信息以字符串的方式写在代码里,因此直接读取其可执行文件就能获取这些信息,我们看一个例子,使用VS编译如下一段非常简单的代码,然后生成exe可执行文件:

代码语言:javascript
复制
#incolude<iostram>
const char* p = "This is a String";
int main() {
std::cout<<"Hello World!";
}

注意到程序里有两个字符串,它们会直接存储在编译好的可执行文件里,在恶意软件或病毒程序中,这些字符串往往对应服务器ip或某些关键信息,直接从可执行文件中抽取出这些信息后就能得到破解病毒和恶意代码的关键线索。使用windows系统提供的strings.exe程序可以直接读取给定文件中的ASCII字符串,假设上面代码编译后生成的可执行文件为StringExample.exe,那么可以执行如下命令:

代码语言:javascript
复制
strings  stringExample.exe

然后可以看到如下信息被输出:

注意看上图中选中部分对应的就是代码中的两个字符串。在win10上可能不附带strings.exe程序,读者可以搜索后在微软官网上直接下载。通常情况下病毒或恶意代码的作者不会蠢到这个程度,他们肯定会想办法尽可能隐藏自己,通常做法是对编译好的可执行文件进行打包或代码模糊处理,这样你就很难通过信息抽取或反编译的方式直接掌握其运行逻辑。

一种最常用的反查杀手段就是对可执行文件进行打包压缩,然后在打包后的文件上添加解包代码,在病毒或恶意软件运行时,它会先执行解包代码将被打包的病毒程序释放出来然后再运行,基本流程如下所示:

通常用于打包可执行文件或代码的程序叫upx,可以通过搜索将upx.exe下载到windows系统上,然后执行如下命令:

代码语言:javascript
复制
upx StringExample.exe

执行后会看到如下画面:

由于有矛就有盾,于是就有专门的工具可以用于查看文件是否被打包,最常用的就是PEid.exe,它也是windows上可执行程序,将其下载到系统上,然后运行并选中要查看的文件就可以判断其是否被打包过,使用过程如下:

从选中处可以看到,它显示出程序被upx打包过。静态分析技术还着重于查看可执行文件链接了哪些程序库,并且从中调用了那些函数。windows程序链接方式有静态和动态两种,静态方式就是通过直接将lib文件内的函数代码与可执行文件代码一起编译成可执行文件。动态方式就是代码在执行时,将DLL加载到内存中,然后调用其中的某些函数,如果我们能读取代码调用了哪些函数就可以很好的判断其目的。

查看链接函数库最好的工具是Dependency walker,目前在win10上原来的walker已经无法运行,可以使用如下链接下载可用的walker:https://github.com/lucasg/Dependencies 使用它打开一个可执行exe程序后就可以看到它运行时所依赖的链接库:

它的具体运用在后面进行动态分析时再进一步详解。这里先看个大概,从程序使用的链接库可以很有效的把握病毒或恶意程序的目的。如果它加载了kernel32.dll,那么它有可能创建子进程或读取硬盘文件信息,因为该链接库提供了OpenProcess,CreateFile等接口。如果使用到User32.dll,那么它有可能创建了用户界面并且隐藏起来,同时要注意它是否从中加载SetWindowsEx这类函数,如果有那么它就会监听其他程序窗口对应的消息,例如监听键盘按键事件从而盗取用户的账号密码。

如果加载了Advapi32.dll,那么它有可能操纵注册表,例如实现开机自动运行,如果它加载了WSock32.dll和Ws_32.dll,那么它就要调用socket功能实现网络数据发送,极有可能它会将用户电脑上收集的信息发送给远程服务器。大多数情况下,病毒或恶意代码的创作者会“加壳”,也就是通过前面的upx类似程序将代码打包压缩,这样就能防止别人通过walker这类软件抓取它的加载库从而防止病毒或恶意代码被查杀。

下一节我们看看可执行exe文件的基本结构。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coding迪斯尼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档