记录一下恶意代码分析实战的课后习题。
Lab1-1
1.将文件上传至http://www.virustotal.com进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
能够看到很多杀软都报毒了,但是好像看不出报的是什么类型的病毒。
2.这些文件是什么时候编译的?
Lab01-01.exe创建时间:2010-12-20/00:16:19
Lab01-01.dll创建时间:2010-12-20/00:16:38
应该是同时创建的.
4.是否有导入函数显示出这个恶意代码是做什么的?如果是,是哪些导入函数?
Lab01-01.exe存在很多文件查找、复制的功能
Lab01-01.dll中Sleep和CreateProcessA可能是后门程序。下面还有一些网络连接的函数
5.是否有任何其他文件或基于主机的迹象,让你可以在受感染系统上查找?
label01-01.exe会创建“C:\Windows\System32\Kernel32.dll”文件名很容易让人以为是正常的文件Kernel32.dll,人眼容易看错的。
6.是否有基于网络的迹象,可以用来发现受感染机器上的这个恶意代码?
Label01-01.dll中存在一个ip·127.26.152.13(内网ip)是攻击者的ip
7.这些文件的目的是什么?
猜测Label01-01.exe主要用于将Label01-01.dll复制到“C:\Windows\System32\Kernel32.dll”
Label01-01.dll的功能主要是连接远程攻击者服务器,接受指令并创建相应进程。
Lab1-2
1.将文件上传至http://www.virustotal.com进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
显示upx加壳,并且可能是下载器。用StudyPE的段也表明是UPX加壳。
3.有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
CreateService会创建服务对象。InternetOpenUrl会通过url连接资源
CreateService是一个创建一个服务对象,并将其添加到指定的服务控制管理器数据库的函数。
SC_HANDLE CreateServiceA(
SC_HANDLE hSCManager,
LPCSTR lpServiceName,
LPCSTR lpDisplayName,
DWORD dwDesiredAccess,
DWORD dwServiceType,
DWORD dwStartType,
DWORD dwErrorControl,
LPCSTR lpBinaryPathName,
LPCSTR lpLoadOrderGroup,
LPDWORD lpdwTagId,
LPCSTR lpDependencies,
LPCSTR lpServiceStartName,
LPCSTR lpPassword
);
StartServiceCtrlDispatcherA:将服务进程的主线程连接到服务控制管理器,这使得线程成为调用进程的服务控制调度程序线程。
BOOL StartServiceCtrlDispatcherA(
const SERVICE_TABLE_ENTRYA *lpServiceStartTable
);
InternetOpenUrl:通过FTP或者http url打开资源
void InternetOpenUrlA(
HINTERNET hInternet,
LPCSTR lpszUrl,
LPCSTR lpszHeaders,
DWORD dwHeadersLength,
DWORD dwFlags,
DWORD_PTR dwContext
);
InternetOpen:初始化一个应用程序来使用WinNet函数
void InternetOpenA(
LPCSTR lpszAgent,
DWORD dwAccessType,
LPCSTR lpszProxy,
LPCSTR lpszProxyBypass,
DWORD dwFlags
);
4.有哪些基于主机或基于网络的痕迹,可以用来确定被这个恶意代码所感染的机器?
有一个URL:http://www.malwareanalysisbook.com。可以通过与该URL的流量来确定是否被感染。
Lab1-3
1.将文件上传至http://www.virustotal.com进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
FSG加壳。
利用OD插件ollydump进行脱壳
3.有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
有一个网页链接:http://www.malwareanalysisbook.com/ad.html 。下面应该是初始化一个ole COM对象,具体有什么用也不是很清楚。
OleInitialize是一个Windows API函数。它的作用是在当前单元(apartment)初始化组件对象模型(COM)库,
将当前的并发模式标识为STA(single-thread apartment——单线程单元),
并启用一些特别用于OLE技术的额外功能。除了CoGetMalloc和内存分配函数,
应用程序必须在调用COM库函数之前初始化COM库。
HRESULT OleInitialize(
LPVOID pvReserved
);
CoCreateInstance 用指定的类标识符创建一个Com对象,用指定的类标识符创建一个未初始化的对象
HRESULT CoCreateInstance(
REFCLSID rclsid,
LPUNKNOWN pUnkOuter,
DWORD dwClsContext,
REFIID riid,
LPVOID *ppv
);
The variant to initialize.
void VariantInit(
VARIANTARG *pvarg
);
Lab1-4
1.将文件上传至http://www.virustotal.com进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
报毒,有一个报了下载器
3.有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
前面三个API和程序权限相关。后面WinExec用来执行可执行文件,并且有资源的相关操作。
5.有哪些基于主机或基于网络的迹象,可以用来确定被这个恶意代码感染的机器?
wupdmgr.exe、winup.exe这两个文件比较可疑。 psapi.dll是Windows系统进程状态支持模块。
6、这个文件在资源段中包含一个资源。用ResourceHacker工具来检查资源?
很明显包含了一个PE文件。
分析一下保存的resource.bin。明显是个下载器,从http://www.practicalmalwareanalysis.com/updater.exe下载保存为winup.exe和wupdmgrd.exe
总结
静态分析恶意程序的简单步骤
- 可以先用在线网站进行检查,是否与已存在的恶意程序相同。如果相同,可以查看相关的文档和博客
- 如果程序已经加壳需要对程序进行脱壳
- 查看文件的导入和导出,猜测大概功能(文件遍历、注册表修改、互斥体创建、网络连接、进程创建、资源释放)
- 查看字符串,释放有敏感字符(url、文件名、某些库的语句)
- 对程序进行分析
先挖个坑,之后有空把常见脱壳办法记录一下。VMP也学一下。