代码注入

0x00 原理简述

代码注入,也是一种注入技术,通过CreateRemoteThread,创建远程线程,线程函数可自写,传入参数要注意,如果有多个参数,需要定义一个结构用来存放参数。详细代码如下:

0x01 代码实现

本次注入CreateFile

1,定义一个结构体存放CreateFile参数,及函数地址。

typedef struct {
    DWORD addr;
    LPCTSTR lpFileName;
    DWORD dwDesiredAccess;
    DWORD dwShareMode;
    LPSECURITY_ATTRIBUTES lpSecurityAttributes;
    DWORD dwCreationDisposition;
    DWORD dwFlagsAndAttributes;
    HANDLE hTemplateFile;
}Point;

2,远程注入的函数如下:

DWORD _stdcall hCreateFile(LPVOID lParam)
{
    typedef HANDLE (WINAPI * PFN_CreateFile)(
        LPCTSTR lpFileName,
        DWORD dwDesiredAccess,
        DWORD dwShareMode,
        LPSECURITY_ATTRIBUTES lpSecurityAttributes,
        DWORD dwCreationDisposition,
        DWORD dwFlagsAndAttributes,
        HANDLE hTemplateFile
        );

    Point *p=(Point *)lParam;
    PFN_CreateFile pfnCreateFile;
    pfnCreateFile =(PFN_CreateFile)p->addr;

    pfnCreateFile(p->lpFileName,p->dwDesiredAccess,p->dwShareMode,p->lpSecurityAttributes,
        p->dwCreationDisposition,p->dwFlagsAndAttributes,p->hTemplateFile);
    return 0;
    }

3,获得CreateFile函数地址,定义注入函数hCreateFile的参数,其中LPCTSTR lpFileName这个参数是一个指向字符串的指针,所以我们要在目标进程里面分配一个空间,并写入路径字符串。

4,将hCreateFile函数地址和参数结构体对象地址写入目标进程,最后调用CreateRemoteThread().

0x02 完整代码

目标进程为crackme.exe,在D盘的根目录,创建一个test.txt.

0x03 运行结果

测试环境为win10 x64

在D盘根目录创建一个test.txt文档,不能删除,除非关闭掉目标进程。

Last updated

Was this helpful?