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

8.4 KiB
Raw Blame History

常用于恶意软件中的API

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}


通用

网络

原始套接字 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. 在进程中创建一个将加载恶意DLL的线程CreateRemoteThread、LoadLibrary

其他要使用的函数NTCreateThreadEx、RtlCreateUserThread

反射式DLL注入

加载恶意DLL而无需调用常规的Windows API调用。
DLL被映射到进程内部将解析导入地址修复重定位并调用DllMain函数。

线程劫持

找到进程中的线程并使其加载恶意DLL

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

PE注入

Portable Execution Injection可执行文件将被写入受害进程的内存中并从那里执行。

进程空壳化

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

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

钩子

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

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式