crypto-music is frequency(INS‘hAck CTF 2018)

一篇关于解密加密密钥的博客,涉及到音乐频率和RSA私钥的异或操作。作者通过分析私钥文件的格式,发现与RSA私钥头尾的相似性,并利用C大调音符频率对密钥进行解密,最终成功解码了加密的密钥文件。文章详细展示了整个解密过程,包括使用Python代码进行异或操作和将音符转换为二进制数据流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比较有趣的一题,记录下来。

Music is frequency

Passionated by the sound of a nursery rhyme, we decided to build a new way to send private messages.
Find a way to decrypt our rsa private key to get your reward.
Because we are pretty bad musicians, we have decided to not take into account any rhythm and to round all used number to the closest.

题目同时提供的一张 Frere Jacques 歌曲的乐谱
在这里插入图片描述

还有两个文件:

#flag.enc
vzs9XGL8QMJcc/OSpU5p/Iz5VpPZ9dHp6KUeaJXD7U3iQ/K9+BiT5ku/ZLGXua04uDiZUqyCVq6Qz8ovC8W7gQYI10vTuVbg3JX0848caJQYm7QVBleUJQP77AN6WH94CcWSfhgTQ0hVcHrx80aFcfwHYFLNA8kSJRVw44mwxcMiXu5CjqghFSf9lYBSbdRlV9zr9MHua5+xo5JdYQ0s+kUpgo+8pioOupBIWrPeKM6hkwseQEpM3zbmvjs6honNkZmtXKjHik6LBt/SoZJghIvxrQnUJ6RbvZbLugAzaTeMg3ROL/n8ArUvAGOcw0QzjyrJpSU9iPm2y+VPnrpTDA==
#privatekey.bin
00000000h: 1D 1D 1D 1D 1D 72 75 76 79 7F 10 63 62 70 10 61 ; .....ruvy..cbp.a
00000010h: 62 79 66 71 64 75 10 7A 74 69 1D 1D 1C 1D 1D 3A ; byfqdu.zti.....:
00000020h: 7D 79 79 75 5F 47 79 73 70 71 7A 72 70 61 75 71 ; }yyu_Gyspqzrpauq
00000030h: 4A 7D 1B 6A 07 60 60 61 5A 09 5C 07 52 5E 79 70 ; J}.j.``aZ.\.R^yp
00000040h: 64 49 47 42 5A 55 58 7F 01 66 5C 5B 55 75 52 6B ; dIGBZUX..f\[UuRk
00000050h: 07 59 53 71 03 69 61 7F 73 53 5F 46 43 5F 46 58 ; .YSq.ia.sS_FC_FX
00000060h: 3A 72 65 03 48 53 68 4B 7E 45 79 4B 42 52 00 05 ; :re.HShK~EyKBR..
00000070h: 64 7B 05 47 61 45 47 73 02 5C 69 64 5D 72 78 1E ; d{.GaEGs.\id]rx.
00000080h: 64 53 73 73 58 4A 04 74 7E 49 04 59 48 5D 52 1F ; dSssXJ.t~I.YH]R.
00000090h: 7D 79 7B 5D 69 62 49 5B 5D 5B 7E 66 06 72 7C 52 ; }y{]ibI[][~f.r|R
000000a0h: 65 3A 56 67 7B 72 47 79 7D 40 53 64 43 7D 06 5B ; e:Vg{rGy}@SdC}.[
000000b0h: 5E 62 52 55 02 5D 59 77 4B 43 58 7D 41 48 5E 06 ; ^bRU.]YwKCX}AH^.
000000c0h: 7F 66 03 02 53 5A 62 5F 48 45 59 54 59 7D 77 76 ; .f..SZb_HEYTY}wv
000000d0h: 67 76 73 5D 49 5C 7D 72 7A 77 05 46 41 41 06 5C ; gvs]I\}rzw.FAA.\
000000e0h: 08 09 3A 05 57 7D 56 40 47 04 47 67 5F 08 09 76 ; ..:.W}V@G.Gg_..v
000000f0h: 7D 61 65 7F 74 48 5C 5B 7E 09 7D 65 05 77 64 1A ; }ae.tH\[~.}e.wd.
00000100h: 47 47 75 66 59 04 70 00 46 7D 72 7A 64 48 7F 7B ; GGufY.p.F}rzdH.{
00000110h: 66 48 08 6A 76 01 5E 1E 07 7C 65 67 49 58 7E 40 ; fH.jv.^..|egIX~@
00000120h: 03 73 58 3A 51 59 61 00 62 01 74 50 43 44 75 59 ; .sX:QYa.b.tPCDuY
00000130h: 66 00 49 59 68 04 7D 7D 7E 4B 03 7B 09 02 53 59 ; f.IYh.}}~K.{..SY
00000140h: 5D 46 78 05 5A 68 40 7D 74 65 7E 01 74 7C 52 41 ; ]Fx.Zh@}te~.t|RA
00000150h: 64 73 53 01 01 45 65 67 05 04 53 77 4B 01 42 59 ; dsS..Eeg..SwK.BY
00000160h: 76 5E 40 61 3A 07 7F 61 69 6A 54 07 72 5F 47 73 ; v^@a:..aijT.r_Gs
00000170h: 49 59 74 52 47 49 45 7C 09 07 5E 7B 52 1F 05 61 ; IYtRGIE|..^{R..a
00000180h: 74 74 62 45 59 77 5F 62 43 54 60 78 75 71 61 71 ; ttbEYw_bCT`xuqaq
00000190h: 72 71 5F 79 72 71 73 5C 65 50 71 7A 74 72 60 41 ; rq_yrqs\ePqztr`A
000001a0h: 1F 71 09 03 5C 3A 51 7B 49 40 7D 57 5D 46 66 60 ; .q..\:Q{I@}W]Ff`
000001b0h: 64 5A 5A 67 05 66 59 76 07 58 1B 5A 5E 1A 58 57 ; dZZg.fYv.X.Z^.XW
000001c0h: 40 78 03 45 72 78 47 04 5F 41 76 52 73 55 56 4B ; @x.ErxG._AvRsUVK
000001d0h: 6A 64 78 5B 5B 77 5C 7D 5F 70 49 72 72 1A 02 5D ; jdx[[w\}_pIrr..]
000001e0h: 65 67 57 08 43 49 3A 09 75 75 7F 64 45 45 40 5E ; egW.CI:.uu.dEE@^
000001f0h: 47 09 65 66 43 56 72 1A 68 68 65 76 75 52 49 7B ; G.efCVr.hhevuRI{
00000200h: 66 71 46 60 08 77 59 56 72 52 5F 57 68 73 71 1E ; fqF`.wYVrR_Whsq.
00000210h: 7A 60 58 62 63 7F 75 77 02 77 73 00 45 76 63 66 ; z`Xbc.uw.ws.Evcf
00000220h: 73 07 05 08 47 76 55 3B 03 05 5D 42 61 55 47 53 ; s...GvU;..]BaUGS
00000230h: 55 52 42 7B 46 75 02 60 57 49 07 02 40 6B 4A 77 ; URB{Fu.`WI..@kJw
00000240h: 05 63 75 66 74 5C 45 09 61 4B 65 5E 65 5E 01 52 ; .cuft\E.aKe^e^.R
00000250h: 47 60 77 05 76 51 48 01 4B 77 79 64 45 45 5E 48 ; G`w.vQH.KwydEE^H
00000260h: 46 51 57 71 06 1B 03 55 3B 59 1A 7B 68 47 69 1F ; FQWq...U;Y.{hGi.
00000270h: 7E 41 7F 7B 51 05 1F 7F 41 05 1F 68 00 70 4A 05 ; ~A.{Q...A..h.pJ.
00000280h: 78 73 58 58 54 73 62 5C 7B 5F 55 64 76 05 48 08 ; xsXXTsb\{_Udv.H.
00000290h: 5B 47 77 56 67 59 75 61 60 59 67 5C 7F 7A 50 6A ; [GwVgYua`Yg\.zPj
000002a0h: 41 5B 4A 7B 78 6A 02 47 7B 3A 5E 52 45 04 07 42 ; A[J{xj.G{:^RE..B
000002b0h: 66 40 41 62 58 02 54 47 42 06 50 09 44 71 04 49 ; f@AbX.TGB.P.Dq.I
000002c0h: 75 01 6A 7E 42 61 74 57 5B 68 06 73 49 5E 66 57 ; u.j~BatW[h.sI^fW
000002d0h: 07 75 7A 45 7D 1B 66 54 61 1F 02 6A 7E 02 70 1E ; .uzE}.fTa..j~.p.
000002e0h: 79 41 03 69 7E 7B 04 6A 09 45 3A 60 41 76 7D 49 ; yA.i~{.j.E:`Av}I
000002f0h: 04 75 73 57 69 75 70 4A 01 52 5A 56 7E 58 75 65 ; .usWiupJ.RZV~Xue
00000300h: 01 06 5D 51 08 77 4B 7D 1B 5F 53 79 63 5C 45 08 ; ..]Q.wK}._Syc\E.
00000310h: 58 7F 7B 40 46 55 7A 08 76 09 5F 7F 40 60 04 6A ; X.{@FUz.v._.@`.j
00000320h: 59 61 78 7E 68 64 74 55 46 5A 54 3B 54 69 79 7C ; Yax~hdtUFZT;Tiy|
00000330h: 5F 06 63 4A 7A 73 48 01 47 02 49 44 70 72 03 1A ; _.cJzsH.G.IDpr..
00000340h: 59 72 04 7A 7C 46 08 48 08 67 56 55 5F 68 74 5E ; Yr.z|F.H.gVU_ht^
00000350h: 61 67 59 75 59 64 63 79 48 47 62 67 72 40 7D 7D ; agYuYdcyHGbgr@}}
00000360h: 54 5B 7E 62 62 73 46 44 46 43 46 64 3B 08 47 7C ; T[~bbsFDFCFd;.G|
00000370h: 59 68 51 09 7B 66 69 41 5C 5B 55 09 66 61 4B 52 ; YhQ.{fiA\[U.faKR
00000380h: 57 67 5D 75 74 52 59 02 44 59 42 05 05 71 4A 51 ; Wg]utRY.DYB..qJQ
00000390h: 77 58 60 04 59 71 7C 5B 53 66 78 65 62 54 4A 74 ; wX`.Yq|[SfxebTJt
000003a0h: 49 45 7A 65 73 57 69 74 71 1E 7F 73 1A 3B 02 08 ; IEzesWitq..s.;..
000003b0h: 56 40 52 71 76 63 02 7E 7D 78 78 60 7F 03 65 5E ; V@Rqvc.~}xx`..e^
000003c0h: 67 60 49 40 71 7F 48 67 6A 01 73 5B 03 56 48 57 ; g`I@q.Hgj.s[.VHW
000003d0h: 56 67 7E 53 1F 62 5D 79 53 50 46 07 76 05 78 78 ; Vg~S.b]ySPF.v.xx
000003e0h: 56 71 48 4A 02 67 06 78 72 7E 7D 65 7D 05 3B 55 ; VqHJ.g.xr~}e}.;U
000003f0h: 62 1F 60 55 68 64 53 73 43 61 7F 5B 5B 73 44 1A ; b.`UhdSsCa.[[sD.
00000400h: 56 6A 6A 78 75 7E 52 58 52 5C 05 53 64 04 60 5B ; Vjjxu~RXR\.Sd.`[
00000410h: 64 79 73 77 44 56 76 5F 5E 44 7F 66 5E 61 62 49 ; dyswDVv_^D.f^abI
00000420h: 7C 43 63 61 7E 55 56 5B 09 04 4B 4B 57 63 03 3A ; |Cca~UV[..KKWc.:
00000430h: 53 6A 04 45 61 5D 64 55 69 74 58 68 60 52 7D 41 ; Sj.Ea]dUitXh`R}A
00000440h: 79 77 47 5A 7B 71 62 6B 53 52 60 06 52 67 02 08 ; ywGZ{qbkSR`.Rg..
00000450h: 71 76 49 7D 74 02 75 72 56 69 71 61 45 76 63 78 ; qvI}t.urViqaEvcx
00000460h: 5D 06 07 61 5C 59 1B 62 61 45 5B 63 7B 55 44 55 ; ]..a\Y.baE[c{UDU
00000470h: 3A 60 00 04 08 40 62 6B 5D 5F 65 43 56 73 40 62 ; :`...@bk]_eCVs@b
00000480h: 67 00 62 65 5D 48 69 73 61 7C 5B 5A 63 60 57 67 ; g.be]Hisa|[Zc`Wg
00000490h: 45 58 77 45 42 5F 03 5D 7D 64 7D 5C 68 54 5D 61 ; EXwEB_.]}d}\hT]a
000004a0h: 7F 52 06 69 49 75 65 5C 43 7C 1B 58 54 7B 40 70 ; .R.iIue\C|.XT{@p
000004b0h: 5B 3A 4A 48 5B 60 7B 1E 48 72 5A 67 65 7C 43 41 ; [:JH[`{.HrZge|CA
000004c0h: 7F 07 09 5C 55 45 74 02 04 52 5E 06 7B 60 4B 7A ; ...\UEt..R^.{`Kz
000004d0h: 47 5D 01 41 1F 7F 79 78 76 71 43 47 69 61 7A 6B ; G].A..yxvqCGiazk
000004e0h: 7C 43 09 01 07 52 07 64 64 09 59 03 69 7D 54 63 ; |C...R.dd.Y.i}Tc
000004f0h: 74 7B 3A 7D 68 40 5A 1F 7A 62 71 45 5C 61 76 61 ; t{:}h@Z.zbqE\ava
00000500h: 77 7D 04 49 6A 03 42 57 61 7B 72 57 60 74 78 53 ; w}.Ij.BWa{rW`txS
00000510h: 79 5F 1F 6A 5E 06 53 66 44 60 02 70 7B 7A 02 5F ; y_.j^.SfD`.p{z._
00000520h: 60 69 59 53 02 00 68 7A 77 48 09 43 52 46 5B 1F ; `iYS..hzwH.CRF[.
00000530h: 56 5C 06 3A 64 42 54 50 73 62 1F 57 61 40 09 67 ; V\.:dBTPsb.Wa@.g
00000540h: 41 64 73 7B 54 76 78 5E 02 74 5E 7F 6B 4A 41 79 ; Ads{Tvx^.t^.kJAy
00000550h: 64 74 52 42 65 68 5E 69 5B 43 66 09 7A 48 07 70 ; dtRBeh^i[Cf.zH.p
00000560h: 54 57 61 75 54 7F 42 5C 49 5F 75 03 49 7A 42 59 ; TWauT.B\I_u.IzBY
00000570h: 09 5B 40 04 3A 05 02 65 59 43 05 5B 49 00 46 59 ; .[@.:..eYC.[I.FY
00000580h: 47 06 05 6A 79 02 68 63 53 7C 5A 45 7A 7B 73 03 ; G..jy.hcS|ZEz{s.
00000590h: 7A 76 73 54 09 72 44 5A 01 62 75 41 41 52 79 00 ; zvsT.rDZ.buAARy.
000005a0h: 06 1B 54 41 64 01 47 77 06 62 48 70 00 50 58 53 ; ..TAd.Gw.bHp.PXS
000005b0h: 66 61 77 01 03 3A 6A 44 7B 56 5F 61 7B 73 56 71 ; faw..:jD{V_a{sVq
000005c0h: 48 49 79 00 66 58 43 5D 56 02 5F 76 40 01 49 57 ; HIy.fXC]V._v@.IW
000005d0h: 09 7E 57 49 03 05 46 08 55 7B 03 50 5A 77 41 5C ; .~WI..F.U{.PZwA\
000005e0h: 79 63 1F 5C 02 6A 40 61 79 62 42 40 79 72 69 7F ; yc.\.j@aybB@yri.
000005f0h: 48 63 51 53 65 5F 3A 47 56 60 42 7F 05 50 56 59 ; HcQSe_:GV`B..PVY
00000600h: 04 71 60 1F 5E 71 69 75 5A 5A 5D 06 77 77 52 41 ; .q`.^qiuZZ].wwRA
00000610h: 01 72 05 40 02 77 72 4B 48 68 5C 71 7B 44 7C 40 ; .r.@.wrKHh\q{D|@
00000620h: 54 55 71 63 1F 05 40 67 41 45 42 1E 7D 56 73 7F ; TUqc..@gAEB.}Vs.
00000630h: 73 74 06 56 55 02 45 3B 53 09 76 03 06 5C 41 55 ; st.VU.E;S.v..\AU
00000640h: 75 1B 4A 66 44 59 7B 61 5F 5D 5B 79 5E 40 5B 58 ; u.JfDY{a_][y^@[X
00000650h: 1B 01 40 59 4A 62 07 42 54 54 02 65 59 5C 51 5F ; ..@YJb.BTT.eY\Q_
00000660h: 76 69 07 4A 62 61 5F 66 6B 79 52 41 3B 1D 1D 1D ; vi.Jba_fkyRA;...
00000670h: 1D 1D 75 7E 74 10 62 62 71 11 60 63 78 67 71 65 ; ..u~t.bbq.`cxgqe
00000680h: 75 10 7B 75 69 1D 1D 1C 1C 1D                   ; u.{ui.....

比较明显的就是flag.encprivatekey.bin对应密文和加密密钥,要想办法进行解密。
尝试用歌谱中每个音符对应的频率值对密钥进行解密但好像没有办法。

观察私钥文件中开头和结尾的内容,我们注意到密钥以 1d 1d 1d 1d 1d - 1d 1d 1c 1d 1d 开头并以 1d 1d 1d 1d 1d - 1d 1d 1c 1c 1d结尾。回忆普通私钥开头格式 -----BEGIN RSA PRIVATE KEY-----,与之有很高相似度。另外经过比对发现1d之间的字节数与BEGIN RSA PRIVATE KEY一致。

把加密过的密钥头和常见密钥头异或一下,得到一个串0000000101011101000000011000100

大概可以看出七个0是分隔符的情况下,第一个有效数据是 101011101 转化为十进制是 349,查一下C大调音符频率值

C - do - 261.6HZ
D - re - 293.6HZ
E - mi - 329.6HZ
F - fa - 349.2HZ
G - sol- 392HZ
A - la - 440HZ
B - si - 493.8HZ

这正是乐谱中第一个音符F的频率。

可以利用这个规律反解一下密钥。

from Crypto.Util import strxor
def xor(a,b):
    return strxor.strxor(a,b)
begin_c = b'\x1D\x1D\x1D\x1D\x1D\x72\x75\x76\x79\x7F\x10\x63\x62\x70\x10\x61\x62\x79\x66\x71\x64\x75\x10\x7A\x74\x69\x1D\x1D\x1C\x1D\x1D'
end_c = b'\x1D\x1D\x1D\x1D\x1D\x75\x7E\x74\x10\x62\x62\x71\x11\x60\x63\x78\x67\x71\x65\x75\x10\x7B\x75\x69\x1D\x1D\x1C\x1C\x1D'
begin_p = b'-----BEGIN RSA PRIVATE KEY-----'
end_p = b'-----END RSA PRIVATE KEY-----'
print(xor(begin_c, begin_p))
#print(xor(end_c, end_p))
def note2bin(freq):
    return format(freq, '016b')
def repeat(s, wanted):
    return (s * (wanted//len(s) + 1))[:wanted]
pk = open("privatekey.bin", "rb").read()
keystream = ""
notes = [349,392,440,349,349,392,440,349,440,466,523,440,466,523,523,587,523,466,440,349,523,587,523,466,440,349,349,262,349,349,262,349]
for n in notes:
    keystream += note2bin(n)
keystream = repeat(keystream, len(pk)).encode()
key = xor(pk, keystream)
with open("privatekey.pem", "w") as f:
    f.write(key.decode())

使用简单解密命令。

$ base64 -d flag.enc > flag.bin
$ openssl rsautl -decrypt -inkey privatekey.pem -in flag.bin -out decrypted.txt -raw
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值