WeChall - CGX#16 - Big Endian
Challenge
CGX#16: Big Endian 给出一个随机生成并绑定当前 session 的 bit stream,例如:
1 | 001100101100101001110010001000101110001000110010010000100110001010100010101100100010001010000010 |
Solution
Recon: bit stream 长 96 bit,96 % 8 == 0,显然是 8-bit bytes。但直接按普通二进制(MSB-first)解码得到乱码。题名 "Big Endian" 暗示不是普通的字节序问题——这里不是多字节整数的 byte order,而是每个字节内部的 bit 权重反着读:最左 bit 是 LSB,最右 bit 是 MSB。
以第一个字节 00110010 为例,按本题权重计算:
1 | 0×1 + 0×2 + 1×4 + 1×8 + 0×16 + 0×32 + 1×64 + 0×128 = 76 = 'L' |
等价做法是先反转每个字节内部的 bit,再按普通二进制解释:
1 | 00110010 -> 01001100 -> 76 -> L |
Python:
1 | bits = '001100101100101001110010001000101110001000110010010000100110001010100010101100100010001010000010' |
本地验证示例输出为:
1 | LSNDGLBFEMDA |
只反转每个字节内部的 bit,不要反转字节顺序。实际提交前要解自己页面当前 session 的 bit stream。
session-bound: reverse bits per byte, answer varies