RsaCtfTool 上手使用指南¶
这份文档给出一条可直接落地的流程:安装 RsaCtfTool、准备参数、执行解密,并用仓库内 RSA 题做实战示例。
1. 安装¶
python3 -m pip install --user "git+https://github.com/RsaCtfTool/RsaCtfTool.git"
验证安装:
RsaCtfTool -h
若提示 command not found,可先定位 user base 并加入 PATH:
python3 -m site --user-base
# 例如输出 /home/user/.local,则可执行:
export PATH="$(python3 -m site --user-base)/bin:$PATH"
2. 常用输入方式¶
RsaCtfTool 常见有两种输入路径:
- 直接给公钥文件(
--publickey),让工具尝试攻击并恢复私钥 - 已知
p/q/e时直接传参,配合--decrypt快速还原明文
如果题目只给 n/e/c 且需要先做整数分解,建议先使用 yafu 分解 n,再把 p/q 交给 RsaCtfTool。
# 先分解 n,拿到 p/q
yafu "factor(<n>)"
# 再交给 RsaCtfTool 解密
RsaCtfTool -p <p> -q <q> -e <e> --decrypt <cipher_int>
yafu 详细步骤见:yafu 上手使用指南
本仓库中 CPCTF 1、0、7 这题适合第二种方式:先根据结构拿到 p/q,再交给工具做解密。
3. 实战:CPCTF - 1、0、7¶
参考 writeup:CPCTF 1、0、7 题解
Step 1:确认参数¶
Ne = 65537c
并且可从 N 的数字模式(前缀连续 1、中间连续 0、后缀连续 7)推出:
\[
p = \frac{10^{317} - 1}{9},\qquad q = 10^{412} + 7
\]
上述推导细节见对应 writeup 的“关键突破点一”部分。
Step 2:用 RsaCtfTool 解密¶
read -r P Q < <(python3 - <<'PY'
# 本题中:p 是由 k 个 1 构成的 repunit,q = 10^(t+k) + 7
k = 317 # 重复 '1' 的长度(用于构造 p)
t = 95 # 中间 '0' 的长度(用于构造 q 的位移)
p = (10**k - 1) // 9
q = 10**(t + k) + 7
print(p, q)
PY
)
RsaCtfTool \
-p "$P" \
-q "$Q" \
-e 65537 \
--decrypt 24843637357401882323446973756028112485787496266605121365114610100704976130139741775294278368083885062198910614947919701406960107347354136102083123762522563111468269091870174521712246171376836840432255040039220296948193266921702699341919800731671378599220251932387731543800016339125706640050863673217753733950003925236014913643596976803633793469056544830856356906877796834342590774214214984186572346186348406049348500029472048880777893019592044554103952675917537653629499365661200893824071688347597515583518961750064206790440539820055665939394772896875086157476469036827442358013160609933570806379028553689444972004391787853021463769839240033616969091368964549902197048529690707775841641688773013075774663922475980270327652933542
Step 3:读取结果¶
重点看输出里的 utf-8 字段,即:
CPCTF{N_1s_34sy_70_bRe4k_873b4982a}
4. 常见命令速查¶
# 查看帮助
RsaCtfTool -h
# 对公钥做自动攻击(常见入口)
RsaCtfTool --publickey ./pub.pem --private
# 指定攻击方式(示例:hastads)
RsaCtfTool --publickey "./keys/*.pem" --attack hastads --private
# 已知 p/q/e 时直接解密
RsaCtfTool -p <p> -q <q> -e <e> --decrypt <cipher_int>
# 只知道 n 时,先用 yafu 分解
yafu "factor(<N>)"
5. 使用建议¶
- 先判断题型:如果是结构化弱参数,先做人工分析再喂给工具
- 输出优先看:
utf-8、HEX、INT三个字段 - 自动攻击跑太久时,优先用
--attack指定最可能命中的模式