恶意代码分析Lab-1

第一章实验

ida快捷键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
空格键    反汇编窗口切换文本跟图形
ESC退到上一个操作地址
G搜索地址或者符号
N重命名
分号键 注释
ALT+M 添加标签
CTRL+M 列出所有标签
CTRL +S 二进制段的开始地址结束地址
C code 光标地址出内容解析成代码
P 在函数开始处使用P,从当前地址处解析成函数
D data解析成数据
A ASCII解析成ASCII
U unDefined解析成未定义的内容
X 交叉引用
F5 C伪代码
菜单栏中的搜索功能中
有ALT+T 搜索文本
ALT+B 搜索16进制 搜索opcode 如ELF文件头
打开断点列表 CTRL+ALT+B
单步步入 F7
单步不过 F8
运行到函数返回地址 CTRL+F7
运行到光标处 F4

常见dll函数

image-20220404234608216

Lab1-1

Lab01-01.exe和Lab01-01.dll

1.将文件上传至 http://www.VirusTotal.com/进行分析并查看报告。文件匹配到了已有的反病毒软件的特征?

image-20220404222643932

2.这些文件是什么时候编译的?

exe:

image-20220404222756154

dll:

image-20220404222833420

3.这两个文件中是否存在迹象说明它们是否被加壳或混淆了?如果是,这些迹象在哪里?

用peid分析,能够正常识别编译环境,ep段正常,所以没有加密或者混淆

image-20220404230056042 image-20220404230132634

4.是否有导入函数显示出了这个恶意代码是做什么的?如果是,是哪些导入函数?

Lab01-01.dll的导入函数:

Wsock32.dll和Ws2_32.dll这两个是联网DLL,访问其中任何一个DLL的程序非常可能连接网络,或是执行网络相关的任务

image-20220404230936300

Lab01-01.exe的导入函数:

FindFirstFile和FindNextFile函数是特别值得关注的,因为它们提供的功能是搜索一个目录下所有的文件。

image-20220404231310246

Lab01-01.exeexe,根据ida的字符串分析(ctrl+f12)可得到C:\Windows\System32\kerne132.dll可能是程序运行的特征

image-20220404231801690

Lab1-2

peid的ep段显示upx1,说明文件可能加壳了

image-20220404232933256

upx -d 脱壳

image-20220404234057741

脱壳后正常显示了

image-20220404234206754

上传网页分析,得到导入函数

WININET.dll,ADVAPI32.dll说明这个程序可能进行网络和进程的操作

image-20220404234427730

通过ida的字符串分析

image-20220404234925588

这里可能是创建了一个名为MalService的服务(DisplayName的内容就是MalService)

image-20220404235344187

验证样本传输的网络数据

使用od分析,右键中文搜索引擎,智能搜索,找到网站

image-20220404235856331 image-20220405001409765

主线程窗口中选择数据窗口跟随(主线程窗口放大即可找到数据窗口)

image-20220405001453388 image-20220405001229162

改成127.0.0.1,用00填充剩下的位置

image-20220405170214320

然后右键选择复制到可执行文件,然后再右键保存文件

image-20220405173030229

PS:一直捕捉不到样本的网络数据,并且调试的时候会卡住,故放弃了。。。

Lab1-3

首先可以看到这是个fsg壳,看到有人试过了,所以我也决定尝试手动脱壳试试

image-20220407235939049

使用x32dbg,技巧就是f4过跳转,f8走,直到看到一个大跳,跟进去看看

image-20220408000554875

如果到了系统领空,可以alt+f9跳出去

image-20220408000629401

猜测这个就是程序的oep,在反汇编窗口中转到这个地址,然后直接f4看看

image-20220408001010734

image-20220408001507799

然后使用这个插件,先dump一份

image-20220408001453582

image-20220408002127337

然后点击自动搜索IAT表和获取导入表

image-20220408001835717

最后修复dump的文件即可

image-20220408002238168

导入表内容

image-20220408003250804 image-20220408003313799

拖进ida,这个psz就是这个网址,可能程序会与这个网址进行连接

image-20220408003447040

image-20220408003430268

CoCreateInstance的官方文档

CoCreateInstance function (combaseapi.h) - Win32 apps |微软文档 (microsoft.com)

相关文章COM组件的逆向 - QKSword - 博客园 (cnblogs.com)

TOD赤橙黄绿青蓝紫队系列:COM之恶 - FreeBuf网络安全行业门户

参考以上文章,com组件使用之前需要初始化,初始化com组件之后,使用函数CoCreateInstance来调用对象和接口,第一个参数使用CLSID指定了对象,第四个参数使用IID指定了接口,最后一个参数为获得的接口指针。

原型

1
2
3
4
5
6
7
HRESULT CoCreateInstance(
[in] REFCLSID rclsid,
[in] LPUNKNOWN pUnkOuter,
[in] DWORD dwClsContext,
[in] REFIID riid,
[out] LPVOID *ppv
);

iid和clsid的结构

image-20220408143329179

样本中查看其clsid为0002DF01-0000-0000-C000-000000000046

image-20220408143206824

可以直接在注册表里搜索(clsid在注册表HKEY_CLASSES_ROOT\CLSID下,IID在HKEY_CLASSES_ROOT\Interface或HKLM\Software\Classes\Interface下)

image-20220408143924597

这里获取到的IIDD30C1661-CDAF-11D0-8A3E-00C04FC9E26E

image-20220408150731857

可以谷歌或者百度看看这个GUID对应的接口是什么,这里是IWebBrowser2

image-20220408150943440

找到接口之后,在ida的结构体窗口添加这个标准结构体(Vtbl是虚函数表的意思)

image-20220408154815435

对于这个指针,右键convert to struct与结构体建立联系,就可以看到调用的函数是什么了

image-20220408160058127

image-20220408161004654

之后就可以知道正确调用的函数了

image-20220408160839433

这里可以看到是使用了IWebBrowser2::Navigate方法IWebBrowser2::导航|微软文档 (microsoft.com)打开了这个url


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!,本博客仅用于交流学习,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 文章作者拥有对此站文章的修改和解释权。如欲转载此站文章,需取得作者同意,且必须保证此文章的完整性,包括版权声明等全部内容。未经文章作者允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。若造成严重后果,本人将依法追究法律责任。 阅读本站文章则默认遵守此规则。