• 实现dll注入的方法有很多,比如创建远程线程,使用注册表,消息钩取,替换原dll等


    原理

    实现dll注入的方法有很多,比如创建远程线程,使用注册表,消息钩取,替换原dll等。

    这里简单介绍一下最常用的方法,通过创建远程线程,即使用CreateRemoteThread函数对运行中的进程注入dll。

    大致的流程如下:

    获取目标进程句柄

    HANDLE hProcess = NULL;
    //使用dwPID进程id获取目标进程句柄(然后控制进程)
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
    

    将dll写入目标进程分配的内存中

    HANDLE hProcess;
    LPVOID pRemoteBuf = NULL;
    DWORD dwBufSize;
    // 在目标进程内存中分配dwBufSize大小的内存
    pRemoteBuf = VirtualAllocEx(hProcess, NULL, dwBufSize, MEM_COMMIT, PAGE_READWRITE);//返回值为分配所得缓冲区的地址(目标进程内存地址)
    // 将dll写入分配的内存中
    WriteProcessMemory(hProcess, pRemoteBuf, (LPVOID)szDllPath, dwBufSize, NULL);
    

    获取LoadLibraryW() API的地址

    HMODULE hMod = NULL;
    hMod = GetModuleHandle(L"kernel32.dll");
    LPTHREAD_START_ROUTINE pThreadProc;
    pThreadProc = (LPTHREAD_START_ROUTINE)GetProcAddress(hMod, "LoadLibraryW");
    

    在进程中运行LoadLibraryW线程

    HANDLE hProcess = NULL, hThread = NULL;
    // 在进程中运行LoadLibraryW线程
    hThread = CreateRemoteThread(hProcess, NULL, 0, pThreadProc, pRemoteBuf, 0, NULL);
    WaitForSingleObject(hThread, INFINITE);    //等待hThread事件执行完毕
    

    通常情况下利用好工具就可以实现我们想要的dll注入,不过学习原理能够帮助我们理解,同时一些重要的函数也是逆向学习过程中一定要积累的。

    参考:

    《逆向工程核心原理》书籍

  • 相关阅读:
    sersync+rsync原理及部署
    rsync同步
    zabbix 3.2.2 agent端(源码包)安装部署
    zabbix配置
    Netbackup media server部署报错
    Oracle_rac命令
    Linux系统克隆为iso镜像盘(类似win gost)
    Nebackup清除磁带数据重新使用
    V7000初始化
    【数据案例】服务器崩溃后的数据恢复方法
  • 原文地址:https://www.cnblogs.com/bonelee/p/15957410.html
Copyright © 2020-2023  润新知