映像劫持的根本原因就是被恶意程序篡改了注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options 。
假如在这里新建一个子项notepad.exe,再在这子项里新建一个REG_SZ的名字为Debugger,内容为cmd.exe的值项。这样就会实现映像劫持了,这样你每次用记事本的方式打开文本文件时,却打开的是命令提示符的窗口。相信你也遇到过类似的情况吧。一下木马,病毒就是通过这个让杀毒软件和防火墙之类的应用程序,启动不起来。
Debugger参数的本意----(本段摘自百度百科,因为自己总结不好····(*^__^*) ……)
是为了让程序员能够通过双击程序文件直接进入调试器里调试自己的程序,曾经调试过程序的朋友也许会有一个疑问,既然程序启动时都要经过IFEO这一步,那么在调试器里点击启动刚被Debugger参数送进来的程序时岂不是又会因为这个法则的存在而导致再次产生一个调试器进程?微软并不是傻子,他们理所当然的考虑到了这一点,因此一个程序启动时是否会调用到IFEO规则取决于它是否“从命令行调用”的,那么“从命令行调用”该怎么理解呢?例如我们在命令提示符里执行taskmgr.exe,这就是一个典型的“从命令行调用”的执行请求,而我们在点击桌面上、普通应用程序菜单里的taskmgr.exe时,系统都会将其视为由外壳程序Explorer.exe 传递过来的执行请求,这样一来,它也属于“从命令行调用”的范围而触发IFEO规则了。为了与用户操作区分开来,系统自身加载的程序、调试器里启动的程 序,它们就不属于“从命令行调用”的范围,从而绕开了IFEO,避免了这个加载过程无休止的循环下去。由于Debugger参数的这种特殊作用,它又被称为“重定向”(Redirection), 而利用它进行的攻击,又被称为“重定向劫持”(Redirection Hijack),它和“映像劫持”(Image Hijack,或IFEO Hijack)只是称呼不同,实际上都是一样的技术手段。
还是看看实现的代码吧········运行时杀毒软件会被拦截的,不过没关系,你允许后,见识过后可以去注册表下删除它,就没事了(后面的目标就是要想法实现绕过杀毒软件的监视,\(^o^)/~)
代码蛮简单的,没写注释,就俩api,百度下都知道了·········
编译,实验环境都xp sp3
#include <windows.h> #include <stdio.h> void main() { char buffer[] = "cmd.exe"; HKEY hKey; DWORD dwDisposition; LPCTSTR SetData = "Software\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\notepad.exe"; if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE,SetData,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition)) { if (ERROR_SUCCESS == RegSetValueEx(hKey,"Debugger",NULL,REG_SZ,LPBYTE(buffer),sizeof(buffer))) { printf("Image hijacking Success!\n"); } } RegCloseKey(hKey); }