• 1423阅读
  • 1回复

VT实例-过掉系统下的Int1和Int3断点 [复制链接]

上一主题 下一主题
离线啊冲
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2016-02-02


VT实例-过掉系统下的Int1和Int3断点

发表于 2015 年 12 月 20 日

这里做的测试针对XP系统,明天开始测试Win 7和 Win 8
本来以为这会是个很难的问题,没想到一个小时不到就解决了,首先设置异常位图,配置发生Int1和Int3的时候VM-EXIT
temp=0xa; // Int 1
Log ( "Setting EXCEPTION_BITMAP", temp );
VMWRITE ( EXCEPTION_BITMAP, temp ); // Exception Bitmap
然后在VM-EXIT处理Int 1和 Int 3
if(ExitReason==0)
{
ExitInterruptionInformation=VMREAD(VM_EXIT_INTR_INFO);
InterruptionVector = (ExitInterruptionInformation & 0xFF );
InterruptionType = ( (ExitInterruptionInformation>>8) & 7);
InterruptionValid = ( (ExitInterruptionInformation>>31) & 1);
if(InterruptionVector==1){
VMWRITE(VM_ENTRY_INTR_INFO,0);
}
if(InterruptionVector==3){
VMWRITE(VM_ENTRY_INTR_INFO,0);
}
_asm
{
POPAD
JMP Resume
}
}
至于为什么写入VM_ENTRY_INTR_INFO呢,因为Guest系统下的int中断是否执行,主要是有事件注入控制的,bit 31代表其有效位,bit 31置1代表事件注入有效,置0代表无效,所以我这里清零了,测试下,随便一个程序载入OD,按理说OD会在程序入口写入一个Int 3断点,然后中断到那里,但是呢。。。

至于为什么程序会运行呢,我是这么猜想的,OD写入int 3后,然后触发,此时进入VT,VT把Int 3的事件注入设置无效,然后Resume到Guest系统,此时所有指令执行,程序也就显示了处理
不过我卸载驱动的时候,系统蓝屏,我估计是在卸载处下了断点,然后进入VT,然后返回到下条指令,造成了指令的丢失,明天再弄吧,太冷了。。。。。。。。
文件下载: test
当然了,反过来想,如果正常注入int 1和int 3,就可以正确的在指定地址下段了

善者 慈悲心常在 无怨无恨 以苦为乐
默认压缩密码www.hifyl.com
文件分享密码问题:http://www.hifyl.com/read-htm-tid-4444.html
离线v2680267313

只看该作者 沙发  发表于: 2016-04-30
用户被禁言,该主题自动屏蔽!
快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
上一个 下一个