恶意软件TIPs — 常用API

常用于恶意软件执行特定任务的API调用:

键盘记录器

轮询键盘状态或通过安装与键盘事件相关的钩子

  • GetAsyncKeyState():使用此函数来轮询键盘上每个键的状态。

  • GetKeyState():API调用(例如,检查Shift键是否被按下)。

  • SetWindowsHookExA():可以用来安装 WH_KEYBOARD和 WH_MOUSE事件的钩子。

网络流量监控

  1. 使用 WSASocket()或 socket()来创建原始套接字。

  2. 使用 bind()将套接字绑定到接口(网卡)。

  3. 使用 WSAIoctl()或 ioctlsocket()将接口(网卡)设置为混杂模式。 SIO_RECVALL参数告诉操作系统将网络卡设置为混杂模式。

下载器

  1. URLDownloadToFile():下载文件并保存到磁盘。

  2. ShellExecute()、 WinExec()等:执行新创建的文件。

HTTP CNC 流量

当在恶意软件中实现CNC时,由于HTTP的无状态特性,它应该与C2服务器保持持续联系。以下是用于创建HTTP会话的一些常用API调用:

  1. InternetOpen(),例如: InternetOpen(USER_AGENT,INTERNET_OPEN_TYPE_PROXY,argv[2],0,0)

  2. InternetConnect():URL输入。

  3. 构建HTTP请求( HttpOpenRequest()、 HttpAddRequestHeaders())。

  4. HTTPSendRequest():发送HTTP请求。

  5. InternetReadFile():读取响应,这可能意味着样本正在读取响应。

下发程序(DROPPERS)

一些下发程序将文件嵌入到自己的资源部分(例如:资源“.rsrc”部分)。用于管理资源的API调用包括:

  • FindResource

  • LoadResource

  • SizeOfResource

  • LockResource

DLL注入功能调用

  1. 使用 SetWindowsHookEx()

  • LoadLibraryA():将恶意DLL加载到攻击进程的地址空间中。

  • GetProcAddress():在远程进程中检索过滤函数的地址。

  • GetWindowsThreadProcessId():获取目标线程的ID。

  • SetWindowsHookEx():在远程进程的钩子链中安装过滤函数,仅适用于GUI应用程序,可以在一次调用中注入所有应用程序。

  • BroadcastSystemMessage():用于将消息从攻击进程发送到受害者进程(内部)。

  • GetMessage()

  • DispatchMessage()

  1. 使用CreateRemoteThread()

  • OpenProcess():通过此函数,攻击进程可以与目标受害进程通信。

  • VirtualAllocEx():允许一个进程在另一个进程内分配内存空间(用于存储恶意DLL的字符串名称)。

  • WriteProcessMemory():一个进程可以在另一个进程的内存空间中写入数据(非常可疑),通过这个方式,受害进程将被注入一个字符串,可以后续加载到LoadLibraryA()函数调用中。

  • GetModuleHandle():允许进程确定如何访问可能加载到内存空间的某个DLL,定位kernal32.dll(用于实现loadlibrary函数)。

  • GetProcAddress():用于定位kernel32.dll文件中LoadLibrary()的地址。

  • CreateRemoteThread():将在远程进程内创建一个远程线程,其中函数的地址将作为参数传递给新线程。一旦创建了新线程,此调用将执行以下操作:

    • 在远程进程中创建一个新线程。

    • 在新创建的线程中运行LoadLibraryA。

    • LoadLibraryA将恶意DLL加载到远程地址空间中。适用于所有应用程序,但仅适用于NT/XP系统。

API HOOK:R3函数

HOOK用户空间函数的固定步骤包括:

  1. GetProcAddress:查找要挂钩的函数的地址。

  2. VirtualProtect():设置内存保护为读/写。

  3. ReadProcessMemory()或手动复制:保存受害者的前几个字节。

  4. 计算新的指令:通常是跳转到rootkit代码。

  5. 覆盖受害者函数的前几个字节:手动复制、WriteProcessMemory()。

  6. VirtualProtect():恢复内存权限到原始值。

