文件分析
第一次遇到這種題,不過看到題目知道這是一個rsa解密題。
公鑰n = p * q,其中p和q是兩個大素數
e是隨機選擇的數,作為公鑰
d是跟e有關的一個數,滿足條件式:ed=1(mod phi(n))
phi(n)是歐拉函數,phi(n)=(p-1)(q-1)
轉自:https://blog.csdn.net/kevin66654/article/details/54087647
pub.key是公鑰,flag.enc是rsa加密后的文件,因此我們只要通過公鑰文件解析出n,e,p,q,d,再利用腳本解密rsa加密文件。
公鑰處理
提取公鑰
IDA打開pub.key后,轉換里面的十六進制為字符串,提取出公鑰。
-----BEGIN PUBLIC KEY----- MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+ /AvKr1rzQczdAgMBAAE= -----END PUBLIC KEY-----
公鑰解析(提取e,n)
在http://tool.chacuo.net/cryptrsakeyparse對公鑰進行解析
公鑰指數及模數信息:
key長度: | 256 |
模數: | C0332C5C64AE47182F6C1C876D42336910545A58F7EEFEFC0BCAAF5AF341CCDD |
指數: | 65537 (0x10001) |
獲取到
e = 65537
n=86934482296048119190666062003494800588905656017203025617216654058378322103517(模數轉換為十進制)
公鑰解析(提取p,q)
使用yahu或者http://www.factordb.com/index.php?query=86934482296048119190666062003494800588905656017203025617216654058378322103517 通過n解析p,q
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
腳本解密
import gmpy2 import rsa e = 65537 n = 86934482296048119190666062003494800588905656017203025617216654058378322103517 p = 285960468890451637935629440372639283459 q = 304008741604601924494328155975272418463 phin = (q-1)*(p-1) d = gmpy2.invert(e, phin) key = rsa.PrivateKey(n, e, int(d), p, q) with open("C:\\Users\\10245\\Desktop\\output\\flag.enc", "rb+") as f: f = f.read() print(rsa.decrypt(f, key))
get flag!
flag{decrypt_256}
想要詳細了解CTF中的rsa,可以看看https://err0rzz.github.io/2017/11/14/CTF%E4%B8%ADRSA%E5%A5%97%E8%B7%AF/