hacktricks/reversing/common-api-used-in-malware.md

7.9 KiB
Raw Blame History

常见的恶意软件使用的API

{% hint style="success" %} 学习和实践AWS黑客技术HackTricks培训AWS红队专家(ARTE)
学习和实践GCP黑客技术HackTricks培训GCP红队专家(GRTE)

支持HackTricks
{% endhint %}

通用

网络

原始套接字 WinAPI套接字
socket() WSAStratup()
bind() bind()
listen() listen()
accept() accept()
connect() connect()
read()/recv() recv()
write() send()
shutdown() WSACleanup()

持久性

注册表 文件 服务
RegCreateKeyEx() GetTempPath() OpenSCManager
RegOpenKeyEx() CopyFile() CreateService()
RegSetValueEx() CreateFile() StartServiceCtrlDispatcher()
RegDeleteKeyEx() WriteFile()
RegGetValue() ReadFile()

加密

名称
WinCrypt
CryptAcquireContext()
CryptGenKey()
CryptDeriveKey()
CryptDecrypt()
CryptReleaseContext()

反分析/虚拟机

函数名称 汇编指令
IsDebuggerPresent() CPUID()
GetSystemInfo() IN()
GlobalMemoryStatusEx()
GetVersion()
CreateToolhelp32Snapshot [检查进程是否在运行]
CreateFileW/A [检查文件是否存在]

隐身

名称
VirtualAlloc 分配内存(打包器)
VirtualProtect 更改内存权限(打包器给予某个部分执行权限)
ReadProcessMemory 注入到外部进程
WriteProcessMemoryA/W 注入到外部进程
NtWriteVirtualMemory
CreateRemoteThread DLL/进程注入...
NtUnmapViewOfSection
QueueUserAPC
CreateProcessInternalA/W

执行

函数名称
CreateProcessA/W
ShellExecute
WinExec
ResumeThread
NtResumeThread

其他

  • GetAsyncKeyState() -- 键盘记录
  • SetWindowsHookEx -- 键盘记录
  • GetForeGroundWindow -- 获取运行窗口名称(或浏览器中的网站)
  • LoadLibrary() -- 导入库
  • GetProcAddress() -- 导入库
  • CreateToolhelp32Snapshot() -- 列出运行中的进程
  • GetDC() -- 截图
  • BitBlt() -- 截图
  • InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- 访问互联网
  • FindResource(), LoadResource(), LockResource() -- 访问可执行文件的资源

恶意软件技术

DLL注入

在另一个进程中执行任意DLL

  1. 定位要注入恶意DLL的进程CreateToolhelp32Snapshot, Process32First, Process32Next
  2. 打开进程GetModuleHandle, GetProcAddress, OpenProcess
  3. 在进程中写入DLL的路径VirtualAllocEx, WriteProcessMemory
  4. 在进程中创建一个线程以加载恶意DLLCreateRemoteThread, LoadLibrary

其他可用函数NTCreateThreadEx, RtlCreateUserThread

反射DLL注入

在不调用正常Windows API调用的情况下加载恶意DLL。
DLL在进程内部被映射它将解析导入地址修复重定位并调用DllMain函数。

线程劫持

从进程中找到一个线程并使其加载恶意DLL

  1. 找到目标线程CreateToolhelp32Snapshot, Thread32First, Thread32Next
  2. 打开线程OpenThread
  3. 暂停线程SuspendThread
  4. 在受害者进程中写入恶意DLL的路径VirtualAllocEx, WriteProcessMemory
  5. 恢复加载库的线程ResumeThread

PE注入

可移植执行注入:可执行文件将被写入受害者进程的内存中,并从那里执行。

进程空洞

恶意软件将从进程的内存中取消映射合法代码并加载恶意二进制文件

  1. 创建一个新进程CreateProcess
  2. 取消映射内存ZwUnmapViewOfSection, NtUnmapViewOfSection
  3. 在进程内存中写入恶意二进制文件VirtualAllocEc, WriteProcessMemory
  4. 设置入口点并执行SetThreadContext, ResumeThread

钩子

  • SSDT系统服务描述符表指向内核函数ntoskrnl.exe或GUI驱动程序win32k.sys以便用户进程可以调用这些函数。
  • 根套件可能会修改这些指针以指向他控制的地址
  • IRPI/O请求包将数据片段从一个组件传输到另一个组件。几乎内核中的所有内容都使用IRP每个设备对象都有自己的函数表可以被钩住DKOM直接内核对象操作
  • IAT导入地址表)用于解析依赖关系。可以钩住此表以劫持将被调用的代码。
  • EAT导出地址表)钩子。此钩子可以从用户空间完成。目标是钩住DLL导出的函数。
  • 内联钩子:这种类型的钩子难以实现。这涉及修改函数本身的代码。可能通过在开头放置一个跳转来实现。

{% hint style="success" %} 学习和实践AWS黑客技术HackTricks培训AWS红队专家(ARTE)
学习和实践GCP黑客技术HackTricks培训GCP红队专家(GRTE)

支持HackTricks
{% endhint %}