1:使用!process 0 0 获取用户空间的所有的进程的信息
!process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS 80a02a60 Cid: 0002 Peb: 00000000 ParentCid: 0000
DirBase: 00006e05 ObjectTable: 80a03788 TableSize: 150.
Image: System
。。。。。
2:使用.process /p + 你需要断的应用程序的EProcess地址切换到应用程序的地址空间
例如:
.process /p 0x80a02a60
3:重新加载user PDB文件
.reload /f /user
4:使用非侵入式的切换进程空间
.process /i /p 0x80a02a60
5:下应用层断点
bp
bu
都可以
========================
今天看windows创建进程的过程,第一个阶段怎么看都看明白,里面说要查看什么注册表,看看有debugger值什么的。后来查了下百度,原来就启动一个进程的一个小阶段被病毒广泛利用,也就是下面说的映像劫持技术。看来microsoft也有考虑不周的地方啊
==========================================================
windows映像劫持技术(IFEO)介绍以及常用解决方案
前些日子在JM看到有关一个IFEO病毒的分析报告,就想写点什么和大家分享下!
为了使大家更详细了解映像胁持,在BAIDU找了一些相关知识点,在此,感谢那些原创作者!谢谢!
基本症状:可能有朋友遇到过这样的情况,一个正常的程序,无论把他放在哪个位置或者是重新用安装盘修复过的程序,都无法运行或者是比如运行A却成了执行B的程序了,而改名后却可以正常运行
既然我们是介绍IFEO技术相关,那我们就先介绍下:
一,什么是映像胁持(IFEO)?
所谓的IFEO就是Image File Execution Options
在是位于注册表的
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options
由于这个项主要是用来调试程序用的,对一般用户意义不大。默认是只有管理员和local system有权读写修改。
我们大家一起来看网络上另一个朋友做得试验:
如上图了,开始-运行-regedit,展开到:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options
然后选上Image File Execution Options,新建个项,然后,把这个项(默认在最后面)然后改成123.exe
选上123.exe这个项,然后默认右边是空白的,我们点右键,新建个“字串符”,然后改名为“Debugger"
这一步要做好,然后回车,就可以。。。再双击该键,修改数据数值(其实就是路径)。。
把它改为 C:/windows/system32/CMD.exe
(PS:C:是系统盘,如果你系统安装在D则改为D:如果是NT或2K的系统的话,把Windows改成Winnt,下面如有再T起,类推。。。)
好了,实验下。~ .
然后找个扩展名为EXE的,(我这里拿IcesWord.exe做实验),改名为123.exe。。。
然后运行之。。。嘿嘿。。出现了DOS操作框,不知情的看着一闪闪的光标,肯定觉得特鬼异~^_^。。
===============================
Debugger参数存在的本意是为了让程序员能够通过双击程序文件直接进入调试器里调试自己的程序,曾经调试过程序的朋友也许会有一个疑问,既然程序启动时都要经过IFEO这一步,那么在调试器里点击启动刚被Debugger参数送进来的程序时岂不是又会因为这个法则的存在而导致再次产生一个调试器进程?微软并不是傻子,他们理所当然的考虑到了这一点,因此一个程序启动时是否会调用到IFEO规则取决于它是否“从命令行调用”的,那么“从命令行调用”该怎么理解呢?例如我们在命令提示符里执行taskmgr.exe,这就是一个典型的“从命令行调用”的执行请求,而我们在点击桌面上、普通应用程序菜单里的taskmgr.exe时,系统都会将其视为由外壳程序Explorer.exe传递过来的执行请求,这样一来,它也属于“从命令行调用”的范围而触发IFEO规则了。为了与用户操作区分开来,系统自身加载的程序、调试器里启动的程序,它们就不属于“从命令行调用”的范围,从而绕开了IFEO,避免了这个加载过程无休止的循环下去。
由于Debugger参数的这种特殊作用,它又被称为“重定向”(Redirection),而利用它进行的攻击,又被称为“重定向劫持”(Redirection Hijack),它和“映像劫持”(Image Hijack,或IFEO Hijack)只是称呼不同,实际上都是一样的技术手段。
讲解完Debugger参数的作用,现在我们来看看“映像劫持”到底是怎么一回事,遭遇流行“映像劫持”病毒的系统表现为常见的杀毒软件、防火墙、安全检测工具等均提示“找不到文件”或执行了没有反应,于是大部分用户只能去重装系统了,但是有经验或者歪打正着的用户将这个程序改了个名字,就发现它又能正常运行了,这是为什么?答案就是IFEO被人为设置了针对这些流行工具的可执行文件名的列表了,而且Debugger参数指向不存在的文件甚至病毒本身!
以超级巡警的主要执行文件AST.exe为例,首先,有个文件名为kkk.exe的恶意程序向IFEO列表里写入AST.exe项,并设置其Debugger指向kkk.exe,于是系统就会认为kkk.exe是AST.exe的调试器,这样每次用户点击执行AST.exe时,系统执行的实际上是作为调试器身份的kkk.exe,至于本该被执行的AST.exe,此刻只能被当作kkk.exe的执行参数来传递而已,而由于kkk.exe不是调试器性质的程序,甚至恶意程序作者都没有编写执行参数的处理代码,所以被启动的永远只有kkk.exe自己一个,用户每次点击那些“打不开”的安全工具,实际上就等于又执行了一次恶意程序本体!这个招数被广大使用“映像劫持”技术的恶意软件所青睐,随着OSO这款超级U盘病毒与AV终结者(随机数病毒、8位字母病毒)这两个灭杀了大部分流行安全工具和杀毒软件的恶意程序肆虐网络以后,一时之间全国上下人心惶惶,其实它们最大改进的技术核心就是利用IFEO把自己设置为各种流行安全工具的调试器罢了,破解之道尤其简单,只需要将安全工具的执行文件随便改个名字,而这个安全工具又不在乎互斥量的存在,那么它就能正常运行了,除非你运气太好又改到另一个也处于黑名单内的文件名去了,例如把AST.exe改为IceSword.exe。
============================================
很激动。。解决我一个调试驱动非常头痛的问题。。。。
在这个过程中拜读了 znsoft的文章和高端调试的 文章,的确很牛。。。。
链接如下:
http://bbs.driverdevelop.com/htm_data/125/0901/115354.html
http://advdbg.org/blogs/advdbg_system/articles/1492.aspx
但是里面还有很多没有说到的地方,这里在补充下 。。。
1. pdb文件要和源码还有程序是一个版本。。在windbg中设置好pdb文件和源码的目录。
2. bp hello!add 下断点 。。。
3.在要调试的程序的里加入如下代码,
int main(void)
{
__asm int 3;
}
这样程序一开始就断下来。。
4. !process 0 0 列举所有的进程,找到 需要调试的进程的EPROCESS。
PROCESS 810d65d8 SessionId: 0 Cid: 0654 Peb: 7ffd3000 ParentCid: 00d4
DirBase: 07361000 ObjectTable: e11cbaa0 HandleCount: 38.
Image: conime.exe
PROCESS 81180020 SessionId: 0 Cid: 0624 Peb: 7ffdf000 ParentCid: 04e4
DirBase: 07860000 ObjectTable: e1bd31f0 HandleCount: 7.
Image: hello.exe
5. .process 81180020 切换到需要调试的进程的上下文。。
6. .reload /user 加载符号列表。。
7. 这时候在windbg中就能看到断点出变成红色的了 。。
这个顺序就能保证在kd模式调试ring3程序了。。。