某信2021某地区决赛

记点东西……
太长不看:rar5真加密破解 = rar2john + hashcat

三行情诗

提示三行情诗但是图片很明显是两行,根据图片宽高搜索对应hex,进行一个高度的改:

同时由于套了010的jpg模板,看到末尾有rar文件,binwalk -e分离得到2EDC.rar
更改图片高度后看到提示

比赛的时候紧张地进行了一个百度并焦虑地强行写了一下,写得很烂,烂到看不下去的程度(

import itertools

l='qazwsxQAZWSX'
l=list(l)
for a,b,c,d,e,f in itertools.product(l, repeat=6):
    a=f"{a}{b}{c}{d}{e}{f}"
    with open('1.txt','a') as f:
        f.write(a+'\n')

根本没做条件限制,因而开始了缓慢而痛苦的生成(……)期间去搞别的题了,回来APCHPR撸了一把报错,发现是rar5,又开始四处找工具,找到一篇:https://www.freesion.com/article/15821308867/
遂打开kali,这时小破笔记本因为还同时开着IDA浏览器spyder等等乱七八糟的东西,已经进入卡爆状态(
拖进去执行

rar2john 2EDC.rar >hash.txt   

删掉不用的部分,留下

执行

hashcat -a 0 -m 13000 hash.txt 1.txt

直接黑屏(笑)后来比赛结束第二天复现了下,跑出来了……

$rar5$16$fdedaa2ca61fc54faaeac72a566a79b0$15$b848f1949dfce38205ee4acbabeb1b49$8$3c950745a82c85b2:QzaSXw

解压即得flag。

古典密码

一个真的很好用且啥都有的解密网站:
http://rumkin.com/tools/cipher/playfair.php

rrrsssaaa

没做出来留个档,先放题目:

p = getPrime(512)
q = getPrime(128)
r = getPrime(512)
a = p**3 + q**4
n = p * q * r
e = 65537
m = bytes_to_long(flag)
c = powmod(m,e,n)

print('a =', a)
print('n =', n)
print('c =', c)

'''
a = 1001757897913772351510420195662626456337522550684606727483773096673299029784598925879489541145425035208954548434364407129536623872359866140502945055841821765538135618785958230881698432164666106480484384998915283051445946164568339012311071022667483689786104241205203770248137327154122271358173278768580995401804353335810303663245624828137303106291342454008598042561788843169528260839797410662782024780465758566251328065946252974178694612662193108827812380093012592
n = 19743856964263732842999962921764407899550835757434895392940479421960735302959163991849377985049404173836251900687827441599500422841626517558622567745437335569126719161072741233680254267603047267283814233895186061759120509099394028737117210315668037567644106922178370110286156290354552013641623466808054072066874721501635305497521532247446583415341
c = 11573369450591319755076158585550356804136715495771905025393681593171072453674223539740220735995000501270745453812328856003963738281166754397539243769043057759237596024541470868109828449256053991918612982581009998827964614610819962346527488888094333196535012014776795315145414671509148454534127080694322513052946539505422338224596999797852421340273
'''

队友:rsa能做吗
我:我看看……救命,我一天中不能够看太多的数学题
↑就是这样思路完全跑偏,试图用p**3 + q**4p * q * r凑出p+qpq,果然到最后都没做出来(。后来比赛结束问了下以前搞密码的队友,答曰试试gmpy2的iroot……
我:我不理解,但大受震撼

p = gmpy2.iroot(a,3)[0]
q = gmpy2.iroot(a-p**3,4)[0]
r = n//p//q
phi = (p-1)*(q-1)*(r-1)
d = gmpy2.invert(e, phi)
m = gmpy2.powmod(c, d, n)

SETCTF - mostly common

20211108:懒得新开一篇,又是rsa,堆一起好了

from Crypto.Util.number import bytes_to_long, getPrime

f = open('flag.txt', 'rb')
flag = f.read()
f.close()
m = bytes_to_long(flag)
p = getPrime(512)
q = getPrime(512)
n = p * q
e1 = 65536
e2 = 270270
c1 = pow(m, e1, n)
c2 = pow(m, e2, n)
f = open('message.txt', 'w')
f.write('n=' + str(n) + '\n')
f.write('c1=' + str(c1) + '\n')
f.write('c2=' + str(c2) + '\n')
f.close()
n=122031686138696619599914690767764286094562842112088225311503826014006886039069083192974599712685027825111684852235230039182216245029714786480541087105081895339251403738703369399551593882931896392500832061070414483233029067117410952499655482160104027730462740497347212752269589526267504100262707367020244613503
c1=39449016403735405892343507200740098477581039605979603484774347714381635211925585924812727991400278031892391996192354880233130336052873275920425836986816735715003772614138146640312241166362203750473990403841789871473337067450727600486330723461100602952736232306602481565348834811292749547240619400084712149673
c2=43941404835820273964142098782061043522125350280729366116311943171108689108114444447295511969090107129530187119024651382804933594308335681000311125969011096172605146903018110328309963467134604392943061014968838406604211996322468276744714063735786505249416708394394169324315945145477883438003569372460172268277

显然是共模攻击的简单变种,gcd(65536,270270)==2,所以计算出的结果为m^2,用iroot开方即可得到m

import gmpy2
import binascii

n = 122031686138696619599914690767764286094562842112088225311503826014006886039069083192974599712685027825111684852235230039182216245029714786480541087105081895339251403738703369399551593882931896392500832061070414483233029067117410952499655482160104027730462740497347212752269589526267504100262707367020244613503

e1 = 65536//2
e2 = 270270//2

c1=39449016403735405892343507200740098477581039605979603484774347714381635211925585924812727991400278031892391996192354880233130336052873275920425836986816735715003772614138146640312241166362203750473990403841789871473337067450727600486330723461100602952736232306602481565348834811292749547240619400084712149673
c2=43941404835820273964142098782061043522125350280729366116311943171108689108114444447295511969090107129530187119024651382804933594308335681000311125969011096172605146903018110328309963467134604392943061014968838406604211996322468276744714063735786505249416708394394169324315945145477883438003569372460172268277

s = gmpy2.gcdext(e1,e2)
m1 = gmpy2.powmod(c1,s[1],n)
m2 = gmpy2.powmod(c2,s[2],n)

m = (m1*m2)%n
m = gmpy2.iroot(m,2)[0]
print(binascii.unhexlify(hex(m)[2:]))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 取证类题目 在CTF中,取证赛题包括了文件分析、隐写、内存镜像分析和流量抓包分析。任何要求检查一个静态数据文件(与...
    查无此人asdasd阅读 5,239评论 0 2
  • 目录 光照相关基本知识 实践 资料 收获 效果如下: 一、光照相关基本知识 经典光照模型通过单独计算光源成分得到综...
    yabin小站阅读 916评论 0 0
  • 首先:学习安全技术有一段时间了,从对它的热爱开始,到不断坚持,到现在有一点腻了,感觉自己学不动了。这一路走来,太多...
    Black_Sun阅读 6,177评论 1 7
  • 问题描述 Android从相册中选择照片时选完后显示不出来,打断点发现srcPath图片路径正确,bitmap竟然...
    合拍v阅读 10,413评论 1 3
  • 1.BUUCTF刷题-[GXYCTF2019]Ping Ping Ping 参考博客[https://blog.c...
    狐萝卜CarroT阅读 2,578评论 0 0