郁金香初级班 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;
}
代码

 

posted @ 2023-05-21 16:49  大橘|博客  阅读(19)  评论(0)    收藏  举报