‘Win内核’ 分类的存档

WDK 6001.18002出现在Connect上好些天了,安装界面改头换面了:

2008年11月7日22:46 | 没有评论
分类: Win内核
标签:

给编译出来的驱动文件加版本信息,WDK里的例子都是用#include “common.ver”,个人感觉还不如自己重新写个完整的version.rc: //各个字段可供选择的值请看winver.h、MSDN、rc.hlp   #include <windows.h>   #ifdef RC_INVOKED   VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,0 //文件版本 PRODUCTVERSION 1,0,0,0 //产品版本 FILEFLAGSMASK 0x3fL //使FILEFLAGS所有位有效 FILEFLAGS 0 //Checked Build设为1,Free Build设为0 FILEOS VOS__WINDOWS32 FILETYPE VFT_DRV FILESUBTYPE VFT2_UNKNOWN BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "080403a8" //0×0804代表简体中文,0x03a8=936代表代码页 BEGIN VALUE "CompanyName", "公司名" VALUE "FileDescription", "文件描述" VALUE "FileVersion", "1.0.0.0" VALUE "InternalName", "内部名字" VALUE "LegalCopyright", "版权" [...]

2008年8月3日21:47 | 没有评论
分类: Win内核

有人投到黑防去了,不过黑防不厚道,书里说有码,而光盘里分明就是无~码的,自己整理一份备用吧,驱网、DebugMan、邪八的那群人直接飘过吧。 这种方法的关键在于给线程的ETHREAD.CrossThreadFlags设置PS_CROSS_THREAD_FLAGS_SYSTEM值,这样其它进程就无法结束它了,包括IceSword、RkU。至于原理,可以先看看wrk里结束进程的那几个内核函数源码,NtTerminateProcess、PsTerminateProcess、PspTerminateProcess最终都是调用PspTerminateThreadByPointer来将每个线程杀死,而在PspTerminateThreadByPointer里,如果线程是被其它进程强x结束的,就会有个这样的判断: if (IS_SYSTEM_THREAD (Thread)) { return STATUS_ACCESS_DENIED; } Thread类型是PETHREAD,IS_SYSTEM_THREAD是个宏,如下:

2008年7月21日00:18 | 2 条评论
分类: Win内核

在《JIURL玩玩Win2k内存篇 分页机制 (三)》中提到计算虚拟地址对应PTE地址的公式,如下: PTE_Addr = (VirtualAddr >> 12) * 4 + 0xC0000000 从虚拟地址转换到物理地址的过程来看,计算PTE需要虚拟地址的高10位做页目录索引,还需要第12 – 21位做页表索引,但是上面的公式没有体现出这点,貌似是错的,但是偏偏它又是对的,为什么捏?

2008年4月4日12:33 | 没有评论
分类: Win内核
标签: , ,

被玩烂了的SSDT,索性就让它更烂吧,没啥技术含量,只是想增进下和驱动的感情,慢慢跟上那帮人的步伐。关于SSDT的描述,推荐看下堕落天才的文章:http://bbs.pediy.com/showthread.php?t=40832。 OD跟踪DeleteFile API的执行流程,会大致看到这样的调用: DeleteFileA -> DeleteFileW -> ntdll.ZwSetInformationFile ntdll.ZwSetInformationFile后就转到调用内核里的ZwSetInformationFile了,只要HOOK内核里的ZwSetInformationFile,然后比较一下文件名,与要保护的文件名相同时返回拒绝访问就行了。ZwSetInformationFile在SSDT里的服务号可以在函数地址+1的地方取出: lkd> u nt!ZwSetInformationFile nt!ZwSetInformationFile: 805013d4 b8e0000000      mov     eax,0E0h 805013d9 8d542404        lea     edx,[esp+4] 805013dd 9c              pushfd 805013de 6a08            push    8 下面是个驱动代码(cpp),加载后C:\StarsunYzL.txt文件将无法正常删除:  

2008年3月11日13:15 | 2 条评论
分类: Win内核

今天写一个驱动时需要访问cr4寄存器,于是我写了如下代码: ULONG regCR4; __asm { mov eax,cr4 mov regCR4,eax } 用2003 SP1 DDK编译时却发生错误:error C2094: label ‘cr4′ was undefined 咦?怎么提示cr4未定义?把cr4换成cr3又能正确编译,奇怪…… Google了一下,在国外的网站上找到了解决方法,如下:

2007年12月27日12:49 | 6 条评论
分类: Win内核
标签: ,