内核研究
文章平均质量分 74
Shevacoming
这个作者很懒,什么都没留下…
展开
-
复习:cell 隐藏注册表
注册表隐藏的步骤如下:1。 打开指定名字的注册表键,获取其hkey. 例如:// 打开指定名字的KeyHANDLE OpenKeyByName(PCWSTR pwcsKeyName){ NTSTATUS status; UNICODE_STRING uKeyName; OBJECT_ATTRIBUTES oa;转载 2013-09-10 10:37:03 · 2122 阅读 · 0 评论 -
内核中的同步机制(一)
数据的同步★.提升IRQL实现同步单核CPU上只要提升到DISPATCH_LEVEL就能实现数据的同步,因为线程不会切换。在多核CPU环境下,也有利用IRQL的提升来处理处理器相关的数据同步的必要。一个例子是线程调度时的同步处理,参考前面的文章~★.利用cpu的原子操作执行,x86下的lock前缀对数据进行同步访问。例如lock xadd,xchg,lock cmpxchg原创 2012-05-23 11:32:22 · 1728 阅读 · 0 评论 -
Win32k(4) 视窗钩子
第五部分 视窗钩子一、ROS下的流程 Win2000版本有人分析过了http://bbs.pediy.com/showthread.php?t=135702 消息钩子是一种官方支持钩子回调,可以拦截某一个窗口或者全局的消息。消息本应直接发到对应窗口的wndproc,现在要先发送到我们设定的消息回调,由我们的hook函数进行参数的收取、截获、过滤~原创 2012-06-06 23:20:51 · 1117 阅读 · 0 评论 -
Win32k(3) R0 to R3,键盘鼠标输入
第三部分 R0 to R3 这部分有教主非常精彩和实用的分析,我就不瞎说了。http://bbs.pediy.com/showthread.php?t=104918 r3 to r0 是常规系统调用倒过来中断或者sysenter的东西:http://hi.baidu.com/andriy_aolala/blog/item/0ce3ebbf13原创 2012-06-06 23:20:04 · 2252 阅读 · 0 评论 -
围观网络之三 -- 浅探索NDIS5.1(2)
二、 各个组件的绑定1. 生成设备 当PNP管理器检测到有NIC的时候,会遍历所有注册的微端口驱动,通知他们要AddDevice ,从ndisRegisterMiniportDriver可以看到这个过程已经被NDIS托管 int __stdcall ndisAddDevice(int DriverObject, _UNICODE_ST原创 2012-06-06 22:47:10 · 1734 阅读 · 0 评论 -
围观网络之三 -- 浅探索NDIS5.1(1)
前言:本文讨论w2k&xp适用的ndis5.x 网络架构。NDIS4.0源码太老,ROS又YY了太多,所以这次的参考代码基本都是自己f5的…具体结构都有了,我f5的毫无压力=。=调试的时候利用IMD(中间层驱动)下断点,更无压力了...NDIS5.x网络的堆叠结构大概是: WINSOCK API → afd → 协议驱动TCPIP(其上层是TDI接原创 2012-06-06 22:43:44 · 2155 阅读 · 0 评论 -
关于ark取得进程的镜像文件路径
最近看到一个trojan把自己拷到回收站里隐藏,然后发现我两万年前写的ark取得的进程路径还是原路径。。。突然想起来很久以前看到某群的讨论 拿破伦19:22:03话说,一个运行中的文件,然后移动他到其他目录~~拿破伦19:22:33有些检测他的路径会变成新的目录KKindOf 19:23:05丫的,这是面试题吧原创 2012-06-07 00:53:27 · 1222 阅读 · 0 评论 -
Win32k(5) 相关逆向~参考文献~
这是很久前读ROS的一点笔记,最近没空搞这个,发上来备份~百度越来越渣了,总说我 “文章内容包含不合适内容” 不让贴!———— PDF版本 115提取码 dpfi6iya第七部分 一些相关应用一、枚举消息钩子二、遍历gditable/usertable查询隐藏进程三、窗口保护四、Hook KeUsermodeCallback防止全局钩子注入原创 2012-06-06 23:21:41 · 1694 阅读 · 0 评论 -
Win32k(1) 图形线程的初始化
很久以前看ROS的笔记,跟windows不一样的地方不少,最近没时间看这块了= = 先贴上来备份第一部分 图形线程的初始化综述一下—— 图形通信对象(user object)以线程为单位。这个线程是图形线程,调用表就是ssdt shadow,包含了图形系统调用,三环由user32提供,0环由win32k支持。 线程包含窗口,桌面,普通窗口原创 2012-06-06 23:16:19 · 1219 阅读 · 0 评论 -
枚举劳务线程
ExWorkerQueue是全局数组一共三类typedef enum _WORK_QUEUE_TYPE {CriticalWorkQueue,DelayedWorkQueue,HyperCriticalWorkQueue,MaximumWorkQueue} WORK_QUEUE_TYPE;kd> dt _KQUEUE原创 2012-06-06 23:12:50 · 2261 阅读 · 0 评论 -
拦截LPC监控服务加载和启动
SSDT上hook NtSetSystemInformation NtLoadDriver,可以拦截应用层装载驱动的操作.如果怕不保险,还可以PsSetLoadImageNotifyRoutine或者hook NtCreateSection。但是常规通过服务API加载驱动时却不能找到加载驱动的源程序,PsGetCurrentProcess程序已经是services.exe了.原创 2012-06-06 23:01:30 · 5191 阅读 · 0 评论 -
随笔记,找到r3定时器的pid tid....
一些定时器的dpc函数在内核内部,切入点是NtCreateTimer,调试过程如下 dt _ktimer 8129e718nt!_KTIMER +0x000 Header : _DISPATCHER_HEADER +0x010 DueTime : _ULARGE_INTEGER 0x80000000`fd1b046a原创 2012-06-06 22:53:16 · 998 阅读 · 0 评论 -
dpc timer在win7中的改变....
_KiTimerTableList的符号被Ms抹去了,在我的win7 build 7600 pro中 偏移是0x12b6c0,_KiTimerTableSize的大小被缩减回0x100 entry也增加了一个锁nt!_KTIMER_TABLE_ENTRY +0x000 Lock : 0 +0x004 Entry原创 2012-06-06 22:52:29 · 1068 阅读 · 0 评论 -
系统服务调用与异常分发
系统服务的调用过程一、CPU的内部支持1. int 0x2e 进入 iret返回 (中断门切换)★.利用中断进入内核,0x2e对应的是KiSystemService★.每个处理器有一个任务环境,初始化时系统会给CPU在GDT中构造TSS段,并且记录在KPCR中,其中记录着内核栈的地址。线程切换的时候会把处理器的TSS.ESP0 设置为当前的内核栈地址 所以r原创 2012-05-18 15:11:44 · 4877 阅读 · 0 评论 -
内核中的同步机制(二)
★.线程等待对象一些对象时刻等待的 进程 线程 定时器 各种同步对象等等可被等待的对象,开头都是一个分发器头,这是WRK中的定义,WDK中的定义要更复杂点typedef struct _DISPATCHER_HEADER { union { struct { UCHAR Type; 对象类型 union原创 2012-05-23 11:34:57 · 1316 阅读 · 0 评论 -
内核中的同步机制(三)
★.可等待对象一览1. Kevent 就是一个等待头 没啥说的 以上的例子也是举得这个KMUTANT 对应的是r3的mutextypedef struct _KMUTANT { DISPATCHER_HEADER Header; LIST_ENTRY MutantListEntry; KTHREAD.MutantListHead struct _KTHREA原创 2012-05-23 11:37:49 · 1340 阅读 · 0 评论 -
搜狗浏览器网速保护 功能/漏洞/缺陷 分析
软件版本 2.2.0.1423驱动版本 1.0.0.9主要功能就是对耗流量的下载软件进行限速★.r0 挂钩TCPIP的handler 拦截发送包★.r0 hook NtMapViewOfSection 加载mswsock.dll时向r3中注入sogouipfilter.dll,将WSPStartup EAT hook至一段shellcode , 然后加载sogouipfil原创 2012-05-23 11:39:32 · 1920 阅读 · 0 评论 -
复习:windows对象管理(1)内核对象组织结构
好久没来了!最近在整理以前的一些笔记,也希望把以前学过但没记下来的东西补全,于是这是新一轮复习的第一篇。一、一些概念xp下内核对象的布局结构如下(由低到高):object quota infoobject handle infoobject name infoobject creater infoOBJECT_HEADERobject对象在内核中以哈希树原创 2013-07-25 21:56:35 · 1783 阅读 · 0 评论 -
X64的调用约定
接触x64之后继续看PG的文章,今天开始读msdn上有关x64的解释 http://msdn.microsoft.com/zh-cn/library/7kcdt6fy调用约定简化了:一律使用__fastcall,前四个参数用 RCX、RDX、R8 和 R9传递,除了这四个外加RAX、R10、R11,其他寄存器都是非易失的。比如下面这段NtCreateFile的代码:原创 2012-07-23 16:40:33 · 3689 阅读 · 0 评论 -
读wrk系列 关于IRP(1)
NtReadFile为例, 1. 建立irpPIRPIopAllocateIrpPrivate( IN CCHAR StackSize, IN BOOLEAN ChargeQuota)//如果大小小于IopLargeIrpStackLocations,那么从prcb->PPLookasideList[number].P;这个快查表里面拿一个,如原创 2012-09-06 21:40:54 · 2535 阅读 · 1 评论 -
读wrk系列 Mark一下MDL
Mdl用于把一段用户区内存映射到系统地址上typedef struct _MDL { struct _MDL *Next; Irp->MdlAddress的链表 CSHORT Size; CSHORT MdlFlags; struct _EPROCESS *Process; 原内存所原创 2012-09-05 19:47:32 · 1202 阅读 · 0 评论 -
pg3 bypass源码阅读 —— 学习x64内核hook跳板技术
如之前描述的 pg3复杂了许多先来看看都要hook哪些点1、hook dpc和定时器分发器,防止seh路线触发pgKiTimerListExpire,KiRetireDpcList看一下hook点hook的就是call的位置。这里有两种方案:一种是直接jmp + 64bit addr,显然有同步问题,需要暂停所有c翻译 2012-07-28 06:52:53 · 3852 阅读 · 0 评论 -
PG2 BYPASS源码阅读 学习x64解密定时器、特征码定位
以前没有接触过x64内核编程,借这份代码来学习一下,源码 http://www.codeproject.com/Articles/28318/Bypassing-PatchGuard-3之前说到过PG3的一些机制,下面根据源码回顾一下PG可能会queue一些dpc来触发syscheck,其中dpc context传入的是非传统地址,从而触发异常,转到异常处理去执行PG。翻译 2012-07-28 03:57:04 · 2277 阅读 · 0 评论 -
patchguard v3
纯理论的看完了三篇PG的文章,还没看代码,还没入手调试.第三代是vista的版本win7 sp1的PG肯定跟uniformed的文章不一样了。回头再研究了。反正到win7的时候貌似已经没有人写一大堆文档在内核里对抗pg了,直接给nt打patch了= =对于x64也是刚接触没几天,资料也不是很系统,还需要进一步学习。原文见http://uninformed.org原创 2012-07-26 02:46:45 · 4811 阅读 · 0 评论 -
patchGuard v2
算是对http://www.uninformed.org/?v=6&a=1&t=sumry 的一个中文摘要,理解还不一定全对PG2一些改动:cmp cs:KdDebuggerNotPresent, r12bjnz short continue_initialization_1infinite_loop_1:jmp short infinite_loop_1s原创 2012-07-25 01:19:02 · 3302 阅读 · 0 评论 -
x64的seh
PatchGuard与异常处理密切相关,所以先看看x64的SEH关于x86中内核如何捕获异常,分发异常,可以看http://blog.csdn.net/shevacoming/article/details/7580350上面那篇没有跟进分析RtlDispatchException,这里跟进以复习x86 seh的结构,也看经典的这一篇 http://bbs.pediy.com/原创 2012-07-24 04:10:57 · 3176 阅读 · 0 评论 -
x64 patchGuard v1
PG1使用了一系列加密手段,隐藏自己,核心手段是向三个正常的DPC传入非法DpcContext地址引发异常处理,在异常处理中执行patch扫描保护范围:nt,kidebugroutine,ssdt,gdt idt msr解决方法一:修改pe头部的UnwindData,以改变这三个DPC的异常处理handler 也就是X64的SEH hook。这三个dpc存在于一张表中,搜原创 2012-07-24 18:55:10 · 2733 阅读 · 0 评论 -
dump x64 seh
自己认识x64 seh结构时的小工具,可能有bug#define UNW_FLAG_NHANDLER 0x0#define UNW_FLAG_EHANDLER 0x1#define UNW_FLAG_UHANDLER 0x2#define UNW_FLAG_CHAININFO 0x4typedef enum _UNWIND_OP_CODES { UWOP_PUSH_NON原创 2012-08-03 11:56:32 · 6801 阅读 · 0 评论 -
windows内核访问控制机制
主要看了下面两部分: 1.进程对系统进行特权操作需要有一个权限(Privilege),所以进程有特权集表示进程拥有的权限,内核会在执行这些权限时检查进程是否有权执行此操作。 2.进程对于每个内核对象的操作权限不同,内核对象有一个访问控制列表(ACL)来标示某个用户启动的进程有如何的访问权。进程对对象执行操作时,会检查相应的权限是否符合。一、SID:用来表示系统原创 2012-06-27 23:50:29 · 3260 阅读 · 0 评论 -
APC的内部实现
一个经典的投放apc结束线程是这样的 KeInitializeApc(exitAPC,ethread,OriginalApcEnvironment,KernelKillThreadRoutine,0,0,KernelMode,0); KeInsertQueueApc(exitAPC,exitAPC,NULL,2);1.APC结构typedef struct _KA原创 2012-05-18 15:08:59 · 1427 阅读 · 0 评论 -
DPC,时钟中断,以及DPC定时器(3)
3.定时器的扫描过程真正开始扫描定时器的就是上述的KiRetireDpcList 检测到PRCB的定时器请求是true 调用KiTimerExpiration//解除定时器的操作VOIDKiTimerExpiration ( IN PKDPC TimerDpc, IN PVOID DeferredContext, IN PVOID SystemArgum原创 2012-05-18 15:04:18 · 1902 阅读 · 0 评论 -
DPC,时间中断,以及DPC定时器(2)
二、WRK中的时钟中断和DPC定时器之前研究过一点应用 http://hi.baidu.com/andriy_aolala/blog/item/5aba868b235d50749f2fb437.html为了每次时间中断能够搜索较少的链表 来获得定时器 这里引入了哈希表 。按照不同的时间段被分为512项 挂入链表中,每次中断后先计算出一个下标,然后快速找到相应链表KiTi原创 2012-05-18 15:02:25 · 2043 阅读 · 0 评论 -
文件(3)NTFS文件格式解析完了
资料很多,但是想要真正搞清楚,还是得东拼西凑。。(毕竟没有官方公开的文档,NT4的那个结构都不全,害得我走了好多弯路,最后还是耐着性子看linux的码)最近太迷糊,花在计算机的时间上不多。。真正开始看ntfs的时候才发现它比想象中复杂得多(比起来fat设计的就有点太简单了。。)网络上的资料已经描述的不少了,不想再废话,什么时候忘了就翻出来看看,自己描述起来估计没有个千八的字原创 2012-05-11 18:16:34 · 1586 阅读 · 0 评论 -
【纯笔记】文件啊文件(1)
大家都在搞文件系统,我慢慢研究吧,这一篇先记录一下从win32暴露的界面到FSD的过程,不涉及文件系统~资料来源于ReactOS(0.3.10)和毛德操那本书还有其他乱七八糟的有关文件的资料,只是大概了解一下流程,不保证对,前两天看内存管理那块发现ROS里好多东西都是自己YY的...最古老的存储介质——磁盘,物理磁盘是计算机上安装的实际磁盘,实际在我的电脑里看到的逻辑磁盘,Io初始原创 2012-05-11 18:12:29 · 764 阅读 · 0 评论 -
关于Inline hook check的一些想法与问题
这东西弄了近一周才有点眉目,网络上的资料不是很多。爆搜百度google好久还是发现有一点点资料的:1.rootkits那本书讲了一点,不过那个太挫了,检测了跟没检测一样。就是搜e9 e8判断跳转模块。2.sysnap的blog里有一点~~最初给我了不少feel,感谢之~~在我完成了大部分之后发现了 3.sudami的毕设~~~ 里面那个流程图实在很清楚,弥补了不少我没想到的问原创 2012-05-11 09:42:23 · 1130 阅读 · 0 评论 -
进程与线程(八)进程保护(1) && 驱动逆向初步
INIT:00010D85 public startINIT:00010D85 start proc nearINIT:00010D85 mov edi, ediINIT:00010D87 push ebpINIT:00010D88原创 2012-05-11 09:36:23 · 1100 阅读 · 0 评论 -
Hiding process with DKOM
科普了...大侠飘过.... 感觉这样隐藏进程比Hook ZwQuerySystemInformation 工序上简单很多,所以BSOD的几率也要小了。不过仍然逃不过IS的法眼... 代码基本是copy Rootkits: Subverting the Windows Kernel 加了点注释。几下笔记。 在win中,每个进程都有一个原创 2012-05-10 16:19:20 · 1256 阅读 · 0 评论 -
内存欺骗rootkit的思路
无聊翻翻4年前的黑防,发现个蛋疼#rootkit#:给ethread的内存设置present bit,读取这块内存会引起page fault;dr0置为KiTrap0e; dr1置为KiTrap01; 硬件读断点;inline hook KiTrap0e; 对ethreat做内存欺骗; inline hook KiTrap01; 处理读的断点,原创 2012-05-12 15:45:55 · 1403 阅读 · 0 评论 -
悲剧膜拜一句话刷新缓存
悲剧膜拜一句话刷新缓存前两天苦恼于如何刷新缓存,本来打算按照正常思路直接找CcFlushxx和MmFlushXX的参数,也就是遍历CcVACBs,尚未尝试不知是否可行之际无意发现Azy大牛博客上最后一篇文章写得一句话刷新缓存。膜拜之,我思路还是太窄了~HANDLE hFile = CreateFile(L"\\\\.\\C:", GENERIC_WRITE|GENERIC_READ原创 2012-05-11 18:19:09 · 1981 阅读 · 0 评论 -
DPC Timer
呼 回家第三天~睡到下午三点,太爽了。起来无聊看看timer不知道是我构造关键词太烂还是怎么,好像网上说这个的挺少,internals也没提这个。所以一下内容大多是自己鼓捣的,不一定对。一。使用定时器的使用是比较简单的...随便抛点代码上来,自己看WDK就能搞定1.初始化 1 //测试代码 就图方便用全局变量了,实际使用时可以放到设备扩展里 2 //原创 2012-05-11 17:34:41 · 1560 阅读 · 0 评论