第七章
1.Windows API 广泛的功能集合,管理恶意代码与微软程序库之间的交互方式。
<1> 类型,表达方法。 dw表示 double word。w表示word。H表示Handles
<2> 句柄 比如一个窗口,模块,菜单,文件等等
<3> 文件系统函数
<4> 特殊文件
2.Windows 注册表 注册表用来保存操作系统与程序的配置信息,比如设置和选项。和文件系统一样,它是基于主机感染的很好来源,并且能够揭示出关于恶意代码功能的有用信息。
<1> 根键 HKLM HKEY_LOCAL_MACHINE 保存本机机器全局设置
<2> HKCU HKEY_CURRENT_USER 保存当前配置
<3> HKEY_CLASSES_ROOT 保存定义的类型信息
<4> HKEY_CURRENT_CONFIG 保存关于当前硬件的配置设置,特别是与当前和配置标准之间不同的部分。
<5> HKEY_USERS 定义默认用户,新用户和当前用户的配置
自启动程序。向run子键写入项。常见的注册表函数。RegOpenKeyEx,RegSetValueEx,RegGetValue
使用.reg文件的注册脚本,很少有病毒使用
3.网络API
伯克利兼容套接字。Windows网络选项中最普遍使用的是伯克利兼容套接字,它们的功能在Windows和
Unix系统上几乎是一样的。
伯克利兼容套接字在网络功能和Windows系统中是由winsock库实现的,主要在ws2_32.dll中。在所有
库函数中,socket,connect,bind,listen,accept,send,recv函数是最常用的。
socket 创建一个套接字
bind 将一个套接字绑定到特定端口
listen 预示一个套接字将进入监听,等待入站连接
accept 向一个远程套接字打开一个连接,并接受连接
connect 向一个远程套接字打开一个连接,远程套接字必须在等待连接
recv 从远程套接字接受数据
send 发送数据到远程套接字
网络的服务器和客户端。客户端常见有connect,send,recv
服务器常见 socket,bind,listen,accept
4.跟踪恶意代码运行
<1> dll,动态链接库。 恶意代码作者以3中方式使用dll, 保存恶意代码,通过使用Windows dll,
通过使用第三方的dll
基本dll结构 基本上,dll文件看起来几乎和.exe文件一模一样,dll使用pe文件格式,并且只有一个单一标志,
dll的主函数是dllmain。没有标记,而且并不是一个dll的导出函数,但它在pe头中被指定为文件的入口点。
<2> 进程。 恶意代码通过创建一个进程,或修改一个已存在的进程,并执行当前程序之外的代码。操作系
统中多个进程间共享的一个尤其重要的资源是系统内存,为了达到这个目的,每一个进程被给予一块与所
有其他进程隔离的内存空间。
创建一个新的进程。 恶意diam最常使用的创建新进程的函数是 createProcess。这个函数有许多参数,并
且调用者有很多控制它如何被创建的方法
<3>线程,线程是Windows操作系统真正要执行的内容。createThread,用来创建一个线程。
<4>使用互斥量。 操作系统中的信号量,来保证线程安全,控制对共享资源的访问。
<5>服务 恶意代码附加代码的另一种方式是将它作为服务安装。
<6>组件对象模型 com是一个接口标准。 CLSID分类标识符 GUID全局唯一表示符 IID接口标识符
<7>异常 异常允许一个程序在普通执行流程之外处理事件。 如:除0异常,自定义异常。
5.内核与用户模式
内核调试 windbg,几乎所有代码都允许在用户模式,除了操作系统和硬件驱动,它们运行在内核模式。
通常,用户模式不可以执行访问硬件,必须使用Windows api来调用
当你调用一个Windows api函数操作内核结构时,会通过一个调用进入内核。
6.原生API
Lab 7-1
分析在文件Lab07-01.exe中发现的恶意代码。
问题
1.当计算机重启后,这个程序如何确保它继续运行(达到持久化驻留)?
存放在服务管理器中,随着系统启动 运行
2.为什么这个程序会使用一个互斥量?
控制线程安全,保证只有一个实例运行
3.可以用来检测这个程序的基于主机特征是什么?
创建HGL345互斥量, malservice
4.检测这个恶意代码的基于网络特征是什么?
使用ie8.0打开http://www.malwareanalysisbook.com
5.这个程序的目的是什么?
创建20个线程,访问网站。 ddos
6.这个程序什么时候完成执行?
不会执行完成,死循环。
Lab 7-2
分析在文件Lab07-02.exe中发现的恶意代码。
问题
1.这个程序如何完成持久化驻留?
没有实现持久化驻留
2.这个程序的目的是什么?
显示一个网页
3.这个程序什么时候完成执行?
显示之后就关闭了
.rdata:00402068 riid dd D30C1661h ; Data1 ; DATA XREF: _main+14o
.rdata:00402068 dw CDAFh ; Data2
.rdata:00402068 dw 11D0h ; Data3
.rdata:00402068 db 8Ah, 3Eh, 0,0, C0h, 4Fh, C9h, E2h, 6Eh; Data4
riid D30C1661-CDAF11D0-8A3E-00C0-4FC9-E26E
rclsid 0002DF01-0000-0000-C000-0000-0000-0046 注册表可以查看为 ie
Lab 7-3
对于这个实验,我们在执行前获取到恶意的可执行程序,Lab07-03.exe,已经DLL,Lab07-03.dll。声明这一点很重要,这是因为恶意代码一旦运行可能发生改变。俩个文件在受害者机器上的同一个目录下被发现。如果你运行这个程序,你应该确保俩个文件在分析机器上的同一个目录中。一个以127开始的IP字符串(回环地址)连接到了本地机器。(在这个恶意代码的实际版本中,这个地址会链接到一台远程机器,但是我们已经将它设置成连接本地主机来保护你。)
(warning:这个实验可能对你的计算机引起某些损坏,并且可能一旦安装就很难清除。不要在一个没有事先做快照的虚拟机中运行这个文件。)
这个实验可能比前面的那些有更大的挑战。你将需要使用静态和动态方法的组合,并聚焦在全局视图中,避免陷入细节。
问题:
1.这个程序如何完成持久化驻留,来确保在计算机被重启后它能继续运行?
把自己伪装成kene132.dll,修改c盘所有可执行文件的kenel32.dll。
2.这个恶意代码的俩个明显的基于主机特征是什么?
系统目录下多个kene132.dll,c盘可执行文件的exe改为kenel132.dll
3.这个程序的目的是什么?
创建后门,执行程序
4.一旦这个恶意代码被安装,你如何移除它?
编写程序使得c盘的所有可执行文件的导入表恢复正常,将kene132.dll恢复正常