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

1、黑客 Windows API

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

常见Windows API类型

2、句柄

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

3、文件系统函数

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

4、注册表

4.1 注册表结构

WIN+R -> regedit

 

根键注册表被划分为称为根键的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、网络

客户端:socket,connect,send,recv

服务端:socket,bind,listen,accept

9、DLL

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

DLL的入口函数是DllMain.

10、内核

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值