DLL注入
Dll注入本质
将dll映射到目标进程的地址空间当中,从而取得执行dll代码的机会
DLL常用注入方式
注册表
优缺点
简单,全局注入,但是很死板,不太使用,不主动,也不太稳定
并且必须有调用System32下的User32.dll文件的才行(Windows的机制),否则失败,成功会执行DLL_PROCESS_ATTACH下的东西
注册表位置
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\
下面的Applnit_DLLs和LoadAppInit_DLLs
注册表键值
注册表API | 说明 |
---|---|
RegOpenKeyEx | 打开注册表键值 |
RegQueryValueEx | 查询键值 |
RegSetValueEx | 设置键值 |
RegCloseKey | 关闭键值 |
1 |
|
win7和win10无法成功,winxp才可以,之后把dll文件放在system32下面即可
挂钩注入dll
优缺点
灵活主动,线程,全局,但是只能消息处理,很麻烦
相关API
1 | SetWindowsHookEx(int idHook, HOOKPROC lpfn,HINSTANCE hMod, DWORD dwThreadld) //挂钩 |
简单描述
SetWindowsHookEx只能hook带gui的程序,在GUI应用程序当中,有个捕获消息的工作,之后会把挂钩到进程当中的dll都处理一遍,依次执行完dll后再会去处理gui当中的消息处理,当UnhookWindowsHookEx则在捕获消息后不执行dll直接返回消息处理,挂在每一个挂上去dll最后会执行CallNextHookEx,才会真正实现注入,主要是把执行权限向下传递,否则会断掉传递的过程,而直接返回到GUI应用程序中
远程线程注入dll
优缺点
线程独立,针对进程,比较复杂,前提还得有权限
相关API
1 | openProcess // 打开目标进程句柄 |
简单描述
首先要获得目标进程句柄以及权限,给目标进程创建属于这个进程的线程,通过创建的线程,去调入我们的dll,从而载入DLL触发DLL_PROCESS_ATTACH
函数转发器注入dll
优缺点
用户无感,防不胜防,但是要能过代码签名
简单描述
先确定目标进程会 调用哪一个dll,之后写入同名dll,把旧的dll改名字,把函数接口加上去即可,保证功能正常
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Y4tacker's Blog!