DLL注入技术之APC注入
来源:互联网 发布:java项目经验范文 编辑:程序博客网 时间:2024/06/11 01:44
DLL注入技术之APC注入
APC注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下:
1)当EXE里某个线程执行到SleepEx()或者WaitForSingleObjectEx()时,系统就会产生一个软中断。
2)当线程再次被唤醒时,此线程会首先执行APC队列中的被注册的函数。
3)利用QueueUserAPC()这个API可以在软中断时向线程的APC队列插入一个函数指针,如果我们插入的是Loadlibrary()执行函数的话,就能达到注入DLL的目的。
1.编写测试文件
新建MFC工程,添加按钮控件,双击写代码如下所示:这里我们需要注意一下SleepEx中第二个参数为TRUE,查下msdn,上面写到:大概意思是说当第二个参数为FALSE,APC是不被执行的,从此可以认为APC注入的使用条件还是有很大约束的。
2.编写APC注入程序
由于我们需要时使用LoadLibrary()函数完成注入,因此需要为其先准备好必要的参数,需要我们可以通过在远程进程中申请空间的方式写入LoadLibrary()函数所需要的参数(也就是DLL的路径)。关键代码如下所示:当我们准备好用于注入DLL的LoadLibrary()函数后,接下来需要使用QueueUserAPC()函数将此函数插入到软中断线程的APC队列中。但是由于QueueUserAPC()函数的第三个参数是线程ID,因此我们需要根据现有进程ID,并通过遍历对比得到线程ID,具体API如下表所示:CreateToolhelp32Snapshot 创建线程快照 Thread32First 得到第一个线程快照 Thread32Next 循环下一个线程快照
关键代码如下所示:3.MFC工程设置和提升权限
经过以上两步的操作,我们已经准备好APC注入的关键代码,现在我们需要将自己的程序提升权限以方便注入操作(另,动态MFC库编译有可能造成注入失败)。主要代码如下:4.测试注入效果
点击待注入的EXE进行SleepEx,这时EXE的窗口是不可以移动的,因为只有一个线程,处于SleepEx的挂起状态,然后进行注入,我们此时会发现处于挂起状态的进程窗口突然可以移动了,这是因为进程在挂起状态等待时,如果有APC队列就会退出等待并执行APC队列中的函数,然后程序继续运行。执行效果如下图所示
- DLL注入技术之APC注入
- Dll注入技术之APC注入
- Dll注入技术之APC注入
- DLL注入技术之APC注入
- Dll注入技术之APC注入
- Dll注入技术之APC注入
- Dll注入技术之APC注入
- Dll注入技术之APC注入
- DLL注入-APC注入
- APC注入技术
- Hook : APC注入技术
- 插APC实现DLL注入
- DLL注入技术之远线程注入
- DLL注入技术之REG注入
- DLL注入技术之消息钩子注入
- DLL注入技术之ComRes注入
- DLL注入技术之远线程注入
- Dll注入技术之注册表注入
- 清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题
- CSipSimple--简介
- ubuntu11.10中如何安装 *.so 文件
- 第二章 构造高效且健壮的网络程序(二)
- hdu 1159 common subsuquence
- DLL注入技术之APC注入
- delphi的TJSONArray出错:undeclare identify 'TJSONArray'...
- shell 条件表达式
- Android程序有很多Activity,在B中如何关闭整个Android应用程序,关闭所有的 Activity
- JDBC连接MYSQL
- dataGridview 定位行(在有下拉条的时候定位到某一行)
- ZOJ3031
- 全球排名前50网站都用什么语言开发的?
- undefined reference to涉及的链接问题