LyShark®

信息安全电子刊物出版品牌

灰帽黑客:攻守道,是一本于2023年5月20日创作完成,并于5月22日首次发表的图书作品,著作权人是王瑞。一本信息安全编程技术实战指南,书中总结并融入了作者多年的安全编程经验,每一个案例都是从实战角度出发,该书由四卷组成,分别是基础入门卷,安全编程卷,软件安全卷以及内核安全卷,每一卷中都包含有大量根据实战而总结的黑客编程技术,通过对本书的学习读者可以快速掌握并具备实战技能,本书适用于中、高级信息安全工程师,同时也可用作高校信息安全专业课外补充教材。

阅读全文 »

Minifilter是一种文件过滤驱动,该驱动简称为微过滤驱动,相对于传统的`sfilter`文件过滤驱动来说,微过滤驱动编写时更简单,其不需要考虑底层RIP如何派发且无需要考虑兼容性问题,微过滤驱动使用过滤管理器`FilterManager`提供接口,由于提供了管理结构以及一系列管理API函数,所以枚举过滤驱动将变得十分容易。

阅读全文 »

在上一篇文章`《驱动开发内核枚举DpcTimer定时器》`中我们通过枚举特征码的方式找到了`DPC`定时器基址并输出了内核中存在的定时器列表,本章将学习如何通过特征码定位的方式寻找`Windows10`系统下面的`PspCidTable`内核句柄表地址。PspCidTable 就是这样的一种表`(内核句柄表)`,表的内部存放的是`进程EPROCESS`和`线程ETHREAD`的内核对象,并通过`进程PID`和`线程TID`进行索引,ID号以4递增,内核句柄表不属于任何进程,也不连接在系统的句柄表上,通过它可以返回系统的任何对象。

阅读全文 »

在笔者上一篇文章`《驱动开发内核枚举IoTimer定时器》`中我们通过`IoInitializeTimer`这个API函数为跳板,向下扫描特征码获取到了`IopTimerQueueHead`也就是IO定时器的队列头,本章学习的枚举DPC定时器依然使用特征码扫描,唯一不同的是在新版系统中DPC是被异或加密的,想要找到正确的地址,只是需要在找到DPC表头时进行解密操作即可。

阅读全文 »

今天继续分享内核枚举系列知识,这次我们来学习如何通过代码的方式枚举内核`IoTimer`定时器,内核定时器其实就是在内核中实现的时钟,该定时器的枚举非常简单,因为在`IoInitializeTimer`初始化部分就可以找到`IopTimerQueueHead`地址,该变量内存储的就是定时器的链表头部。枚举IO定时器的案例并不多见,即便有也是无法使用过时的,此教程学到肯定就是赚到了。

阅读全文 »

在笔者上一篇文章`《驱动开发:内核取应用层模块基地址》`中简单为大家介绍了如何通过遍历`PLIST_ENTRY32`链表的方式获取到`32位`应用程序中特定模块的基地址,由于是入门系列所以并没有封装实现太过于通用的获取函数,本章将继续延申这个话题,并依次实现通用版`GetUserModuleBaseAddress()`取远程进程中指定模块的基址和`GetModuleExportAddress()`取远程进程中特定模块中的函数地址,此类功能也是各类安全工具中常用的代码片段。

阅读全文 »

在笔者上一篇文章`《内核层InlineHook挂钩函数》`中介绍了通过替换`函数`头部代码的方式实现`Hook`挂钩,对于ARK工具来说实现扫描与摘除`InlineHook`钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个`读写字节`的函数即可,将复杂的流程放在应用层实现是一个非常明智的选择,与`《内核实现进程反汇编》`中所使用的读写驱动基本一致,本篇文章中的驱动只保留两个功能,控制信号`IOCTL_GET_CUR_CODE`用于读取函数的前16个字节的内存,信号`IOCTL_SET_ORI_CODE`则用于设置前16个字节的内存。

阅读全文 »

在上一章`《内核LDE64引擎计算汇编长度》`中,`LyShark`教大家如何通过`LDE64`引擎实现计算反汇编指令长度,本章将在此基础之上实现内联函数挂钩,内核中的`InlineHook`函数挂钩其实与应用层一致,都是使用`劫持执行流`并跳转到我们自己的函数上来做处理,唯一的不同的是内核`Hook`只针对`内核API`函数,但由于其身处在`最底层`所以一旦被挂钩其整个应用层都将会受到影响,这就直接决定了在内核层挂钩的效果是应用层无法比拟的,对于安全从业者来说学会使用内核挂钩也是很重要。

阅读全文 »

SSDT中文名称为系统服务描述符表,该表的作用是将Ring3应用层与Ring0内核层,两者的API函数连接起来,起到承上启下的作用,SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基址、服务函数个数等,SSDT通过修改此表的函数地址可以对常用Windows函数进行内核级的Hook,从而实现对一些核心的系统动作进行过滤、监控的目的,接下来将演示如何通过编写简单的驱动程序,来实现搜索SSDT函数的地址,并能够实现简单的内核Hook挂钩。

阅读全文 »

在前面的系列教程如`《驱动开发内核枚举DpcTimer定时器》`或者`《驱动开发内核枚举IoTimer定时器》`里面`LyShark`大量使用了`特征码定位`这一方法来寻找符合条件的`汇编指令`集,总体来说这种方式只能定位特征较小的指令如果特征值扩展到5位以上那么就需要写很多无用的代码,本章内容中将重点分析,并实现一个`通用`特征定位函数。

阅读全文 »