【Day 15】- 今天来实作一个 Kernel mode Thread

Agenda

  • 资安宣言
  • 测试环境与工具
  • 技术原理与程序码
  • References
  • 最後

资安宣言


撰写本系列文章目的在於提升资讯安全之实务能力,
并透过实作体悟到资讯安全领域的重要性,
本系列所有文章之内容皆有一定技术水平,
不得从事非法行为、恶意攻击等非法活动,
「一切不合法规之行为皆受法律所约束」,
为了避免造成公司、厂商或玩家之间困扰,
所有实作不会拿已上市产品、Online Game 等等来作范例学习,
且部分具有深度、价值之内容,将会提升一定阅读门槛(不对该技术做分析、解说),
请勿透过本系列文章所学,从事任何非法活动,请不要以身试法!!!


测试环境与工具

技术原理与程序码

首先开始前要先说一下,
小弟我目前还属於菜鸟阶段,正不断努力学习中,
若有发现错误或不妥之处还请不吝赐教。
欢迎大家多多留言,互相交流交流。

那就开始今天的主题吧~~

大家知道在 kernel mode 也可以建立 Thread 来执行任务吗?

今天就要来讲讲简单跑在 kernel mode 的 thread。

首先使用 InitializeObjectAttributes 来初始化一个指向 OBJECT_ATTRIBUTES 的 Object,

VOID InitializeObjectAttributes(
  [out]          POBJECT_ATTRIBUTES   p,
  [in]           PUNICODE_STRING      n,
  [in]           ULONG                a,
  [in]           HANDLE               r,
  [in, optional] PSECURITY_DESCRIPTOR s
);
typedef struct _OBJECT_ATTRIBUTES {
  ULONG           Length;
  HANDLE          RootDirectory;
  PUNICODE_STRING ObjectName;
  ULONG           Attributes;
  PVOID           SecurityDescriptor;
  PVOID           SecurityQualityOfService;
} OBJECT_ATTRIBUTES;

建立自己的 Thread Func,然後我们使用 PsCreateSystemThread 建立一个 Kernel Thread:

NTSTATUS PsCreateSystemThread(
  PHANDLE            ThreadHandle,
  ULONG              DesiredAccess,
  POBJECT_ATTRIBUTES ObjectAttributes,
  HANDLE             ProcessHandle,
  PCLIENT_ID         ClientId,
  PKSTART_ROUTINE    StartRoutine,
  PVOID              StartContext
);

要记得 Sleep 一段时间,不然在 Kernel 中的 Thread 执行权很高,会占用大量 CPU 资源。

在这一个 Thread func 执行完後,要记得终止这个 Thread,不然会造成永久性伤害 XD

再来透过 Thread Handle 获得 Thread Object ,
可以直接使用 ObReferenceObjectByHandle

NTSTATUS ObReferenceObjectByHandle(
  HANDLE                     Handle,
  ACCESS_MASK                DesiredAccess,
  POBJECT_TYPE               ObjectType,
  KPROCESSOR_MODE            AccessMode,
  PVOID                      *Object,
  POBJECT_HANDLE_INFORMATION HandleInformation
);

最後 Unload Driver 时,要记得把前面所述取得的 Object 做 ObDereferenceObject 的动作。

这样就可以开心跑 Thread 啦~~

因小弟身体不适,後续文章的更新可能会稍微简略,整体目录(Day 16 ~ Day 29)将不会一次释出,还请见谅...

若有断文,小弟在此说声抱歉,会在身体康复後写完 QQ

好了,这篇就讲到这结束了,
大家若有发现哪里写得不好或错误的地方,都留个言讨论一下吧 XD
那我们下期见 o( ̄▽ ̄)ブ

References

最後

  • 如果你/你喜欢我的文章,请记得订阅按赞分享并且打开小铃铛哦
  • 这样就能在第一时间收到通知,也不会错过任何文章啦~~

<<:  成员 18 人:

>>:  [Day15] TS:在 Mapped Type 中使用 Template Literal 来改物件型别中的所有 key

DAY30 遥远的旅途,朋友再会吧

今年铁人赛最後一篇,但也应该不会是铁人赛的最後一篇文。吧。 写铁人赛真的是挺有用也挺有趣的,但是短时...

Adaptor 转接器模式

今天开始要介绍 Structural patterns。先前的 Creational pattern...

#8-选单华丽开起来!超简单!(animation-delay)

昨天做完了会动的汉堡动画传送门 今天来开关侧边栏吧! 当然只要控制 width0 —> 100...

电路级(Circuit-level)授权策略不是常见的服务网格授权策略类型

以下是 NIST SP 800-204B 的摘录: 可以通过配置身份验证和存取控制策略来实施对微服务...

Day27,Kubesphere 体验

正文 先把nfs-client设定为default storage class kubectl pa...