当前位置:网站首页>2022DASCTF Apr X FATE 防疫挑战赛 CRYPTO easy_real

2022DASCTF Apr X FATE 防疫挑战赛 CRYPTO easy_real

2022-04-23 20:21:00 雨后初霁&

逆向一道都不会,寄了。只做了密码的签到题

题目描述

import random
import hashlib

flag = 'xxxxxxxxxxxxxxxxxxxx'
key = random.randint(1,10)
for i in range(len(flag)):
    crypto += chr(ord(flag[i])^key)
m = crypto的ascii十六进制
e = random.randint(1,100)
print(hashlib.md5(e))
p = 64310413306776406422334034047152581900365687374336418863191177338901198608319
q = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
n = p*q
c = pow(m,e,n)
print(n)
print(c)
#37693cfc748049e45d87b8c7d8b9aacd
#4197356622576696564490569060686240088884187113566430134461945130770906825187894394672841467350797015940721560434743086405821584185286177962353341322088523
#3298176862697175389935722420143867000970906723110625484802850810634814647827572034913391972640399446415991848730984820839735665233943600223288991148186397

从代码中不难看出

#37693cfc748049e45d87b8c7d8b9aacd 对应相应的e的md5值

到相应的网站解密

e=23

其他的分别定义

n=4197356622576696564490569060686240088884187113566430134461945130770906825187894394672841467350797015940721560434743086405821584185286177962353341322088523
c=3298176862697175389935722420143867000970906723110625484802850810634814647827572034913391972640399446415991848730984820839735665233943600223288991148186397
p = 64310413306776406422334034047152581900365687374336418863191177338901198608319

根据代码,我们不难看出,这是典型的rsa加密

直接求出明文的数值

from Crypto.Util.number import inverse,long_to_bytes

n=4197356622576696564490569060686240088884187113566430134461945130770906825187894394672841467350797015940721560434743086405821584185286177962353341322088523
c=3298176862697175389935722420143867000970906723110625484802850810634814647827572034913391972640399446415991848730984820839735665233943600223288991148186397
p = 64310413306776406422334034047152581900365687374336418863191177338901198608319
q=n//p
e=23
phi=(q-1)*(p-1)
d=inverse(e,phi)
m = pow(c, d, n)  
print(m);
//m=2976168736142380455841784134407431434784057911773423743751382131043957
//m="ndios_;9kgE;WK8e;W?gWn<\;k|nu"

我们接着观察

key是一个随机值

但是有范围的

我们直接暴力枚举

import random
import hashlib
import math
from Crypto.Util.number import inverse,long_to_bytes

n=4197356622576696564490569060686240088884187113566430134461945130770906825187894394672841467350797015940721560434743086405821584185286177962353341322088523
c=3298176862697175389935722420143867000970906723110625484802850810634814647827572034913391972640399446415991848730984820839735665233943600223288991148186397
p = 64310413306776406422334034047152581900365687374336418863191177338901198608319
q=n//p
e=23
phi=(q-1)*(p-1)
d=inverse(e,phi)
m = pow(c, d, n)  
print(m);
m="ndios_;9kgE;WK8e;W?gWn<\;k|nu"
for key in range(11):
  flag=""
  for i in range(len(m)):
    flag+=chr(ord(m[i])^key)
  print(flag)

直接出flag

打了这么多比赛,还是菜。

很多题目赛后根本没复现,真是失败的菜鸡,呜呜呜。

校内可以交流的师傅太少,听说最近联合战队在招新,准备去试试。

版权声明
本文为[雨后初霁&]所创,转载请带上原文链接,感谢
https://blog.csdn.net/a257131460266666/article/details/124368463