Timmoc 的技术小屋

Timmoc 的技术小屋

这里记录技术笔记与日常思考,欢迎常来逛逛 👋

Windows内核学习笔记(六)

常见的分发器对象 事件(event):用于线程之间的通信和同步,它有俩种状态:已触发和未触发。事件可以用于线程等待某个事件发生,或者通知其他线程事件的发生。 互斥量(Mutex)(或互斥锁):互斥量用于确保在同一时刻只有一个线程能够访问共享资源。它允许线程请求锁定,当一个线程获得锁定时,其他线程必须等待,直到锁被释放。 信号量(Semaphore):用于控制对共享资源的并发访问。它维护一个计数器,允许指定数量的线程同时访问资源。 条件变量(Condition Variable):条件变量用于线程之间传递信号和等待特定条件的发生。通常与互斥量一起使用,用于等待某个条件满足后执行操作。 读写锁(Read-Write Locks):读写锁用于控制对共享资源的读和写,它允许多个线程同时读取资源,但只允许一个线程写入资源。 计数器对象(Counting Semaphore):一种特殊的信号量,它可以增加和减少计数器的值,通常用于跟踪资源的可用性或完成的任务数量。 关于互斥锁和自旋锁:互斥锁基于线程调度,而自旋锁不依赖线程调度;还有一个区别是线程尝试获取锁时,如果该锁被占用,线程是被挂起还是一直自旋;互斥锁适用于长时间的临界区和资源竞争激烈的情况,而自旋锁适用于非常短暂的临界区。 Windows在上述基础上,实现了同步语义更为丰富的一些同步机制,包括:快速互斥体(fast mutex)、守护互斥体(guarded mutex)、执行体资源(executive resource)和推锁(push lock)。 一听又是历史,见过fastcall的都知道。 SSDT **系统服务描述表(System Services Descriptor Table,SSDT)**其在内核中的实际名称是 “KeServiceDescriptorTable”。 ...

March 9, 2025 · 2 min

再战博客园美化(十一)

前言 因为有个(五)被我漏掉了,所以这个再战系列跳过了十 对了,这是我修改后的vue项目:git@gitcode.com:Timmoc/goodvue.git 不建议直接克隆使用,因为有很多硬编码。但如果我的项目能帮助到各位就最好了。 起因 我的页面居然只有两页? 切换到页面二以后才正常。 重新切回页面一,注意到也正常。 注意到两个url不一致。 好,行动,怎么能让我的主页只能看到两页呢? 行动 好像有点不对 页面加载不完整。 哦,不对,我想起来我调试的方法了。 博客园特有的调试方法。 好的哥,等我。 再复制过来。 等会,复制到哪里? ...

March 8, 2025 · 1 min

记一次HTTPS server.key私钥泄露事件

前言 在准备进行博客园美化的时候,发现自己的Alist Server.key泄露了。 虽然配套泄露的Server.crt已经过期了,但是我续期的那个Server.crt可以直接访问我的本机获取到 这对我的电脑(和其他信任了TD根证书的电脑与手机)造成了很严重的中间人攻击风险。 因此需要吊销证书 禁止进一步的泄露 将git仓库设置为私有 git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \ --prune-empty --tag-name-filter cat -- --all 清除历史中数据 我注意到,仍然可以访问,只是哈希不同了而已。 这是新建了一个哈希分支。 ...

March 8, 2025 · 1 min

Windows内核学习笔记(四)

