实现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注入,不过学习原理能够帮助我们理解,同时一些重要的函数也是逆向学习过程中一定要积累的。

 

参考:

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

posted @   bonelee  阅读(192)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2021-03-02 风雅园附近的学校
2019-03-02 K-Means ++ 和 kmeans 区别
2018-03-02 TensorFlow alexnet在华为Mate10上运行方法
2017-03-02 UEBA——通过用户画像识别安全威胁
2017-03-02 python berkeley 操作——尤其提示 需版本匹配
2017-03-02 druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)——分析框架如hive或者redshift(MPPDB)、ES等
2017-03-02 万亿级日志与行为数据存储查询技术剖析(续)——Tindex是改造的lucene和druid
点击右上角即可分享
微信分享提示