Win8中的MmVerifyCallbackFunction

2013-12-20 Nie.Meining Coding

看了下Win8中的MmVerifyCallbackFunction,依然守护 ObRegisterCallbacks 和 PspSetCreateProcessNotifyRoutine:

win8verfify1.png

不过检测方案和win7中是一样的:

阅读全文>>

评论(0) 浏览(27992)

[开发笔记]关于匈牙利命名法

2013-12-19 Nie.Meining Life

由于项目需要,这段时间都在研究linux内核。感觉linux内核代码跟wrk的代码相比,风格上的最大区别是命名法。linuxer似乎都觉得匈牙利命名法是没有必要,甚至在内核编码规范中也明确抵制匈牙利命名法。但作为一名长期使用匈牙利命名法的码农,我个人觉得这种命名法在开发过程中还是能带来很大帮助的,尤其是可能帮助你避免很多潜在的bug,提高代码的严谨性举几个例子:


1. 假设你要给某个变量赋值:

unsigned short usLocal = g_usGlobal;

是的,不用疯狂向上滚屏去寻找 g_usGlobal 的声明了,我们知道它的类型是unsigned short。更给力的是,你能立刻知道 g_usGlobal 是一个全局变量,于是你被迫去思考这个地方是否会出现多线程竞争的问题……

阅读全文>>

评论(1) 浏览(43577)

内核呓语系列2 —— windows子系统

2013-12-18 Nie.Meining Coding

上一篇写到Windows将图形支持作为windows子系统的一部分放到了内核支持中。其实windows子系统既有内核部分也有用户态部分,其内核部分由win32.sys实现,负责窗口管理(会话、窗口站、桌面)和GDI。win32.sys对应用层不处理任何IO请求,只作为内核功能扩展导出Shadow SSDT表向用户层提供大量系统服务。因此基于这个定位,win32.sys不是一个完整的内核驱动,而是一个内核动态链接库,其加载方式是 MmLoadSystemImage + call oep。

任何一个线程,只要调用了Shadow SSDT中的函数则会转变成一个GUI线程(PsConvertToGuiThread),纳入csrss.exe的管理范畴。转换过程包括分配子系统相关的对象、切换一个更大的内核栈(KeSwitchKernelStack)、切换为 KeServiceDescriptorTableShadow 等。具体可以参考wrk。另外,win32.sys 并不常驻内存,因此在有些进程中可能看不到Shadow SSDT表(例如 system):

nhyy2_1.png

阅读全文>>

评论(2) 浏览(26994)

[分析引擎开发笔记]硬件模拟器

2013-12-18 Nie.Meining Life

最初选择硬件模拟器作为基础架构,主要出于以下几个方面考虑:

1. 可以模拟多种硬件架构,这样针对不同的分析环境提供统一的分析方法,如x86架构的Windows/Linux系统、arm架构的Android系统等……

2. 这种软件模拟硬件的方法,容易从虚拟硬件层提取原始数据进行分析,实现不对虚拟操作系统做任何更改,在对抗检测虚拟机的样本时,有一定优势。不过硬件模拟器这种译码执行的方式也肯定会带来性能损失……

3. 方便在不修改虚拟操作系统的情况下实现远程屏幕控制。我们正在测试的深度分析客户端截图:

image003.png

阅读全文>>

评论(0) 浏览(774)

内核呓语系列1 —— 系统结构

2013-12-17 Nie.Meining Coding

学习内核有一段时间了,做了不少底层开发、驱动开发相关的东西,因此打算写一个系列,把一些内核相关的东西梳理梳理。

首先声明,这个系列不是系统地介绍内核原理,主要是整理一些底层开发中涉及到的东西,相当于一个开发笔记汇总,想到什么写什么,也许同样做底层开发的朋友们看到后能产生共鸣。我争取把这个系列坚持记录下去,水平有限出错难免,还望路过的大牛们多加指点。

废话不说了,进入正题。

作为内核相关的文章,还是从系统结构讲起吧。Windows和Linux内核一样,基本结构分3层,自底向上分别是硬件设备(即HAL层,提供硬件抽象)、系统环境(提供系统服务)、应用环境(使用系统服务):

nhyy1_1.png

阅读全文>>

评论(0) 浏览(36027)

Powered by emlog