进程镂空API

  1. CreateProcessA-> 以挂起状态创建一个进程。

  2. NtUnmapViewOfSection-> 从内存中取消映射原始进程的内容(即,进程以挂起状态启动,其内容被清空,使其成为空壳)。

  3. VirtualAllocEx-> 在空壳进程中分配新的内存地址。

  4. WriteProcessMemory-> 向空壳进程注入全新的代码。

  5. ResumeThread-> 恢复进程。

一些反调试/虚拟机检测

  • GetTickCount-> 用于检测是否存在调试器。

  • CountClipboardFormats-> 用于确定受害者的剪贴板是否为空。

  • GetForeGroundWindow-> 用于检查前台窗口的颜色是否变化,假定自动化沙盒工具不会切换活动窗口。

  • IsDebuggerPresent-> 检测调试器。

一些常规API调用

  • Fopen():打开文件以进行读取。

  • Sscanf():用于解析字符串。

  • ReadFile():通过查看句柄(hFile)来确定要读取的文件,句柄在Kernel32.dll中可用。

  • CreateFileA():不仅用于创建新文件,还用于读取现有文件。

  • CreateToolhelp32Snapshot():获取当前运行的进程列表。

  • Process32First():开始迭代从CreateToolhelp32Snapshot()获取的列表。

  • FindWindowsA():查找具有指定标题名或调用的特定窗口。此API调用检索与指定字符串匹配的类名和窗口名的顶级窗口的句柄(搜索以不区分大小写方式进行)。

  • RegSetValueEx():用于禁用用户帐户控制弹出窗口。

  • CreateThread():在当前进程中的单独线程中运行,启动线程。

  • GetEIP-> SHELLCODE通常用于确定其加载到内存中的位置。

  • GetFileSize():SHELLCODE通常使用此函数来遍历所有可能的句柄值,以确定自己的文档,通过比较大小来识别并引入更多可执行文件。

  • malloc:通过调用此函数在堆上分配内存。

  • free:通过调用此FREE函数,操作系统将通过HEAP缓冲区漏洞利用执行SHELLCODE。

  • GetTempPathA():获取临时文件夹的位置,用于下载文件。

  • WinExec():执行下载的文件。

其他有趣的调用:

  • AdjustTokenPrivileges、CallNextHookEx、CreateMutexA、DispatchMessageA、ExitWindowsEx、FindClose、FindResourceA、FlushFileBuffers、FreeEnvironmentStringsA、FreeEnvironmentStringsW、FreeLibrary、GetCommandLineA、GetCurrentProcess、GetCurrentThreadId、GetExitCodeProcess、GetExitCodeThread、GetFileAttributesA、GetFileType、GetForegroundWindow、GetKeyboardState、GetModuleHandleA、GetStartupInfoA、GetSystemDirectoryA、GetTickCount、GetUserNameA、GetVersionExA、GetWindowsDirectoryA、GlobalMemoryStatus、HeapCreate、ioctlsocket、keybd_event、LookupPrivilegeValueA、MapVirtualKeyA、mciSendStringA、MoveFileA、OleInitialize、OpenProcessToken、PeekMessageA、PeekNamedPipe、PostMessageA、RaiseException、RasEnumConnectionsA、RasGetConnectStatusA、SetEnvironmentVariableA、SetFileAttributesA、SetFileTime、SetKeyboardState、SetStdHandle、SetUnhandledExceptionFilter、UnhandledExceptionFilter、UnhookWindowsHookEx、URLDownloadToFileA、VirtualAlloc、WSAAsyncSelect、WSACleanup、WSAGetLastError、WSAStartup、RegCreateKeyA、RegCreateKeyExA、RegDeleteValueA、RegOpenKeyA等等。


原文始发于微信公众号(TIPFactory情报工厂):恶意软件TIPs — 常用API

版权声明:admin 发表于 2023年9月12日 下午7:48。
转载请注明:恶意软件TIPs — 常用API | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...