摘要: 原文发表于百度空间,2009-11-08 这是第一次逆向一个企业级安全产品的核心代码,并完美替换原驱动正常工作 RT.逆向用了两天(后面还花了一些断断续续的时间查看细节)还原成源码并编译通过用了两天编译通过的驱动调试排错则断断续续用了一周的时间。。。目前可以替换原驱动正常运行,感觉已相当完美。贴张C 阅读全文
posted @ 2018-12-26 21:17 黑月教主 阅读(928) 评论(0) 推荐(0)
摘要: 原文发表于百度空间及看雪论坛,2009-10-14 看雪论坛地址:https://bbs.pediy.com/thread-99460.htm 刚发这篇文章的时候,因为内容涉及360的核心产品,文章被雪藏了一段时间 Author:achillisblog :https://www.cnblogs.c 阅读全文
posted @ 2018-12-26 21:13 黑月教主 阅读(919) 评论(0) 推荐(0)
摘要: 原文发表于百度空间及看雪论坛,2009-10-08 看雪论坛地址:https://bbs.pediy.com/thread-99128.htm 看时间,09年的国庆节基本上就搞这玩意儿了。。。 分析了一下360的HOOK,通过直接hook KiFastCallEntry实现对所有系统调用的过滤。 我 阅读全文
posted @ 2018-12-26 21:07 黑月教主 阅读(1039) 评论(0) 推荐(1)
摘要: 原文发表于百度空间,2009-09-17 相当老的话题,大约一年前就写过这个东西了,不过那时候知识比较有限,也不了解内核,因此实现得很粗浅,现在再写一下,权当是对这个老问题的总结吧。先谈谈正规DLL的隐藏方法,这里说的正规DLL,是指用LoadLibrary以正常方式加载的DLL。一、从PEB的Ld 阅读全文
posted @ 2018-12-26 21:04 黑月教主 阅读(1365) 评论(0) 推荐(1)
摘要: 原文发表于百度空间,2009-07-14 标准的驱动与ring3的通信过程是这样的:驱动中创建设备,并为设备创建符号链接,ring3用CreateFile打开符号链接得到设备句柄,然后DeviceIoControl发送ControlCodeDeviceIoControl的内容被封装成IRP到达Dev 阅读全文
posted @ 2018-12-26 21:00 黑月教主 阅读(627) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-07-10 基础篇里说的那些东西搞完以后,任何正常的位置都找不到我们的Driver了,此时相应的手段基本上只剩下暴搜PE镜像或暴搜DriverObject了。而且,基础篇讲的那些东西,因为都是M$定好的一些格式和位置,代码怎么写都差不多,固定的路子而已。而抹PE镜像或抹 阅读全文
posted @ 2018-12-26 20:59 黑月教主 阅读(855) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-07-09 完整介绍隐藏驱动的方法,部分内容属于冷饭热炒,炒一炒比较好消化~~先说一下,以下数据和结构信息来自Windbg+WinXP SP2一、从PsLoadedModuleList消失PsLoadedModuleList是系统中一个用于连接所有已加载驱动的双向链表( 阅读全文
posted @ 2018-12-26 20:57 黑月教主 阅读(1186) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-07-08 还是从邪恶的源头--隐藏说起,以隐藏Driver为例,当我们从PsLoadedModuleList、\Driver对象目录、TypeList都消失以后,要怎么去找到我们这个Driver呢?这时,很多ARK的方法就是暴搜,暴搜DriverObject(比如Sy 阅读全文
posted @ 2018-12-26 20:54 黑月教主 阅读(618) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-07-06 以下内容来自www.rootkit.comDriver Hidding based on the following methods:1.removing module form PsLoadedModuleList(that passed some old 阅读全文
posted @ 2018-12-26 20:52 黑月教主 阅读(504) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-07-02 快一个月没写东西了,随便写点~~ StealthCode检测似乎是RootkitUnhooker独有的功能,主要是检测那些无主的可执行代码片段。比如一些放在Pool中的代码,或者驱动中的代码但驱动隐藏了使得RKU无法找到,就认为是StealthCode了。R 阅读全文
posted @ 2018-12-26 20:40 黑月教主 阅读(409) 评论(0) 推荐(0)
摘要: 原文发表于百度空间及看雪论坛,2009-05-13 看雪论坛地址:https://bbs.pediy.com/thread-89708.htm 最近很忙,也很懒,发点以前写的东西吧~学习了一下古老的CsrssWalker,写点笔记~~在Csrss.exe中,保存着所有Win32子系统进程的进程信息, 阅读全文
posted @ 2018-12-26 20:38 黑月教主 阅读(373) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-05-13 Idle进程和System进程一样,也是系统中的一个特殊进程,严格讲它不算是一个进程,但是它有自己的EPROCESS,并有一个IdleThread.若说它算一个进程,它的进程空间、句柄表、Token等却又和System进程一样,即共享了System的内核数据 阅读全文
posted @ 2018-12-26 20:35 黑月教主 阅读(378) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-04-17 关于调试没有符号的驱动时如何断在入口点处这个问题,先说一个我听来的很挫的方法:用C32ASM修改DriverEntry处为0xCC,就是int 3,修正校验和后加载,执行到DriverEntry时产生int 3异常自然就会中断在调试器了,这时再把原来的指令改 阅读全文
posted @ 2018-12-26 20:31 黑月教主 阅读(312) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-04-04 在创建句柄时,操作过程并不受StrictFIFO标志的影响.而在销毁句柄时,StrictFIFO标志则决定了如何放置刚释放的这个FreeHandle.对于普通进程的句柄表而言,StrictFIFO为0,那么销毁该句柄时,Free指针所指向的队列头是Handl 阅读全文
posted @ 2018-12-26 20:28 黑月教主 阅读(326) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-04-04 分析了Windows句柄表的分配算法之后,综合WRK1.2中的代码以及Window XP下的实践,继续分析句柄的分配算法~~为了便于描述,先定义几个概念:FreeHandle即尚未被使用的Handle,FreeHandleList是由FreeHandle依靠 阅读全文
posted @ 2018-12-26 20:26 黑月教主 阅读(658) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-03-31 理论结合实践,这是我一贯的学习方法~~实验目的:以实验的方式观察PspCidTable的变化,从中了解Windows句柄表的分配过程.实验器材:Windbg,RunIt(一个可控的不断创建线程的程序),DebugView知识回顾: 如图所示,句柄表的结构根据 阅读全文
posted @ 2018-12-26 20:22 黑月教主 阅读(297) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-03-30 三、当需要申请一个新的二级表(MidLevelTable)时,调用ExpAllocateMidLevelTable函数 五、句柄表的释放比较简单,遍历并释放每个一级表所占内存就可以了~ 阅读全文
posted @ 2018-12-26 19:51 黑月教主 阅读(158) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-03-30 四.句柄表的扩容:已分配的句柄表被用完时,ExpAllocateHandleTableEntrySlow被调用以分配一个新的句柄表,实现对句柄表的扩容.每次增加粒度都是一个一级表的大小(大小为PAGE_SIZE,句柄容量为PAGE_SIZE/sizeof(H 阅读全文
posted @ 2018-12-26 19:49 黑月教主 阅读(235) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-03-30 阅读提示:由于继续使用了chichou同学的CodeHighlighter来修饰代码,造成文章字数过多,故分成三篇,且后两篇内容的顺序稍有调整,阅读时请根据大标题的顺序来~ 前置知识:Windows句柄表的基本结构本文以WRK1.2的代码为参考,主要分析Wi 阅读全文
posted @ 2018-12-26 19:47 黑月教主 阅读(387) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-03-29 PspCidTable的攻与防,其实就是进程隐藏与检测所涉及到的一部分工作~~不管基于PspCidTable的进线程检测,还是抹PspCidTable进行进程对象的隐藏,都涉及到对PspCidTable的遍历.所以如何安全正确地遍历PspCidTable才是 阅读全文
posted @ 2018-12-26 19:45 黑月教主 阅读(952) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-03-28 PspCidTable也是一个句柄表,其格式与普通的句柄表是完全一样的.但它与每个进程私有的句柄表有以下不同:1.PspCidTable中存放的对象是系统中所有的进线程对象,其索引就是PID和TID2.PspCidTable中存放的直接是对象体(EPROCE 阅读全文
posted @ 2018-12-26 19:41 黑月教主 阅读(692) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-02-28 句柄是Windows对象管理中引入的一个东西,它的实际意义是对象在句柄表中的索引。Windows2000使用的是固定的三层句柄表,而WindowsXP和Windows2003都是使用的动态可扩展的三层句柄表,这是一种很优秀的结构,易扩展,且查找迅速,值得学习 阅读全文
posted @ 2018-12-26 19:37 黑月教主 阅读(434) 评论(0) 推荐(0)
摘要: 原文发表于百度空间及看雪论坛,2009-02-27 看雪论坛地址:https://bbs.pediy.com/thread-82919.htm PspCidTable现在已经很科普了,关于其具体格式及如何枚举,网上相关文章一大堆,最多的两篇是gz1x和sudami写的。我这里只谈一个问题,就是枚举P 阅读全文
posted @ 2018-12-26 19:31 黑月教主 阅读(472) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-02-03 开始本文之前先膜拜一下老V~“无法F5的驱动,不是好驱动啊~不是好驱动啊~ ” killvxk语录这两天下午的时间,破解那个驱动保护搞得好痛苦,每次关机都要蓝一次,有时候设备还不工作,郁闷...而且VMware用得很伤心,每次开GuestOS都得6分钟左右, 阅读全文
posted @ 2018-12-26 19:25 黑月教主 阅读(602) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-01-09 今天又想起来VirtualKD这个东西,试用了一下,真是爽坏了,可能我火星了~~ 很久以前就知道小喂有个VmKd工具,使用Vmware的后门指令直接拷贝数据来代替模拟串口,能大大提高调试时的数据传输速度。不过那个对VMware版本的依赖性太强,我的Vmwar 阅读全文
posted @ 2018-12-26 19:20 黑月教主 阅读(798) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-01-09 这一节的内容是Windbg入门,用一些基本的命令告诉你如何使用Windbg~~仅作入门,更详细的可以参考Raymond老师的《软件调试》的第30章 "WinDbg用法详解"和Windbg自带的帮助文件 我使用调试器的经验完全来自于Ring3的Ollydbg, 阅读全文
posted @ 2018-12-26 19:13 黑月教主 阅读(263) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-01-08 这一篇是主要是关于Vmware部分的设置,其实参考JIURL那篇很经典的《借助VMware实现单机使用WinDbg》就可以了.不过那篇文章里面有个小错误(不知道是原作者不小心,还是别人转载的时候错了),后面的波特率应为115200而非11520我就再来写一下 阅读全文
posted @ 2018-12-26 19:10 黑月教主 阅读(405) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-01-08 Windbg+Vmware驱动调试入门,写给wakaka小童鞋,很强大的小童鞋,同时也做为自己的存档~~ Windbg的设置 Windbg本身可以直接从微软的网站上下载下载地址:http://www.microsoft.com/whdc/devtools/d 阅读全文
posted @ 2018-12-26 18:45 黑月教主 阅读(199) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2009-01-08 看雪论坛地址:https://bbs.pediy.com/thread-80109.htm DebugMan论坛地址:http://www.debugman.com/thread/2642/1/1 纯粹是写着好玩的东西,就是扩展一下ProcessNotify 阅读全文
posted @ 2018-12-26 18:30 黑月教主 阅读(276) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-12-18 标准栈回溯要求回溯中的每个函数都以如下指令作为开头(当然不是说不这样开头就不能回溯,那样就得特殊处理了):push ebpmov ebp,esp接下来的工作通常是为临时变量开辟空间sub esp,0x40... 在函数结束时,会还原ebp和esp寄存器的值, 阅读全文
posted @ 2018-12-26 18:18 黑月教主 阅读(789) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-12-03 今天写程序,用ZwQuerySystemInformation枚举系统中的文件句柄时出了问题,死活一个都找不到,可是这明显不可能啊?于是用Process Explorer随便找了个文件句柄对象,然后看了它的OBJECT_TYPE,才发现文件句柄的类型索引应为 阅读全文
posted @ 2018-12-26 18:13 黑月教主 阅读(291) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-11-20 这个东西嘛,思路来自炉子,C版的最早貌似是sudami写的,我也写一个,练练手。上次看到有人找资料时找到了我刚开博时的一篇挫文,并且引用到看雪上求助,令我汗颜不已,遂把这个代码加了N多注释,方便自己,也方便某些误打误撞到我这儿找资料的菜菜~ 阅读全文
posted @ 2018-12-26 17:25 黑月教主 阅读(591) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-11-02 先定义一下用到的几个变量:char *hModule=NULL;//映射后的基址PIMAGE_OPTIONAL_HEADER pOptHeader;//扩展头PIMAGE_DATA_DIRECTORY pRelocTable=NULL;//指向重定位表PIM 阅读全文
posted @ 2018-12-26 17:18 黑月教主 阅读(366) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-10-24 简单说,即调用第11号功能,枚举一下内核中已加载的模块。部分代码如下://功能号为11,先获取所需的缓冲区大小ZwQuerySystemInformation(SystemModuleInformation,NULL,0,&needlen);//申请内存Zw 阅读全文
posted @ 2018-12-26 17:04 黑月教主 阅读(379) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-10-15 很古老的东西了,写一写,权当练手吧.本来以为没什么难度,很科普很傻瓜的东西,但是写的时候还是遇到一些问题,进程信息正确,得到的线程信息总是不正确,后来分析了一下,发现这个ntdll sdk中定义的进程信息结构和线程信息结构都有点问题,可能它是来自《Win20 阅读全文
posted @ 2018-12-26 17:01 黑月教主 阅读(1052) 评论(0) 推荐(0)
摘要: 原文发表于百度空间及DebugMan,2008-10-12 自某日看了iceboy和MJ0011关于多处理器同步的一些讨论,才发现原来我对自旋锁的理解也有一定错误,还好现在明白了~~为了加深理解,就深入分析了一下自旋锁的实现,一篇小小的自旋锁分析文章,献给大家。写得比较碎,欢迎各位大牛小牛指出错误~ 阅读全文
posted @ 2018-12-26 16:58 黑月教主 阅读(377) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-10-4看雪论坛发表地址:https://bbs.pediy.com/thread-73948.htm 这篇文章是在Servex.exe专杀工具写完之后的一些小小感想,关于PE感染和修复,大牛飘过~ 自某日不小心中了Serverx.exe病毒,电脑中大部分EXE文件被感 阅读全文
posted @ 2018-12-26 16:43 黑月教主 阅读(906) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-31 突然想起来的,修改PEB 能改掉EXE的路径,那么加载的DLL呢? 于是,马上动手实验了一下,遍历PEB中的模块列表双链,找到user32.dll后,修改其映像名和路径.具体信息在下面这个结构里: 代码比较简单,马上写完实验了一下,结果以前断链能过的全过了,m 阅读全文
posted @ 2018-12-26 16:33 黑月教主 阅读(297) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-31 前面已经通过遍历活动进程双链,来得到一个进程列表.但是,这个链表中有些进程其实是已经退出的进程.因此,在得到一个EPROCESS之后,必须对其进行识别,判断其是否已经退出.通过对一死一活两个进程的EPROCESS的对比,发现以下标志可以用作判断进程是否退出的标 阅读全文
posted @ 2018-12-26 16:29 黑月教主 阅读(534) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-28 前面介绍了修改PEB中已加载模块的双链,来隐藏指定的模块.不过要对付这样隐藏,一个暴力搜索内存就够了. 实现思路如下:地址以一个页的大小为单位从0x00000000到0x7FFFFFFF遍历,检查是否具有PE特征.页的大小可以通过GetSystemInfo() 阅读全文
posted @ 2018-12-26 16:27 黑月教主 阅读(532) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-26 继续实践之前的想法,就是断掉如下这个结构中的双向链表: 断开之后,凡使用Module32First()/Module32Next枚举模块的就找不到被隐藏的模块了.不过这样隐藏好像效果太差,没什么实用价值,最起码比起修改映像名称的效果要差多了~下面是用WSysC 阅读全文
posted @ 2018-12-26 16:24 黑月教主 阅读(937) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-26 用常用的几个杀毒工具看了下之前写的改映像路径的程序,发现原来非常有意思好几个工具都不能正确识别路径了,吼吼~ 贴几个图上来: 狙剑: 安天的Atool: gmer(有一点小问题,在模块列表中显示不出来): Syscheck: WsysCheck: 360安全卫 阅读全文
posted @ 2018-12-26 16:17 黑月教主 阅读(209) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-26 继续研究PEB,这时候才发现之前写《从PEB获取内存中模块列表》一文时出现的错误.下面是一个结构: 从这个结构可以知道,如果按InLoadOrderModuleList遍历,那么InLoadOrderModuleList这个结构的地址就是LDR_MODULE结 阅读全文
posted @ 2018-12-26 16:13 黑月教主 阅读(284) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-25 前面对PEB的相关结构和其中的重要成员进行了分析和学习,现在开始真正进入内核,学习内核中的一些结构.这个EPROCESS结构在ntddk.h中有定义,但是并未给出具体的结构,因此要得到EPROCESS中一些重要的成员变量,只能通过偏移的方法,比如PID,Ima 阅读全文
posted @ 2018-12-26 16:10 黑月教主 阅读(690) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-25 PEB中的Ldr部分包含有当前进程所加载的模块信息.lkd> dt _pebntdll!_PEB +0x000 InheritedAddressSpace : UChar +0x001 ReadImageFileExecOptions : UChar +0x0 阅读全文
posted @ 2018-12-26 15:56 黑月教主 阅读(429) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-25 忘了在哪儿看到的了,就是让pid从1开始使用OpenProcess来打开进程,然后根据得到的句柄获取进程名称.绝对的暴力方法,貌似比较有趣,因些写来一个玩玩.实现比较简单,先提升SE_DEBUG_NAME,然后依次打开,获取进程名称就行了,不提升权限的话服务程 阅读全文
posted @ 2018-12-26 15:51 黑月教主 阅读(404) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-24 当时对UNICODE_STRING的使用还有点问题,导致最终效果图中字符串被截断了 先从分析PEB开始吧.感觉分析这个东西,首先要把类型定义搞清楚,这个在Windbg里dt _PEB就可以了搞清楚定义主要是为了定位相关变量的偏移.PEB中的ProcessPar 阅读全文
posted @ 2018-12-26 12:01 黑月教主 阅读(757) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-24 线程是进程的实际存在,每个进程中至少会有一个线程.线程相关的数据结构比较多,一个一个看.首先是ETHREAD:lkd> dt _ETHREADnt!_ETHREAD +0x000 Tcb : _KTHREAD //线程控制块 +0x1c0 CreateTime 阅读全文
posted @ 2018-12-26 11:57 黑月教主 阅读(415) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-24 进程的相关结构非常重要,重点学习~有一些内容参考自:http://dev.csdn.net/article/20/20210.shtm 进程结构中,首推EPROCESS,标记一些重要成员(可能不全):lkd> dt _EPROCESSnt!_EPROCESS 阅读全文
posted @ 2018-12-26 11:55 黑月教主 阅读(259) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-24 这些是驱动中相关的数据结构. 驱动对象,由I/O管理器创建,用于管理设备(Device):lkd> dt _DRIVER_OBJECTntdll!_DRIVER_OBJECT +0x000 Type : Int2B +0x002 Size : Int2B +0 阅读全文
posted @ 2018-12-26 11:51 黑月教主 阅读(226) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-23 继续学习,继续补充...事件:lkd> dt _KEVENTntdll!_KEVENT +0x000 Header : _DISPATCHER_HEADER 信号量:lkd> dt _KSEMAPHOREntdll!_KSEMAPHORE +0x000 Hea 阅读全文
posted @ 2018-12-26 11:29 黑月教主 阅读(308) 评论(0) 推荐(0)
摘要: 原文发表于百度空间,2008-7-23 学内核从基本数据结构开始吧,就像学C语言时从学习int,char开始一样.只列出目前见到和用到的,其它后面再补充~ 常用数据结构: 数字:lkd> dt _ULARGE_INTEGERntdll!_ULARGE_INTEGER +0x000 LowPart : 阅读全文
posted @ 2018-12-26 11:27 黑月教主 阅读(286) 评论(0) 推荐(0)