恶意代码分析实战学习之windows基础

1、黑客 Windows API

Windows 是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程式达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application), 所以便称之为 Application Programming Interface,简称 API 函数。

常见Windows API类型

恶意代码分析实战学习之windows基础_第1张图片

2、句柄

句柄是在操作系统中被打开或被创建的项,比如一个窗口、进程、模块、菜单、文件,等等。
句柄在它们引用一个对象或其他某个内存位置这点上很像指针。然而,和指针不同的是,句柄不能被用来进行数学操作,并且它们不总是表示对象地址。你能对句柄做的唯一的事情,就是保存它,并在后续函数调用中使用它来引用同一个对象。

3、文件系统函数

打开文件 CreateFile 文件打开成功后会返回一个用于操作的句柄,通过这个句柄可以对文件进行操作。
关闭文件 CloseHandle 对文件操作完成后,需要对打开的文件句柄进行关闭以释放资源。
删除文件 DeleteFile 通过指定文件名字来删除文件。
读取文件 ReadFile 通过CreateFile返回的句柄去操作文件
写入文件 WriteFile 通过CreateFile返回的句柄去操作文件
即时写入 FlushFileBuffers 将指定句柄文件的缓冲区进行清空,使Windows将缓冲区中的文件写入磁盘。
指定读写 SetFilePointer 通过移动文件指针读取指定位置的内容
逻辑驱动器 GetLogicalDriveStrings 获取本地所有逻辑驱动器
驱动器类型 GetDriverType 通过指定驱动器的名字获取指定驱动器类型
创建目录 CreateDirectory 创建目录的函数
移除目录 RemoveDirectory 通过指定目录的名字移除目录的函数

4、注册表

4.1 注册表结构

WIN+R -> regedit

恶意代码分析实战学习之windows基础_第2张图片

 

根键 注册表被划分为称为根键的5个顶层节。有时,术语HKEY和储巢也被使用。
子键 一个子键就像是一个文件夹中的子文件夹。
一个键是一个注册表中的文件夹,它可以包含额外的文件夹或键值。根键和子键都是键。
值项 一个值项是一个配对的名字和值。
值或数据 值或数据是存储在注册表项中的数据。

4.2 根键

HKEY_LOCAL MACHINE(HKLM)

保存对本地机器全局设置。

HKEY CURRENT USER(HKCU) 保存当前用户特定的设置。
HKEY_CLASSES_ROOT

保存定义的类型信息。

HKEY CURRENT CONFIG

保存关于当前硬件配置的设置,特别是与当前和标准配置之间不同的。

HKEY_USERS 定义默认用户、新用户和当前用户的配置。

4.3 注册表函数

打开注册表 RegOpenKeyEx 通过指定根键和子键字符串打开相应子键,返回子键句柄。
关闭注册表 RegCloseKey 通过关闭以打开的注册表句柄以释放资源。
创建子键 RegCreateKeyEx 通过指定根键和子键字符串创建相应子键,返回子键句柄。
删除子键 RegDeleteKey 删除最下一层的子键。
查询键值项 RegQueryValueEx 通过指定子键和键值项字符串查询相应键值。
写入键值项 RegSetValueEx 通过指定子键和键值项字符串写入相应键值。
删除键值项 RegDeleteValue 通过指定子键和键值项字符串删除相应键值。
枚举子键 RegEnumKeyEx 通过指定根键获取其所有子键。
枚举键值 RegEnumValue 通过指定子健获取其所有键值。
获取值 RegGetValue 获取一个键值项的值。

5、服务

恶意代码附加代码的另一种方式就是将它作为服务安装。Windows允许通过使用服务,来使任务作为后台应用程序运行,而不需要它们自己的进程或线程;代码被Windows服务管理器调度和运行,但没有用户输入。

常用服务函数

打开服务管理器 OpenSCManager 通过指定主机名和SCM名打开服务管理器
关闭服务管理器 CloseServiceHandle 可以用来关闭由OpenSCManager和OpenService打开的句柄
打开指定服务 OpenService 通过OpenSCManager指定的句柄和服务名打开服务
启动服务 StartService 通过OpenService指定的句柄启动服务
停止服务 ControlService 通过OpenService指定的句柄停止服务
枚举服务 EnumServicesStatus 可以通过多种方式枚举服务
创建服务 CreateService 创建一个新的服务

 

6、进程

恶意代码也可以通过创建一个新进程,或修改一个已存在的进程,来执行当前程序之外的代码。一个进程是Windows正在执行的程序。每一个进程管理它自己的资源,诸如打开的句柄与内存。一个进程包含一个或多个由CPU执行的线程。传统上,恶意代码包括它自己的独立进程,但更新型的恶意代码则普遍将自身代码作为其他进程的一部分执行。

常用进程函数

创建进程 CreateProcess
结束进程 ExitProcess
强制结束某个进程 FindWindow
GetWindowThreadProcessId
OpenProcess
TerminateProcess
枚举进程 CreateToolhelp32Snapshot
Process32First
Process32Next

 

7、线程

进程是执行代码的容器,线程才是Windows操作系统真正要执行的内容。线程是被CPU执行的独立指令序列,而不需要等待其他线程。一个进程包含一个或多个线程,它们执行进程中的一部分代码。一个进程中的所有线程共享同样的内存空间,但是每一个有它自己的处理器、寄存器和栈。

线程上下文
当一个线程运行时,它对CPU或CPU核有着完全的控制,并且其他线程不能影响CPU或核的状态,当一个线程改变CPU中某个寄存器的值时,它不会影响任何其他线程,一个操作系统在线程间切换之前,在CPU中的所有值会被保存到一个称为线程上下文的结构体中,然后操作系统加载这个线程上下文到一个新的线程中,并使这个新线程在CPU中执行。

常用线程函数

创建线程 CreateThread
打开线程 OpenThread
暂停线程 SuspendThread
回复线程 ResumeThread
枚举线程 CreateToolhelp32Snapshot
Thread32First
Thread32Next

 

8、网络

恶意代码分析实战学习之windows基础_第3张图片

客户端:socket,connect,send,recv

服务端:socket,bind,listen,accept

9、DLL

动态链接库(DLL)是使用库在多个应用程序之间共享代码的Windows特有方式。DLL文件是可执行文件,符合PE格式,但不能独自运行,依附于EXE文件执行。

DLL的入口函数是DllMain.

10、内核

内核模式操作的一种高特权模式,其中的程序代码能直接访问所有内存(包括所有的用户模式进程和应用程序的地址空间)和硬件。也称为“管理员模式”、“保护模式”或“Ring 0”。

你可能感兴趣的:(信息安全,恶意代码分析,黑客编程)