杂项 特权模式和内核模式相同 系统进程 笔者学习到此处的时候开始怀疑原作者是否有自己看过他写的文章。(错别字) 我要不要换一篇文章阅读。 系统空闲进程(Idle):该进程的PID为0,其中每个处理器或核对应有一个线程。 System 进程:这是操作系统的核心进程,PID为4。它负责管理内核模式下线程、设备驱动程序、中断处理和其他核心事件。 会话管理器(smss.exe):Windows系统中创建的第一个用户模式进程,在Windows启动过程中创建环境变量,(启动了子系统进程csrss.exe和登录进程winlogon.exe)。另外,它还负责创建新的终端服务器会话,包括建立会话空间的数据结构,为新建的终端服务器加载子系统。 登录进程(winlogon.exe):负责处理交互用户的登录和注销。 Windows子系统进程(csrss.exe):负责为用户提供一个子系统环境。 本地安全权威子系统进程(lsass.exe):负责本地系统安全策略。 Shell进程(explorer.exe):Windows的默认Shell,它提供了系统与用户打交道的各种界面,包括开始菜单、任务栏、资源管理窗口等几乎所有Windows用户都熟悉的界面。 服务控制管理器(services.exe):负责Windows的系统服务,指一些特殊的进程。 services比较常见,会启动注册为服务并且选择开机自启的一些特殊dll,或者在手动模式下被管理员权限的程序要求启动一些服务。 对于病毒来说是其中一个藏身地。另外一个藏身地是任务计划程序。 某些“病毒”会藏身于其中,并且不将自己注册为开机自启,而是每一个小时启动一次,这样可以逃避部分检查开机自启的程序。 只能说,非常天才,不愧是国产,脑子转得就是快。 既然它这样恶心我了,那我也只能把它装进沙盒里面了。 不过沙盒里面它也依旧能恶心我: 在思考他的云同步功能到底有没有那么重要,要不要换office。 ...

March 3, 2025 · 1 min

Sunshine Moonlight 串流 再玩一把

前言 其实我已经配置好了,目前的配置是 不过我额外安装vdd是因为基地版自带的那个显示屏有点问题。 只不过我自己也忘了有什么问题了。 但是现在 什么?有更新? 更新来玩玩。 博主能这样随便更新,是因为这个软件不怎么用,而且喜欢折腾才这样做的,如果经常需要使用建议是稳定就不更新了 啥意思,以前本机外可以直接访问WEBUI吗,这太离谱。 感觉更应该是以前不监听本机外IP 卸载 按照提示卸载即可 安装 直接下一步就完事 修bug 出现了,逃不掉的。 用新的东西以后开始出bug,看不懂,更新一下先 再次卸载 看不懂报错原因,卸载了再说 ...

March 2, 2025 · 1 min

Windows 剪贴板 编程原理学习

前言 好累,终于码完一篇字了。 进入正题吧 与AI对话 https://learn.microsoft.com/zh-cn/windows/win32/dataxchg/standard-clipboard-formats 提问是个好习惯,询问AI可以快速得到回答。 GDI 对象是什么,什么是 GDI 对象? GDI(Graphics Device Interface,图形设备接口)对象是 Windows 操作系统中用于管理和操作图形资源的基本实体。GDI 是 Windows 提供的一组 API(应用程序编程接口),用于在屏幕上绘制图形、文本和图像,同时也用于打印和显示设备的交互。GDI 对象是这些图形操作的核心组成部分。 ...

March 2, 2025 · 2 min

Windows 剪贴板 编程原理引入

前言 不得不说上三休四的生活就是舒服,我都有精力提升自己了。 本文将基于自己在生活中遇到的现象进行探索,因此问题引入对自己较为重要,读者可以跳过。 文章主要探讨剪贴板格式问题,即下面的链接。 https://learn.microsoft.com/zh-cn/windows/win32/dataxchg/standard-clipboard-formats 续前言 我逐渐发现这篇文章越写愈多了,因此编程原理的学习将会另开一篇。 本篇文章是指我在遇到剪贴板在生活中的现象。 问题引入 情境一 从一个复杂格式的软件复制文本到QQ的文本框,复杂格式会被自动清除,但是基本内容仍然保留 不过我认为windows自带的这个才是真正的复制结果。 QQ把这个小圆点作为空格复制过去了。 奇怪的地方在于复制回来会。。。 如果在本软件复制本软件的,当然会正常,毕竟内容是html格式。 情境二 使用sn(忘名了)或者pixpin的人可能看到过这个“复制图像为文件”的选项 在不勾选它的情况下,截图,复制。 可以在QQ中正常粘贴,但是如果尝试粘贴到文件系统会被拒绝。 此时勾选这个剪贴板内容后,再试一次。 ...

