我是靠谱客的博主 细腻哈密瓜,最近开发中收集的这篇文章主要介绍反射式dll注入(ReflectiveDLLInjection)常规的dll注入姿势:反射式注入相比常规注入有何不同:反射式注入思路:ReflectiveLoader 实现:参考,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
学习基于stephenfewer大佬的项目:ReflectiveDLLInjection
有兴趣的同学可以下载研究
文章目录
- 常规的dll注入姿势:
- 反射式注入相比常规注入有何不同:
- 反射式注入思路:
- ReflectiveLoader 实现:
- 参考
常规的dll注入姿势:
- VirtualAllocEx 在目标进程内存空间申请内存,WriteProcessMemory 写入dll路径,CreateRemoteThread 创建远程线程调用 LoadLibrary 加载dll;
CreateRemoteThread 可被 替换为其他创建线程的API(例如:RtlCreateUserThread,或者挂起线程修改线程上下文再还原等等),减少被拦截的风险 - 替换程序运行时会加载的dll;
- 修改注册表键值AppInit_dll,程序启动时如果加载了USER32.dll,就会自动加载该键值下的有效dll;
- SetWindowsHookEx挂钩,IAT_HOOK,InLine_HOOK等(本质也是让目标进程执行自己的代码)(x86与x64下InLine_HOOK略有不同);
- dll加载顺序挟持(Dll Search Order Hijacking);
反射式注入相比常规注入有何不同:
- 内存中直接展开,无需.dll文件存在;
- 没有通过LoadLibrary等API加载,ProcessExplorer、procexp64等工具无法检测到这个dll;
- 更容易免杀;
反射式注入思路:
- 根据需要注入的进程,向服务器申请dll下发;
- 将下发的数据解密后,直接写入申请的堆中;
- 打开进程(OpenProcess)、分配内存(VirtualAllocEx)、将堆中的数据写入内存(WriteProcessMemory);
- 获取 RtlCreateUserThread 函数指针
- RtlCreateUserThread = (PRTL_CREATE_USER_THREAD)(GetProcAddress(GetModuleHandle(TEXT(“ntdll”)), “RtlCreateUserThread”));
- 通过 RtlCreateUserThread 创建线程,调用 目标进程 内存中的 ReflectiveLoader;
- ReflectiveLoader 将dll在内存中展开,修复重定位、导入表(类似ShellCode);
- ReflectiveLoader 调用dll入口点
ReflectiveLoader 实现:
以下,需要对PE文件格式 及 ShellCode有了解;
- 线程在调用ReflectiveLoader时,dll还没有被加载,就有很多限制,例如:无法使用全局变量等;
- ReflectiveLoader 必须是地址无关的;
- 获取自身位置
__declspec(noinline) ULONG_PTR caller( VOID ) { return (ULONG_PTR)_ReturnAddress(); }
返回 caller 的下一条指令的地址; - 获取所需的一些API地址,通过PEB PEB_LDR_DATA结构体 LIST_ENTRY链表,找到其他模块基址,再根据导出表找到函数地址,这里我们需要用的API有 VirtualAlloc、LoadLibrary 等;
- VirtualAlloc 分配内存,大小为扩展头中的 SizeOfImage,
- 根据内存对齐,拷贝DOS头、NT头、文件头、扩展头、区段头,再根据区段头拷贝各个区段;
- 修复导入表与重定位;
- 调用dll入口点,地址在扩展头的AddressOfEntryPoint,它会完成C运行库的初始化,执行安全检查,调用dllmain;
参考
https://bbs.pediy.com/thread-227075.htm
https://www.freebuf.com/articles/system/151161.html
最后
以上就是细腻哈密瓜为你收集整理的反射式dll注入(ReflectiveDLLInjection)常规的dll注入姿势:反射式注入相比常规注入有何不同:反射式注入思路:ReflectiveLoader 实现:参考的全部内容,希望文章能够帮你解决反射式dll注入(ReflectiveDLLInjection)常规的dll注入姿势:反射式注入相比常规注入有何不同:反射式注入思路:ReflectiveLoader 实现:参考所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复