首页
社区
课程
招聘
[原创]VMXICE,未完成的内核调试器,源代码,图,BIN,求指点
发表于: 2011-8-10 21:52 38120

[原创]VMXICE,未完成的内核调试器,源代码,图,BIN,求指点

2011-8-10 21:52
38120

第二个问题已经知道原因了是锁核心的方法不对。
第一个问题仍然研究中……
代码里的IntHandler是错的。有一些异常cpu压入了faultcode没有平衡堆栈。

原文
//////////////////////
这个暑假有点时间,借助于hyperdbg的源代码,学习了一下VT。就想自己写个基于VT技术的调试器玩玩的。原理上很简单,我们的调试器是主机(HOST),把当前的操作系统放进虚拟机里运行(GUEST),然后调试器可以拦截感兴趣的一些异常。

结果搞了几个星期了单步这个都没搞定啊,真挫。技术太次,以前都没接触过内核调试器这方面,我把代码放出来大家围观一下好了。如果有强人来看到了还望指点啊!!感谢啊~!

这个基本框架是有了,界面山寨了SoftICE,哦SoftICE我的最爱,可惜你只能在vmware里跑……

我说一下遇到的问题。主要是缺页异常的问题。有2点。

第一个是这样的,VM退出返回到HOST处理函数_ExitHandler,我用cli把中断给关了,如果sti打开中断的话,系统直接死机了,我把HOST机的256个IDT全都设置空函数也会死…为什么呢??

关了中断之后,在_ExitHandler访问被换出的分页内存就悲剧了啊,交给windows处理的话,会直接蓝屏IRQL_NOT_LESS_OR_EQUAL(IRQL=255)。

怎么会访问分页内存呢,是这样的,如果我们调试的是一个运行在应用层的程序,代码段缺页经常发生…我们要读EIP指向的代码反汇编显示到调试器界面上,这一读就缺页异常了…

第二个问题,单步执行指令的时候,如果客户机中断是开着呢。单步一段时间后系统就死掉了,我觉得是因为发生了任务切换,但是为什么会死机啊?!不应该死机吧?如果我在单步前把中断关了,就不会死,但是把中断关了缺页了肿么办啊~客户机蓝屏了啊~!

具体看压缩包里面的源代码,关键的几个部分我都注释了





我的QQ:4003032

希望和大家多多交流…


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (41)
雪    币: 304
活跃值: (507)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
说一下用法

F12呼出调试器
F8单步
F11截屏,截屏之后loader有个保存截屏按钮,bmp头硬编码了。。1280x800x32的…

支持3个指令
bpx [address]
bc [id]
bl

……
2011-8-10 22:07
0
雪    币: 959
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
传说中的sf  不过电脑不支持VT 仍然支持lz
2011-8-10 22:17
0
雪    币: 384
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
强人
2011-8-10 22:22
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
5
支持。。。。
好东西
2011-8-10 22:46
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
顶 抢个楼先
2011-8-10 23:07
0
雪    币: 304
活跃值: (507)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
海风大神。。求指点啊。。
2011-8-10 23:09
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
8
关于缺页:单步前把内存做一次LockAndPages就好多了~阿弥托佛~
2011-8-10 23:10
0
雪    币: 316
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
好东西.感谢分享.
坐等风月和老v及大神们继续爆料
2011-8-10 23:22
0
雪    币: 3116
活跃值: (1269)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
10
技术贴,顶下。

看大神们完善
2011-8-11 00:00
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
11
内核调试器我不懂啊,你做的已经远远超过我了

另外,win7下面执行loader会卡死
2011-8-11 11:52
0
雪    币: 4560
活跃值: (1002)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
强贴,不得不顶啊
2011-8-11 11:55
0
雪    币: 161
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gog
13
可以参考一下hyperdbg啊,不是有开源的VMX调试器项目吗
2011-8-11 12:27
0
雪    币: 304
活跃值: (507)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
hyperdbg
virtdbg

就这两个里面代码能参考的我都参考了

其他还有什么vmx调试器项目?
2011-8-11 13:13
0
雪    币: 34
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习,mark一下
2011-8-11 13:39
0
雪    币: 475
活跃值: (64)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
16
看了一下你好像没抄全啊,必然要蓝或者死机的。
而且vista以上操作系统肯定不能使用。
2011-8-11 13:41
0
雪    币: 304
活跃值: (507)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
hyperdbg本身也不行啊
全抄了又有何用

多核锁那个处理的不够在vista以上估计会蓝屏。
2011-8-11 14:14
0
雪    币: 475
活跃值: (64)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
18
其实我说了两个问题一个是你代码没抄全,所以单步不行。
第二个才是vista以上操作系统兼容的问题。
2011-8-11 14:33
0
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
留着慢慢啃,呵呵,mark!!!
2011-8-11 14:50
0
雪    币: 1337
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
学习了,以前也尝试过,int1确实是太麻烦了,个人觉得用windbg的那套函数不错,稳定呀
2011-8-11 15:02
0
雪    币: 304
活跃值: (507)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
21
不是抄全不抄全的问题。我肯定你没试过hyperdbg
你自己去试试hyperdbg的单步就知道了。
把video.c改一下在物理机上跑,别在bochs里跑。
bochs模拟的那套vmx指令集有很多bug,跟物理cpu差太多。
hyperdbg没你们想象的那么牛逼。他只是一个demo罢了。很多问题根本没有考虑。

我1楼说的第二个问题我已经知道怎么回事了。
就是锁核心的问题。换成单核单步不会死机。
第一个vmm里面访问缺页内存的问题还没有解决方法。
2011-8-11 17:37
0
雪    币: 4902
活跃值: (120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
收到了
可惜同2#。。。
2011-8-11 21:08
0
雪    币: 1054
活跃值: (1258)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
mark ....
2011-8-14 02:35
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
24
以前曾经梦想做个这样的,水平不够,一直没能实现
谢谢楼主的分享,

好帖的第1页没了:(
2011-8-14 06:35
0
雪    币: 437
活跃值: (110)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
25
感谢楼主分享。学习了
2011-8-14 06:48
0
游客
登录 | 注册 方可回帖
返回
//