DLL注入

机制

DLL注入是向运行中的其他进程强制插入特定DLL文件. 以达到钩取API, 改进程序, 修复BUG等目的.

在这里插入图片描述

实现方式
  • 创建远程线程(CreateRemoteThread() API)
  • 使用注册表(AppInit_DLLs值)
  • 消息钩取(SetWindowsHookEx() API)
Win10下复现创建远程进程DLL注入notepad.exe

ReverseCore这本书中说XP/Win7系统测试通过, 其实在Win10下也可行.
需要注意的坑点

  • 路径填写按Windows的写法, 书中W不能替代\
  • cmd用管理员打开
  • debugview一次只能打开一个, 另一个会连接不上
  • debugview和debugview64都可行
  • 可用process explorer查看加载的dll文件.
  • InjectDll.exe命令行提示成功不一定是成功只是表示运行没问题(比如修改文件名也会表示成功)

主要截图如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

另外, DLL调试可以见我的另一篇博客
在这里插入图片描述

在这里插入图片描述

小结

Windows的一个特性, kernel32.dll在加载后(首次进入内存称为加载), 在每个进程中映射到的地址是相同的. 所以便携dll注入程序时, 使用的不是目标进程的kernel.dll地址, 而是注入进程自身的kernel.dll地址. 只不过两者在Windows系统中相等所以可行. 这个特性经常被DLL注入所利用. 也可能成为Windows安全漏洞.
注意一个概念, 在应用了ASLR机制的系统下, 虽然DLL加载地址每次都不一样(系统启动时进行加载), 但是加载之后就不变了, 所以之后启动的进程引用了系统DLL文件, 映射的地址也是相同的.


AppInit_DLLs注册表DLL注入
原理

Windows提供AppInit_DLLs与LoadAppInit_DLLs两个注册表项. 在编辑器中给AppInit_DLLs添加所要注入的DLL路径字符串, 并设置LoadAppInit_DLLs的项目值设为1. 重启后, 指定的DLL会注入所有运行进程. 过程是User32.dll加载到进程时会读取AppInit_DLLs注册表项, 调用LoadLibrary()API加载用户DLL, 严格地说并不是DLL会加载到所有进程, 而是有user32.dll的进程.
另外, XP系统忽略LoadAppInit_DLLs注册表项.

在这里插入图片描述

SetWindowsHookEx() DLL注入

同见另一篇博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值