首页
社区
课程
招聘
[原创]DLL注入学习笔记
发表于: 2021-6-10 22:58 5879

[原创]DLL注入学习笔记

2021-6-10 22:58
5879

DLL被加载到进程的时候会自动运行DLLMain()函数,可以把想执行的代码放到DLLMain()函数里


DLL的入口函数主要有四种:

DLL_PROCESS_ATTACH:第一次加载DLL时执行

DLL_PROCESS_DETACH:调用FreeLibrary时执行

DLL_THREAD_ATTACH:调用DLL时执行

DLL_THREAD_DETACH:删除DLL时执行


代码实现主要步骤为:

1.使用OpenProcess()返回获得目标进程的句柄

2.计算DLL的路径长度,并且要加上0结尾,VirtualAllocEx()在目标进程中分配内存,储存dll路径

3.使用WriteProcessMemory()在目标进程的内存中写入数据,dll路径写入目标进程里

4.GetModuleHandle()获取kernel32模块的地址,再使用GetProcAddress()获取模块中LoadLibrary地址(只要dll和目标进程位于同一台主机,那么LoadLibrary的地址就一致)

5.CreateRemoteThread()创建远程线程加载dll,通过dll入口函数DLL_PROCESS_ATTACH执行代码

直接在注册表里编辑HKEY_LOCAL_MACHINE\SOFEWARE\Microsoft\Windows NT\CurrentVersion\Windows修改AppInit_DLLs的值,数据为DLL的路径,再把数值数据改为1,只要user32.dll被调用,就会加载到进程

利用钩子由OS将DLL注入到相应进程

IMAGE OPTIONAL_HEADER的IMPORT Table RVA就是IDT的RVA

查看IDT是否有足够的空间,一个IID结构体14字节,如果没有足够空间可以考虑把IDT转移到文件的空白区域,也可以增加文件最后一个节区的大小,或者在文件的末尾新增一个节区

主要步骤为:

1.修改导入表的RVA,IMAGE OPTIONAL_HEADER的IMPORT Table RVA


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-6-12 19:24 被wx_dopeusa91编辑 ,原因:
收藏
免费 5
支持
分享
最新回复 (2)
雪    币: 6704
活跃值: (4682)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
CreateRemoveThread
2021-6-11 09:16
0
雪    币: 656
活跃值: (767)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
3
pxhb CreateRemoveThread[em_14]

是CreateRemoteThread  疏忽了

最后于 2021-6-12 19:23 被wx_dopeusa91编辑 ,原因:
2021-6-12 19:21
0
游客
登录 | 注册 方可回帖
返回
//