[WP] cryptohack general

全部代码可以在 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
2
3
p, q = 26513, 32321
u = inverse(p, q)
v = (1 - u * p) // q

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 所在的子域名