Windows API 学习
2020-12-25 15:26
标签:LLC 自动 read buffer http readwrite base word 打开 以下都是我个人一些理解,笔者不太了解windows开发,如有错误请告知,非常感谢,一切以microsoft官方文档为准。 https://docs.microsoft.com/en-us/windows/win32/api/ https://docs.microsoft.com/zh-cn/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc?redirectedfrom=MSDN 在调用进程的虚拟地址空间中保留,提交或更改页面区域的状态。此功能分配的内存将自动初始化为零。 简单讲就是分配大内存空间。 DWORD flAllocationType请查看这里 https://docs.microsoft.com/zh-cn/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc?redirectedfrom=MSDN DWORD flProtect请查看这里 https://docs.microsoft.com/en-us/windows/win32/memory/memory-protection-constants https://docs.microsoft.com/zh-cn/windows/win32/api/memoryapi/nf-memoryapi-virtualallocex 在指定进程的虚拟地址空间内保留,提交或更改内存区域的状态。该函数将其分配的内存初始化为零。 与VirtualAlloc()最大的区别就是VirtualAllocEx()可以使得分配的空间指定在一个进程中的内存地址里面,该函数常用在进程注入。 https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess 打开进程对象。 https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-writeprocessmemory 在指定的进程中将数据写入内存区域。必须写入整个区域,否则操作将失败。 这是一个经典的dll注入远程进程的案例,可以方便你更好的理解 上面的函数。 编译以上代码,并提供需要注入的进程pid,你将把evilm64.dll注入到pid进程中。 之后还会陆续更新一些自己学到的Windows API函数。 Windows API 学习 标签:LLC 自动 read buffer http readwrite base word 打开 原文地址:https://www.cnblogs.com/Secde0/p/14162384.htmlWindows API学习
VirtualAlloc()
概述
语法:
C++
LPVOID VirtualAlloc(
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flAllocationType,
DWORD flProtect
);
示例代码:
VirtualAlloc(0, sizeof shellcode, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
//个人理解
VirtualAlloc(起始地址, shellcode的大小, 分配虚拟空间地址,赋予执行或只读权限)
VirtualAllocEx()
概述
语法:
c++
LPVOID VirtualAllocEx(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flAllocationType,
DWORD flProtect
);
示例代码:
remoteBuffer = VirtualAllocEx(processHandle, NULL, sizeof shellcode, (MEM_RESERVE | MEM_COMMIT), PAGE_EXECUTE_READWRITE);
//个人理解,processHandle为我自己创建的读取到的进程句柄
VirtualAllocEx(句柄, 起始地址, shellcode的大小, 分配虚拟空间地址, 赋予执行或只读权限)
OpenProcess()
概述
语法:
c++
HANDLE OpenProcess(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwProcessId
);
示例代码:
processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, DWORD(atoi(argv[1])));
//个人理解
OpenProcess(进程对象的最大访问权限, 不继承句柄, 要打开的本地进程的标识符。)
WriteProcessMemory()
概述
语法:
c++
BOOL WriteProcessMemory(
HANDLE hProcess,
LPVOID lpBaseAddress,
LPCVOID lpBuffer,
SIZE_T nSize,
SIZE_T *lpNumberOfBytesWritten
);
示例代码:
WriteProcessMemory(processHandle, remoteBuffer, (LPVOID)dllPath, sizeof dllPath, NULL);
//个人理解,(LPVOID)dllPath可以为你后门dll的路径,即你要注入的dll路径。
WriteProcessMemory(上面要读取的进程的句柄, 使用VAE函数加载shellcode成功后返回的基地址, 要注入的dll地址, 注入dll的大小, 指向变量的指针.该变量接收传输到指定进程中的字节数)
案例
inject-dll.cpp
int main(int argc, char *argv[]) {
HANDLE processHandle;
PVOID remoteBuffer;
wchar_t dllPath[] = TEXT("C:\\experiments\\evilm64.dll");
printf("Injecting DLL to PID: %i\n", atoi(argv[1]));
processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, DWORD(atoi(argv[1])));
remoteBuffer = VirtualAllocEx(processHandle, NULL, sizeof dllPath, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(processHandle, remoteBuffer, (LPVOID)dllPath, sizeof dllPath, NULL);
PTHREAD_START_ROUTINE threatStartRoutineAddress = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW");
CreateRemoteThread(processHandle, NULL, 0, threatStartRoutineAddress, remoteBuffer, 0, NULL);
CloseHandle(processHandle);
return 0;
}
未完
下一篇:AcWing 797. 差分