hacktricks/reversing/common-api-used-in-malware.md
2023-08-03 19:12:22 +00:00

8.8 KiB
Raw Blame History

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥

通用

网络

原始套接字 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的进程CreateToolhelp32SnapshotProcess32FirstProcess32Next
  2. 打开进程GetModuleHandleGetProcAddressOpenProcess
  3. 在进程中写入DLL的路径VirtualAllocExWriteProcessMemory
  4. 在进程中创建一个加载恶意DLL的线程CreateRemoteThreadLoadLibrary

其他要使用的函数NTCreateThreadExRtlCreateUserThread

反射式DLL注入

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

线程劫持

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

  1. 找到目标线程CreateToolhelp32SnapshotThread32FirstThread32Next
  2. 打开线程OpenThread
  3. 暂停线程SuspendThread
  4. 在受害进程中写入恶意DLL的路径VirtualAllocExWriteProcessMemory
  5. 恢复线程并加载库ResumeThread

PE注入

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

进程空壳化

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

  1. 创建一个新进程CreateProcess
  2. 取消内存映射ZwUnmapViewOfSectionNtUnmapViewOfSection
  3. 将恶意二进制文件写入进程内存VirtualAllocEcWriteProcessMemory
  4. 设置入口点并执行SetThreadContextResumeThread

钩子

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