Kennico

Keep studying C++.

ARP spoofing

通过 ARP 欺骗劫持 HTTP 流量

主机上线到一个网络之后会获得至少一个 IP 地址(比如 DHCP 或静态地址)。IP 地址能反映网络的拓扑结构,但 IP 地址并不能唯一地标识一个网络接口;能够唯一标识一个网卡的是在制造出厂时写入的 6 字节的 MAC 地址。一个 IP 数据包在到达另一个接口之前,需要知道目的地 IP 地址的 MAC 地址。ARP 就是一个将 IP 地址解析为 MAC 地址的协议,而一个基于以太网之上的 A...

Structured Exception Handling

Windows 异常处理机制

Content 微软靠 OS 和编译器提供了一套异常处理机制(Structured Exception Handling, SEH)。和标准 C++ 的中的 try/catch 不同, SEH 能够处理的异常类型有限而且更贴近硬件(比如整数除 0 异常和非法访问内存,考虑到Windows 是由 C 写成的也就不足为奇了)。使用了 SEH 的代码包含三个要素:try 代码块、filter 表达...

Stack buffer overflow

在栈缓冲区溢出的边缘跃跃欲试

Content 缓冲区指的是一块连续的内存,通常情况下就是一个数组。对于 C/C++ 编译器来说不存在“缓冲区”这个概念,因为它只能看见一个指针;因此在访问数组的时候不会有C/C++的内建手段来防止越界。这就导致了容易被攻击者利用的 缓冲区溢出 风险,而且攻击者往往通过精心构造的输入(malformed inputs, aka shellcode)来达到改变程序执行流程的目的。此外,如果缓...

Segment registers

段寄存器的前世今生

Contents 一如其名,段寄存器是若干个存储与数据段相关信息的寄存器。特别地,段寄存器长度为 16 bits。段寄存器的作用是存储对应数据段的起始位置。比如,为了获取程序启动时的命令行参数个数,调用 CRT 函数 __p___argc() 可能会产生以下指令(用助记符表示,Windows 10, VS2017): call dword ptr ds:[<&__p___a...

String searching

定位字符串的方法有几何?

Question 给定两个字符串 $M,N,\lvert M\rvert\ge\lvert N\rvert$ ,找出子串 $N$ (又叫模式串,pattern)出现在 $M$ 中的位置。 Solution Enumeration 枚举所有来自 $M$ 的长度为 $\lvert N\rvert$ 的子串和 $N$ 逐一比对。 具体方法为把 $M$ 的每一个字符 $M[i]$ ...

A Friendly Introduction to Number Theory Chapter 12~15

素数,梅森素数,完全数和费马素数

Content Euclid’s theorem There are infinitely many prime numbers. Euclid’s proof 假设一个有限的素数集合 令 $A=p_1p_2p_3\ldots p_n+1$,由算术基本定理可知存在素数集合 使得 假如 $A$ 是素数那么证明完毕;假如 $A$ 是合数,可以断言至少存在一个素因子 $q...

A Friendly Introduction to Number Theory Chapter 10~11

欧拉函数(Euler's phi function)

Content Euler’s phi function 先引入记号 $\phi(m)$, $\phi(m)$ 表示在 $[1,m]$ 之间和 $m$ 互质的整数的数量,即模 $m$ 缩系的大小。 Parity 除了 $\phi(2)=1$ 是奇数以外,$\phi(m)$ 总是偶数。这是因为当 $m\gt2\text{, }\gcd{(a,m)}=1\implies \gcd{...

A Friendly Introduction to Number Theory Chapter 5~6

欧几里德算法(Euclidean algorithm)

Content Divisibility Suppose $m$ and $n$ are integers with $m\not=0$. We say that $m$ divides $n$ if $n$ is a multiple of $m$, that is, if there is an integer $k$ such that $n=mk$ Euclidean ...

A Friendly Introduction to Number Theory Chapter 8~9

同余(Congruences),快速幂取模和费马小定理(Fermat's little theorem)

Content Congruence 两个整数之间的模 $m$ 同余关系通过整除来定义: 即如果 $m$ 整除 $a$ 和 $b$,称 $a$ 和 $b$ 模 $m$ 同余。 Properties 整数之间的同余关系”$\equiv$”和实数上的相等关系”$=$”存在众多相似之处。除了作为一个等价关系所具备的自反性(reflexive)、对称性(symmetric)和传递性(t...

A Friendly Introduction to Number Theory Chapter 7

因式分解和算术基本定理

Content Euclid’s Lemma 假如素数 $p\mid {ab}$ ,那么 $p\mid a$ 或 $p\mid b$ (或 $p\mid a\text{ and }p\mid b$)。 Prime Divisibility Property 假如素数 $p$ 整除 $a_1a_2\ldots a_r$ ,那么 $p$ 至少整除 $a_1a_2\ldots a_r$ 的...