March 2, 2025 · 1 min

寻觅Notepad2e

起因 这天,正当我兴致勃勃地编写新的博客时,想要打开windows的notepad,结果居然发现有个奇怪的东西,还占在最优匹配上,还好我看了一眼名字没有回车直接打开 我倒要看看是哪个国产流氓软件(注:刻板印象)给我偷偷装上的新notepad。 哦,原来是TortoiseGit啊,误会国产软件了。 不过我有个问题,你Notepad 2e x64 [ZH] 这个 [ZH] 是否有点自欺欺人了?

March 2, 2025 · 1 min

Windows内核学习笔记(一)

前言 此随笔为本人笔记,并非系统学习应当使用 内核 ntoskrnl.exe 是 Windows 操作系统的核心内核程序文件,全称为 Windows NT Operating System Kernel。它是 Windows 操作系统正常运行的基础 内核层级 R0是内核层,R3是应用层,而R1、R2不使用 这样就解决了我之前不理解R1、R2是什么应用的问题 Windows内核中主要可以分成三层:硬件抽象层(HAL),内核层(也称微内核micro-kernel),执行体层。 Ntdll.dll的功能 作为桥梁:Ntdll.dll是用户模式代码和内核模式系统服务之间的连接纽带。它使得用户模式的应用程序能够方便地调用内核提供的系统服务,而无需直接与内核进行交互,从而保证了系统的稳定性和安全性。 提供存根函数:对于内核提供的每一个系统服务,Ntdll.dll都对应提供一个存根函数。这些存根函数的名称以“Nt”作为前缀,例如NtCreateProcess(用于创建进程)、NtOpenFile(用于打开文件)等。存根函数的作用是为用户模式代码提供一个接口,当用户模式代码调用这些存根函数时,Ntdll.dll会将调用请求转发给相应的内核模式系统服务。 提供系统级支持函数:除了存根函数,Ntdll.dll还提供了许多系统级的支持函数,用于实现各种系统功能。这些支持函数按照功能不同有不同的前缀,例如: 映像加载器函数(以“Ldr”为前缀):用于加载和管理程序的映像文件,例如LdrLoadDll(加载动态链接库)等。 系统时间函数(以“Etw”为前缀):用于与系统时间相关的操作,例如EtwStartTrace(开始跟踪事件)等。 一般的运行支持函数(以“Rtl”为前缀):提供各种运行时支持功能,例如RtlAllocateHeap(分配堆内存)等。 字符串支持函数:用于字符串操作,例如RtlCompareString(比较字符串)等。 中断请求级别 在Windows操作系统中调用内核函数时,必须关注中断请求级别(IRQL,Interrupt Request Level),原因如下: ...

February 25, 2025 · 1 min

Windows内核学习笔记(三)

前言 本篇并非内核学习,但有点相关,是本人看了内核区域后的遐想。 AI是一个思考的好工具,但是具体的验证还得亲为。 这样的问题我曾经也思考过,但是由于编写代码过于麻烦,而现在也该给自己一个答案了。 **图片太长,点击展开** 尝试编码 项目结构: TestDll:被修改的Dll TestRunner: 运行者,旁观者 DllMemoryInjectTest:修改者,管理员权限 由于已知内核代码是不能修改的,但是同一个dll在代码中的情况,windows会选择隔离进程吗? 此处省略处理代码异常过程…… 最后会给出代码 结果 不同程序加载相同dll,其中一个程序修改它自身内存中dll后,另一个程序不会同步修改。 当我发现修改保护不需要管理员权限时,其实就已经不抱有太大希望了 但为了完成整个程序,还是写到了最后。 dll难道都类似于include一样,每一个exe都复制自己的dll吗 哎,有个问题。 系统dll也适用这个条件吗? 这里的基地址完全一样。 注意到,用户模块的基地址也完全一样 感觉不抱希望。 不如直接用xdbg修改试试,没必要写软件了。 随便改了一个字节,没有同步。 ...

February 25, 2025 · 4 min