跳转至

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 常见有两种输入路径:

  1. 直接给公钥文件(--publickey),让工具尝试攻击并恢复私钥
  2. 已知 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:确认参数

附件:下载附件 · 仓库位置,其中提供:

  • N
  • e = 65537
  • c

并且可从 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-8HEXINT 三个字段
  • 自动攻击跑太久时,优先用 --attack 指定最可能命中的模式

评论