原文发表于百度空间,2008-7-28========================================================================== 前面介绍了修改PEB中已加载模块的双链,来隐藏指定的模块.不过要对付这样隐藏,一个暴力搜索内存就够了. 实现思路如下:地址以一个页的大小为单位从0x00000000到0x7FFFFFFF遍历,检查是否具有PE特征.页的大小可以通过GetSystemInfo()得到,结果在SYSTEM_INFO结构的DWORD…
原文发表于百度空间,2009-05-13========================================================================== Idle进程和System进程一样,也是系统中的一个特殊进程,严格讲它不算是一个进程,但是它有自己的EPROCESS,并有一个IdleThread.若说它算一个进程,它的进程空间.句柄表.Token等却又和System进程一样,即共享了System的内核数据,所以不能以常理对待之.关于Idle进程的两个问题:…
原文发表于百度空间,2008-11-02========================================================================== 先定义一下用到的几个变量:char *hModule=NULL;//映射后的基址PIMAGE_OPTIONAL_HEADER pOptHeader;//扩展头PIMAGE_DATA_DIRECTORY pRelocTable=NULL;//指向重定位表PIMAGE_BASE_RELOCATION pReloc…
原文发表于百度空间,2008-10-4看雪论坛发表地址:https://bbs.pediy.com/thread-73948.htm========================================================================== 这篇文章是在Servex.exe专杀工具写完之后的一些小小感想,关于PE感染和修复,大牛飘过~ 自某日不小心中了Serverx.exe病毒,电脑中大部分EXE文件被感染,系统盘system32目录下的病毒文件Serve…
原文发表于百度空间,2011-06-20========================================================================== 大致过程如下: LdrInitializeThunk  //ring3线程第一次执行从这里开始 ->LdrpInitialize ->_LdrpInitialize ->LdrpInitializeProcess // 如果不是该进程第一次调用,这里会变成LdrpInitializeThread,判断…
原文发表于百度空间,2008-7-26========================================================================== 继续研究PEB,这时候才发现之前写<从PEB获取内存中模块列表>一文时出现的错误.下面是一个结构: typedef struct _LDR_MODULE { LIST_ENTRY InLoadOrderModuleList; LIST_ENTRY InMemoryOrderModuleList; LIST_E…
原文发表于百度空间,2008-7-25========================================================================== PEB中的Ldr部分包含有当前进程所加载的模块信息.lkd> dt _pebntdll!_PEB   +0x000 InheritedAddressSpace : UChar   +0x001 ReadImageFileExecOptions : UChar   +0x002 BeingDebugged   …
原文发表于百度空间,2009-09-17========================================================================== 相当老的话题,大约一年前就写过这个东西了,不过那时候知识比较有限,也不了解内核,因此实现得很粗浅,现在再写一下,权当是对这个老问题的总结吧.先谈谈正规DLL的隐藏方法,这里说的正规DLL,是指用LoadLibrary以正常方式加载的DLL.一.从PEB的Ldr链中消失这个很简单,看雪上NetRoc有一篇关于这…
原文发表于百度空间,2009-01-09========================================================================== 今天又想起来VirtualKD这个东西,试用了一下,真是爽坏了,可能我火星了~~ 很久以前就知道小喂有个VmKd工具,使用Vmware的后门指令直接拷贝数据来代替模拟串口,能大大提高调试时的数据传输速度.不过那个对VMware版本的依赖性太强,我的Vmware就没法用,所以很不爽得又放下了,很长一段时间也没关…
原文发表于百度空间及看雪论坛,2010-09-12 看雪论坛地址:https://bbs.pediy.com/thread-120296.htm========================================================================== Win7的内核新增了一系列带有Tag参数的对象增加引用(Refrence)/减少引用(Derefrence)函数,更易于找出对象使用中的“泄漏”(即Refrence和Derefrence次数不匹配). 在W…
原文发表于百度空间及看雪论坛,2009-10-14 看雪论坛地址:https://bbs.pediy.com/thread-99460.htm 刚发这篇文章的时候,因为内容涉及360的核心产品,文章被雪藏了一段时间========================================================================== Author:achillisblog :https://www.cnblogs.com/achillis/ 上一篇的分析中漏掉了三个函…
原文发表于百度空间,2010-09-07========================================================================== 本来只是打算以回复的形式回答一下m_sunv同学关于windbg搜索符号的问题,不料写得太多,超过了评论字数,索性就更详细一点单独写一篇文章来说明一下windbg查找符号文件的问题吧~ 以下所有说明以本人的符号目录设置为前提,我的符号目录设置是:_NT_SYMBOL_PATH=D:\MyLocalSymbol…
原文发表于百度空间及看雪论坛,2010-01-10 看雪论坛地址:https://bbs.pediy.com/thread-104918.htm  代码及附件可到这里下载========================================================================== ring0调用ring3早已不是什么新鲜事,除了APC,我们知道还有KeUserModeCallback.其原型如下: NTSTATUS KeUserModeCallback (…
原文发表于百度空间,2009-07-02========================================================================== 快一个月没写东西了,随便写点~~ StealthCode检测似乎是RootkitUnhooker独有的功能,主要是检测那些无主的可执行代码片段.比如一些放在Pool中的代码,或者驱动中的代码但驱动隐藏了使得RKU无法找到,就认为是StealthCode了.RKU检测StealthCode的方法似乎是这样的(结…
原文发表于百度空间,2009-03-30========================================================================== 阅读提示:由于继续使用了chichou同学的CodeHighlighter来修饰代码,造成文章字数过多,故分成三篇,且后两篇内容的顺序稍有调整,阅读时请根据大标题的顺序来~ 前置知识:Windows句柄表的基本结构本文以WRK1.2的代码为参考,主要分析Windows句柄表的分配算法,其实只要了解了句柄表的结…
原文发表于百度空间,2009-01-08========================================================================== 这一篇是主要是关于Vmware部分的设置,其实参考JIURL那篇很经典的<借助VMware实现单机使用WinDbg>就可以了.不过那篇文章里面有个小错误(不知道是原作者不小心,还是别人转载的时候错了),后面的波特率应为115200而非11520我就再来写一下吧,内容基本雷同,稍微精简一些 Vmware的相关…
原文发表于百度空间,2008-10-24========================================================================== 简单说,即调用第11号功能,枚举一下内核中已加载的模块.部分代码如下://功能号为11,先获取所需的缓冲区大小ZwQuerySystemInformation(SystemModuleInformation,NULL,0,&needlen);//申请内存ZwAllocateVirtualMemory(NtCu…
原文发表于百度空间,2010-08-11========================================================================== 对Windows对象管理有一定了解的人都知道,在固定对象头(OBJECT_HEADER)前面是一块可变区域,称为可变对象头,它所包含的结构内容并不固定.在Win7之前,可变区域实际有哪些结构,通常是由OBJECT_HEADER中的几个偏移值指出.如下: lkd> dt _OBJECT_HEADER(WinXP…
原文发表于百度空间,2010-08-09========================================================================== 在Windows系统的对象管理中,为了能够从对象头获取对象类型指针,在Win7以前的系统里直接在OBJECT_HEADER里保存了POBJECT_TYPE指针,而这一点在Win7系统里发生了改变.Win7中把所有的对象类型放在了一个表里,这个表叫做ObTypeIndexTable.这个表可以这么定义:POBJ…
原文发表于百度空间,2010-04-05========================================================================== 这也许是我这个假期唯一做的跟Code有关的事了,已经一个多月没写代码了~~问题是这样的,某同学A,在自己的工程中使用了PsVoid的部分驱动源码(感谢炉子开源~~),提到里面的IrpCreateFile函数在Win7下始终会蓝屏,希望我能帮忙解决一下.于是,拿出调试器开始debug之旅~~先简单介绍下,Irp…
原文发表于百度空间,2010-01-02========================================================================== 玩过Shadow SSDT Hook的都知道,在System进程中是无法访问win32k.sys的内存空间的,要想访问必须切换到csrss进程或者任意一个GUI进程.问题一:为什么System进程里无法访问win32k.sys呢?某同学的说法,"在System进程和非GUI进程里,win32k.sys被页换出…
原文发表于百度空间,2009-07-14========================================================================== 标准的驱动与ring3的通信过程是这样的:驱动中创建设备,并为设备创建符号链接,ring3用CreateFile打开符号链接得到设备句柄,然后DeviceIoControl发送ControlCodeDeviceIoControl的内容被封装成IRP到达Device,Device其所属Driver的对应派遣例程…
原文发表于百度空间及看雪论坛,2009-05-13 看雪论坛地址:https://bbs.pediy.com/thread-89708.htm========================================================================== 最近很忙,也很懒,发点以前写的东西吧~学习了一下古老的CsrssWalker,写点笔记~~在Csrss.exe中,保存着所有Win32子系统进程的进程信息,这些信息以链表的形式保存.正常情况下,每一个新创建的…
原文发表于百度空间,2009-04-04========================================================================== 分析了Windows句柄表的分配算法之后,综合WRK1.2中的代码以及Window XP下的实践,继续分析句柄的分配算法~~为了便于描述,先定义几个概念:FreeHandle即尚未被使用的Handle,FreeHandleList是由FreeHandle依靠HandleTableEntry->NextFree…
原文发表于百度空间,2009-03-30========================================================================== 三.当需要申请一个新的二级表(MidLevelTable)时,调用ExpAllocateMidLevelTable函数 PHANDLE_TABLE_ENTRY * ExpAllocateMidLevelTable ( IN PHANDLE_TABLE HandleTable, IN BOOLEAN DoIni…
原文发表于百度空间,2009-03-28========================================================================== PspCidTable也是一个句柄表,其格式与普通的句柄表是完全一样的.但它与每个进程私有的句柄表有以下不同:1.PspCidTable中存放的对象是系统中所有的进线程对象,其索引就是PID和TID2.PspCidTable中存放的直接是对象体(EPROCESS和ETHREAD),而每个进程私有的句柄表则存放…
原文发表于百度空间,2009-02-28========================================================================== 句柄是Windows对象管理中引入的一个东西,它的实际意义是对象在句柄表中的索引.Windows2000使用的是固定的三层句柄表,而WindowsXP和Windows2003都是使用的动态可扩展的三层句柄表,这是一种很优秀的结构,易扩展,且查找迅速,值得学习.通常情况下每个进程的句柄表都是一级表,当句柄数超过…
原文发表于百度空间及看雪论坛,2009-02-27 看雪论坛地址:https://bbs.pediy.com/thread-82919.htm========================================================================== PspCidTable现在已经很科普了,关于其具体格式及如何枚举,网上相关文章一大堆,最多的两篇是gz1x和sudami写的.我这里只谈一个问题,就是枚举PspCidTable时cid的上限问题.很多人提到以…
原文发表于百度空间,2009-01-09========================================================================== 这一节的内容是Windbg入门,用一些基本的命令告诉你如何使用Windbg~~仅作入门,更详细的可以参考Raymond老师的<软件调试>的第30章---"WinDbg用法详解"和Windbg自带的帮助文件 我使用调试器的经验完全来自于Ring3的Ollydbg,所以我在初用Windbg时…
原文发表于百度空间,2009-01-08========================================================================== Windbg+Vmware驱动调试入门,写给wakaka小童鞋,很强大的小童鞋,同时也做为自己的存档~~ Windbg的设置 Windbg本身可以直接从微软的网站上下载下载地址:http://www.microsoft.com/whdc/devtools/debugging/default.mspxWindb…