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编辑
,原因: