CBC: Padding Oracle 攻击
最近在研究TLS协议,了解到了TLS1.2时期使用CBC加密导致的 Padding Oracle 攻击(填充神谕攻击),这篇文章稍微讲一下,也顺便总结一下我的理解。 TLS这个协议本身常规的握手就不说了,核心在于他的加密方法CBC. CBC 模式的异或延展性 要理解攻击原理,首先需要明确 CBC(密码块链接)模式的解密公式。对于任意一个密文块 Ci,其解密得到明文 Pi 的过程分为两步: ...
博客再次迁移
虽然用NotionNext的时候隐隐约约就知道还是会有这么一天,不过比以前方便多了。 notion因为API改动,NotionNext的blog瘫痪了,我想了半天还是用回老方法吧,也就是使用hugo部署。 不过写了这么多年,我的blog已经文章太多了。 ...
关于Go语言在操作系统上的调度
最近一直在写Go,对这个语言的体会也是越来越深。 go作为编译类语言,能直接构建对应平台的二进制文件,但是实际上语言本身也是有runtime的。 这点其实和其他语言很不一样,所以这篇文章就来讲讲这个。 首先需要知道,go编译出来的二进制,确实是实打实的纯汇编产物。 ...
下一个想写的项目
最近再配置自己的服务器,有些nginx和docker-compose的配置文件一直在调整。 其中有个很操蛋的事情,就算代码格式化的问题,docker-compose还好,nginx的配置我已经写了接近300行,很多嵌套都相当的乱,因为有lua的部分,但是nginx的配置格式化程序真的很少,vscode我懒得去用,那玩意一打开我的电脑就开始咆哮了。 ...
C草的编译期编程:元模版
最近一直在写time-devourer这个项目,我的多态设计的强迫症又犯了,不可避免和元模版打交道了。这篇文章简单的稍微讲一下我遇到的几个场景。 自动包装COM对象指针,生命周期结束自动调用Release。要求T必须能调用Release方法,且T必须是IUnknown的子类。 头一次写模版元编程给我肘晕了,这就是编译期编程么,害怕. ...
关于Chrome密码管理器的实现逻辑逆向研究
目前存在一个场景:需要填充网页上的账号密码模拟登陆,但是不能触发或者给chrome的密码管理器识别到真实的账号密码。 以前其实就比较好奇这个密码管理器是如何正确抓取网页上的密码的。 经过了一天的研究,大概可以得出几个结论了,我不保证这个逻辑是正确的,但是如果有其他人需要参考我想还是能提供一些帮助的,当然也可能存在其他我没观测到的情况: ...
全局描述符
这个东西其实很多,但是文章里不想细讲,我就大概的讲一下,这个篇文章还是偏笔记为主。 总之全局描述符这个东西是继实模式之后保护模式推出的一种内存管理结构。 在实模式下访问内存基本就是靠“段地址+偏移地址=线性地址”这种方式来访问。 ...
软路由更新日志
最近发现clash(mihomo)核心的内存使用率有明显问题,用几天这玩意就能吃200M以上的内存了,再后面就不得不重启。 并且这个核心的DNS性能也存在部分问题,我不得不使用chinadns-ng来代替clash内部的dns. ...
BIOS最初的引导
由于操作系统本身时存放在硬盘中,并非能在bios引导后直接在内存中运行,所以才有了BIOS引导操作系统的这个步骤。 在主板上电之后,BIOS需要去找到引导程序的位置,这个位置固定在(0磁头0柱面1扇区)的位置,这个扇区也被称为主引导扇区(MBR)。一个扇区大小固定为512字节。也就是boot_loader的大小也必须在512字节以内。 ...
通过函数指针来运行汇编(机器码)
之前已经知道了函数这个玩意在计算机中的本质,本身在栈中存放其实就是一个指针的方式,而指针指向的内容就是在内存中存放的机器码。 解释到这里就已经很明显了,函数其实并不是一定要在编译期载入内存后静态,也就是固定的方式运行的。 ...