异或夯基
异或夯基
Create by Gemini
1. 异或的基本性质
首先,我们要掌握异或运算的三个数学基石:
-
归零律:
-
单位律:
-
结合律/交换律:
2. 形式化推导
假设我们有一个原始数据(明文)M 和一个密钥 K,加密过程是:
我们要证明: 已知 C 和 K,可以还原出 M。
推导步骤:
-
在等式两边同时异或 K:
-
利用结合律,改变右边的运算顺序:
-
利用归零律,
-
利用单位律,
结论: 只需要把密文和密钥再异或一次,就得到了明文。
3. 为什么这在逆向题目中很重要?
回到你给出的那道题,它的加密逻辑是:
1 | __b[i] = __b[i] ^ __b[i-1] |
这意味着当前的字符是靠“前一个字符”来加密的。在解密时:
-
已知
__b[0]是确定的(因为它没参与循环)。 -
第二个字符
__b[1]的加密公式是: -
根据我们上面的推导,逆运算就是:
这就解释了为什么你只需要用 global 数组中相邻的两个字节互相异或,就能把 Flag 还原出来。
4. 直观理解
你可以把异或看作是一个“翻转开关”。
- 如果 K 的某一位是 1,它就会把 M 对应的那一位翻转(0变1,1变0)。
- 如果你再用 K 异或一次(再按一次开关),那一层翻转就又变回去了。
这就是为什么它是“自反”的。
- Title: 异或夯基
- Author: Realknow
- Created at : 2026-02-23 11:19:24
- Updated at : 2026-02-23 11:51:54
- Link: https://realknowtech.github.io/2026/02/23/异或夯基/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments