撰写本系列文章目的在於提升资讯安全之实务能力,
并透过实作体悟到资讯安全领域的重要性,
本系列所有文章之内容皆有一定技术水平,
不得从事非法行为、恶意攻击等非法活动,
「一切不合法规之行为皆受法律所约束」,
为了避免造成公司、厂商或玩家之间困扰,
所有实作不会拿已上市产品、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( ̄▽ ̄)ブ
>>: [Day15] TS:在 Mapped Type 中使用 Template Literal 来改物件型别中的所有 key
今年铁人赛最後一篇,但也应该不会是铁人赛的最後一篇文。吧。 写铁人赛真的是挺有用也挺有趣的,但是短时...
今天开始要介绍 Structural patterns。先前的 Creational pattern...
昨天做完了会动的汉堡动画传送门 今天来开关侧边栏吧! 当然只要控制 width0 —> 100...
以下是 NIST SP 800-204B 的摘录: 可以通过配置身份验证和存取控制策略来实施对微服务...
正文 先把nfs-client设定为default storage class kubectl pa...