郁金香初级班 5/19 -5/21 25-28
目录
25.创建简单的mfc程序(省)
26.mfc与注入dll
27.在目标进程开辟空间 调用call 创建线程执行
28.028-向目标进程注入DLL
内容
26:
本地方式调用CALL
1、怎么为MFC的DLL(动态链接库)添加一个窗口
资源文件->A026_MFC_DLL.rc->右键->添加资源-Dialog->新建(N)
2、添加显示窗口的代码
在窗口上右键->添加类->类名:CPAGE00 确定.
27:
在目标进程分配内存
#include <iostream> #include<Windows.h> __declspec(naked)int 要写入的代码() { //int call02 = 0x0041121c; _asm { push 1 mov eax, 0x000614AB // call eax ; call 0x0041121c 这种写法在vs环境是错误的 add esp, 4 mov eax, 0x12345678 ret //关键 在裸汇编中必须加上ret 才能正常返回 } } int main() { char 目标窗口[] = "选择 C:\\Users\\nixg\\source\\repos\\test\\Debug\\test.exe"; HWND 窗口句柄 = FindWindowA(0, 目标窗口); DWORD pid = 0; GetWindowThreadProcessId(窗口句柄, &pid); HANDLE 进程句柄 = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); void* 开辟空间 = VirtualAllocEx(进程句柄, NULL, 4 * 1024, MEM_COMMIT, 0x40); printf("目标内存空间=%p\n", 开辟空间); bool 写入结果 = WriteProcessMemory(进程句柄, 开辟空间, 要写入的代码, 0x300, 0); printf("写入结果=%d \n", 写入结果); return 0; }
28
LoadLibraryA
1.注入dll函数
详解
https://learn.microsoft.com/zh-cn/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibrarya
#include<stdio.h> #include<Windows.h> char 文件路径[] = "C:\\Users\\nixg\\source\\repos\\MFCLibrary2\\Debug\\MFCLibrary2.dll"; void DLL写入() { HWND 窗口句柄 = 0; DWORD pid = 0; HANDLE 进程句柄 = 0; char mu[] = "选择 C:\\Users\\nixg\\source\\repos\\test\\Debug\\test.exe"; 窗口句柄 = FindWindowA(NULL, mu); GetWindowThreadProcessId(窗口句柄, &pid); 进程句柄 = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); void* nj = 0; printf("%p\n", 进程句柄); nj = VirtualAllocEx(进程句柄, NULL, 4 * 1024, MEM_COMMIT, PAGE_READWRITE); printf("%p\n", nj); WriteProcessMemory(进程句柄, nj, 文件路径, 0x555, 0); CreateRemoteThread(进程句柄, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, nj, 0, 0); printf("%p", nj); } int main() { DLL写入(); return 0; }

浙公网安备 33010602011771号