原文发表于百度空间,2008-7-31========================================================================== 前面已经通过遍历活动进程双链,来得到一个进程列表.但是,这个链表中有些进程其实是已经退出的进程.因此,在得到一个EPROCESS之后,必须对其进行识别,判断其是否已经退出.通过对一死一活两个进程的EPROCESS的对比,发现以下标志可以用作判断进程是否退出的标准. 这是已经退出的IceSword的EPROCES…
原文发表于百度空间,2008-7-25========================================================================== 前面对PEB的相关结构和其中的重要成员进行了分析和学习,现在开始真正进入内核,学习内核中的一些结构.这个EPROCESS结构在ntddk.h中有定义,但是并未给出具体的结构,因此要得到EPROCESS中一些重要的成员变量,只能通过偏移的方法,比如PID,ImageName等.这些偏移可以在Windbg中dt _…
原文发表于百度空间,2008-7-24========================================================================== 进程的相关结构非常重要,重点学习-有一些内容参考自:http://dev.csdn.net/article/20/20210.shtm 进程结构中,首推EPROCESS,标记一些重要成员(可能不全):lkd> dt _EPROCESSnt!_EPROCESS   +0x000 Pcb             …
原文发表于百度空间,2009-05-13========================================================================== Idle进程和System进程一样,也是系统中的一个特殊进程,严格讲它不算是一个进程,但是它有自己的EPROCESS,并有一个IdleThread.若说它算一个进程,它的进程空间.句柄表.Token等却又和System进程一样,即共享了System的内核数据,所以不能以常理对待之.关于Idle进程的两个问题:…
原文发表于百度空间,2009-03-29========================================================================== PspCidTable的攻与防,其实就是进程隐藏与检测所涉及到的一部分工作~~不管基于PspCidTable的进线程检测,还是抹PspCidTable进行进程对象的隐藏,都涉及到对PspCidTable的遍历.所以如何安全正确地遍历PspCidTable才是该技术的关键一.获取PspCidTable的地址常用…
原文发表于百度空间及看雪论坛,2010-01-10 看雪论坛地址:https://bbs.pediy.com/thread-104918.htm  代码及附件可到这里下载========================================================================== ring0调用ring3早已不是什么新鲜事,除了APC,我们知道还有KeUserModeCallback.其原型如下: NTSTATUS KeUserModeCallback (…
原文发表于百度空间,2010-01-02========================================================================== 玩过Shadow SSDT Hook的都知道,在System进程中是无法访问win32k.sys的内存空间的,要想访问必须切换到csrss进程或者任意一个GUI进程.问题一:为什么System进程里无法访问win32k.sys呢?某同学的说法,"在System进程和非GUI进程里,win32k.sys被页换出…
原文发表于百度空间,2009-04-04========================================================================== 在创建句柄时,操作过程并不受StrictFIFO标志的影响.而在销毁句柄时,StrictFIFO标志则决定了如何放置刚释放的这个FreeHandle.对于普通进程的句柄表而言,StrictFIFO为0,那么销毁该句柄时,Free指针所指向的队列头是HandleTable->FirstFree.此时这个新的Fr…
原文发表于百度空间,2009-03-30========================================================================== 三.当需要申请一个新的二级表(MidLevelTable)时,调用ExpAllocateMidLevelTable函数 PHANDLE_TABLE_ENTRY * ExpAllocateMidLevelTable ( IN PHANDLE_TABLE HandleTable, IN BOOLEAN DoIni…
原文发表于百度空间,2009-01-08 看雪论坛地址:https://bbs.pediy.com/thread-80109.htm DebugMan论坛地址:http://www.debugman.com/thread/2642/1/1========================================================================== 纯粹是写着好玩的东西,就是扩展一下ProcessNotify而已~因为大家都知道,系统只给了8个坑,坑满了就蹲不…
原文发表于百度空间及看雪论坛,2009-02-27 看雪论坛地址:https://bbs.pediy.com/thread-82919.htm========================================================================== PspCidTable现在已经很科普了,关于其具体格式及如何枚举,网上相关文章一大堆,最多的两篇是gz1x和sudami写的.我这里只谈一个问题,就是枚举PspCidTable时cid的上限问题.很多人提到以…
原文发表于百度空间及看雪论坛,2009-10-14 看雪论坛地址:https://bbs.pediy.com/thread-99460.htm 刚发这篇文章的时候,因为内容涉及360的核心产品,文章被雪藏了一段时间========================================================================== Author:achillisblog :https://www.cnblogs.com/achillis/ 上一篇的分析中漏掉了三个函…
原文发表于百度空间,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-03-30========================================================================== 阅读提示:由于继续使用了chichou同学的CodeHighlighter来修饰代码,造成文章字数过多,故分成三篇,且后两篇内容的顺序稍有调整,阅读时请根据大标题的顺序来~ 前置知识:Windows句柄表的基本结构本文以WRK1.2的代码为参考,主要分析Windows句柄表的分配算法,其实只要了解了句柄表的结…
原文发表于百度空间,2009-03-28========================================================================== PspCidTable也是一个句柄表,其格式与普通的句柄表是完全一样的.但它与每个进程私有的句柄表有以下不同:1.PspCidTable中存放的对象是系统中所有的进线程对象,其索引就是PID和TID2.PspCidTable中存放的直接是对象体(EPROCESS和ETHREAD),而每个进程私有的句柄表则存放…
原文发表于百度空间,2009-02-28========================================================================== 句柄是Windows对象管理中引入的一个东西,它的实际意义是对象在句柄表中的索引.Windows2000使用的是固定的三层句柄表,而WindowsXP和Windows2003都是使用的动态可扩展的三层句柄表,这是一种很优秀的结构,易扩展,且查找迅速,值得学习.通常情况下每个进程的句柄表都是一级表,当句柄数超过…
原文发表于百度空间,2009-01-09========================================================================== 这一节的内容是Windbg入门,用一些基本的命令告诉你如何使用Windbg~~仅作入门,更详细的可以参考Raymond老师的<软件调试>的第30章---"WinDbg用法详解"和Windbg自带的帮助文件 我使用调试器的经验完全来自于Ring3的Ollydbg,所以我在初用Windbg时…
原文发表于百度空间,2009-01-08========================================================================== 这一篇是主要是关于Vmware部分的设置,其实参考JIURL那篇很经典的<借助VMware实现单机使用WinDbg>就可以了.不过那篇文章里面有个小错误(不知道是原作者不小心,还是别人转载的时候错了),后面的波特率应为115200而非11520我就再来写一下吧,内容基本雷同,稍微精简一些 Vmware的相关…
原文发表于百度空间,2008-12-03========================================================================== 今天写程序,用ZwQuerySystemInformation枚举系统中的文件句柄时出了问题,死活一个都找不到,可是这明显不可能啊?于是用Process Explorer随便找了个文件句柄对象,然后看了它的OBJECT_TYPE,才发现文件句柄的类型索引应为28,而我用的是炉子给的那个SYSTEM_HANDL…
原文发表于百度空间,2008-10-4看雪论坛发表地址:https://bbs.pediy.com/thread-73948.htm========================================================================== 这篇文章是在Servex.exe专杀工具写完之后的一些小小感想,关于PE感染和修复,大牛飘过~ 自某日不小心中了Serverx.exe病毒,电脑中大部分EXE文件被感染,系统盘system32目录下的病毒文件Serve…
原文发表于百度空间,2008-7-24========================================================================== 线程是进程的实际存在,每个进程中至少会有一个线程.线程相关的数据结构比较多,一个一个看.首先是ETHREAD:lkd> dt _ETHREADnt!_ETHREAD   +0x000 Tcb              : _KTHREAD       //线程控制块   +0x1c0 CreateTime   …
原文发表于百度空间,2011-04-07========================================================================== 该函数与ring3的枚举窗口函数有关,原型如下: NTSTATUS APIENTRY NtUserBuildHwndList( HDESK hDesktop, HWND hwndParent, BOOLEAN bChildren, ULONG dwThreadId, ULONG lParam, HWND* p…
原文发表于百度空间,2011-04-05========================================================================== 在分析ntfs的B+树时,不可避免地要进行文件名大小的比较,经过观察发现通常我们在资源管理器中看到的文件排序和ntfs中有很大不同.比如,有下面一些文件,在资源管理器中排序如下: 可以看到对汉字是按其汉语拼音排序的.而在ntfs的目录索引中排序如下:观察发现,由于ntfs存储的是Unicode文件名,所以比较…
原文发表于百度空间,2011-03-24========================================================================== 看雪上别人问的一个问题,顺便在此记录下吧~~ kd> kvn # ChildEBP RetAddr Args to Child 0012f7b8 77d2dbfb 0012f81c kernel32!LoadLibraryExW+0x2 (FPO: [Non-Fpo]) 0012f7e4 7c92eae3 0…
原文发表于百度空间,2010-10-07========================================================================== 由于KeUserModeCallback的工作原理,对调用者线程和进程有以下要求: 1.调用者线程不能是纯内核线程(由PsCreateSystemThread创建的线程) 2.调用者线程必须在其所属进程中调用KeUserModeCallback 3.调用者进程必须加载了user32.dll 原因很简单,因为K…
原文发表于百度空间,2010-09-07========================================================================== 本来只是打算以回复的形式回答一下m_sunv同学关于windbg搜索符号的问题,不料写得太多,超过了评论字数,索性就更详细一点单独写一篇文章来说明一下windbg查找符号文件的问题吧~ 以下所有说明以本人的符号目录设置为前提,我的符号目录设置是:_NT_SYMBOL_PATH=D:\MyLocalSymbol…
原文发表于百度空间,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…