实现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注入,不过学习原理能够帮助我们理解,同时一些重要的函数也是逆向学习过程中一定要积累的。
参考:
《逆向工程核心原理》书籍
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用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