全部代码可以在 cryptohack/general.py 中找到
目录传送门:cryptohack 练习学习汇总(writeup index)
ENCODING
ASCII
用 chr 可以转换一个 ASCII 码为字符
Hex
关键函数:bytes.fromhex(*).decode()
Base64
关键函数:base64.b64encode(*)
相关库:import base64
Bytes and Big Integers
关键函数:long_to_bytes
相关库:from Crypto.Util.number import *
Encoding Challenge
rot13
解码方法:codecs.decode(data['encoded'], 'rot_13')
100 次解密,使用 pwnlib.remote 连接远程
循环过程使用 tqdm 进度条展示进度
JSON 解析:json.loads(*)
XOR
XOR Starter
pwnlib 的 xor 函数真好用xor(b"label", 13)
XOR Properties
选择 FLAG ^ KEY1 ^ KEY3 ^ KEY2
, KEY1
, KEY2 ^ KEY3
进行异或即得到 flag
Favourite byte
pwnlib 的 xor 函数真好用
枚举秘钥字节,用 xor(data, hidden).startswith(b'crypto{')
来判断是否正确
You either know, XOR you don’t
已知 flag 中的字符:crypto{}
用这 8 位和密文异或,即得到 flag(再次:pwnlib 的 xor 函数真好用)
然后用 xor 函数异或回来即可
Lemur XOR
np.array 可以执行异或,且可以与 PIL.Image 自如的相互转换。异或两张图片并展示结果即得到 flag
MATHEMATICS
Greatest Common Divisor
关键函数:GCD
相关库:from Crypto.Util.number import *
Extended GCD
Crypto.Util.number
库中的 inverse
函数使用的便是 exgcd,所以我们可以利用其结果(u = inverse(p, q)
)
1 | p, q = 26513, 32321 |
Modular Arithmetic 1
直接求模即可
Modular Arithmetic 2
关键函数:pow
相关库:from Crypto.Util.number import *
Modular Inverting
关键函数:inverse
相关库:from Crypto.Util.number import *
DATA FORMATS
Privacy-Enhanced Mail?
关键函数:RSA.importKey
相关库:from Crypto.PublicKey import RSA
这函数真好用
CERTainly not
关键函数:RSA.importKey
相关库:from Crypto.PublicKey import RSA
(再次)这函数真好用
SSH Keys
关键函数:RSA.importKey
相关库:from Crypto.PublicKey import RSA
(第三次)这函数真好用
Transparency
这题属实有点懵,于是去网上查了查,一种说法是使用 Maltego 分析网站域名。可惜我比较固执(bushi),不太想装新的软件
所以掏出 fofa
高级用户可以使用高级查询语句1
host*="*transparency*.cryptohack.org"
像我这种卑微的普通用户就只能获得所有子域名然后翻找1
host="cryptohack.org"
好在查出来只有 3 页,翻起来比较快,第 2 页就能找到 flag 所在的子域名