0xGame2021-第三周

0xGame第三周wp

♂起来了

 

Crypto 签到

挺简单的数学题目

pow(5m,e,n)=pow(5,e,n) * pow(m,e,n)=(pow(5,e,n) * c)%n

然后就好了呀

e=10007
c=1285901843278876234855607310979623200548989981628646673003523113580651626686523566799395153922258813222744927018205882436414589516795415393990321785993777190284046937462277341231780571523062023964463963139910673601962881978696384360480028132774373962893042697866284303407898274683337284548529324550392212212259945699167254341062208031468355814520907121576009140399280898693924706067921614961798886587174234822238887374399666546113213239071736098162263227821798099750616137755055435397986788792824117529508255014392344357337010003489080209442530630893119917536518243474797351694663533728052713570044084663268350004738561234330890283895430742958255842196396542672482459665354739161276178850775803757753274712331067038077233072381051447436014423088822190073982228377699578821863871042501139434131053044240618505423456248872825597521393564957261041606004454706987978944644129728005540587982321571481413548381251589071459468890948819121023006292105804319208332473499823959882524985324120811768843639294924500467781666073366713198751960913508720530656411097981933156605831180926219778514434
n=2422711508900009723470102727278184898228579351729629175495904760516536114771819178772843940622693480942295987032442940867670858858530606887743557817380121361626756206355705110299827107648704348792184242506797212331641569408152865458082131811787893384573565771304686373397987779236692592582009393836324438173880350455958049987506807351970912049246353746635267159741115761548052126938491673479606393396100458729618059852813438444299361468512008386975558106274324688665963516424534366163011821633197140729560513838981241752422348968312410911097523311183305812013220724215584901550592570168096761576532621840320623463208702401829189862290303098674021012353400081288819532365151476738751064469957971192132666136590103567843662591585345483671185892760751481722342403025068374371716176981888876927119331602694699049322860285991375002326127401769287658952682585275891296760732815680898653162425658904911584903825163141576325803464119867837508173795728753701563149748508464162635777787788266240105654089919642728171076155284842273517797069725130328742992830894075552022372717019366081516680737
c2=pow(5,e,n)*c
c2=c2%n
print(c2)

Crypto wilson

这题原本应该把noise搞出来才行

但是我把n分出来求出m之后把m分解了(因为感觉noise*flag不会比n大所以这个mod没啥用)

得到了这么个结果2^2 · 13 · 239 · 93131 · 8755277 · 2753216978...61<82> · 7844747795...79<145>(具体数字不打了)

其中8755277 · 2753216978...61<82> 这两项乘积,long_to_bytes就是flag了

(问就是运气)

Crypto predict 1

先学习一下LCG

找到了根据x1,x2,x3,x4,x5解出a,b,m的方法

from Crypto.Util.number import*
import math

x1=33026305303475472470447973
x2=167563064649081821153911134
x3=219967887320275023725686310
x4=235804070571767086990925355
x5=735859862578334766481662221
t4=x5-x4
t3=x4-x3
t2=x3-x2
t1=x2-x1
m=math.gcd((t4*t2 - t3*t3) , (t3*t1 - t2*t2))
a=((x4-x3)*inverse((x3-x2),m))%m
b=(x3 - a*x2)%m
x6 = (a*x5 + b)%m
print(x6)

后来尝试了几次发现不太行

根据hx大佬提示这样的m不一定是m,要多取几个x才准确一点

然后下面是脚本:

from pwn import*
from Crypto.Util.number import*
import math
x=[]
t=[0,0,0,0,0,0,0,0,0,0]
io = remote("47.101.38.213", 60709)
for i in range(10):
io.recvuntil(b"2.Quit\n",drop=False)
io.sendline(b"1")
io.recvuntil(b"format>",drop=False)
io.sendline(b"1")
io.recvuntil(b"is ",drop=False)
tmp=io.recvline(keepends=False)
x.append(int(tmp))

for i in range(9):
t[i]=x[i+1]-x[i]

m1=math.gcd((t[3]*t[1] - t[2]*t[2]) , (t[2]*t[0] - t[1]*t[1]))
m2=math.gcd((t[7]*t[5] - t[6]*t[6]) , (t[6]*t[4] - t[5]*t[5]))
m=math.gcd(m1,m2)
a=((x[3]-x[2])*inverse((x[2]-x[1]),m))%m
b=(x[2] - a*x[1])%m
s=x[-1]
for i in range(190):
s=(a*s + b)%m
io.sendline(b"1")
io.recvuntil(b"format>",drop=False)
io.sendline(str(s).encode())
io.recvuntil(b"2.Quit\n",drop=False)
s=(a*s + b)%m
io.sendline(b"1")
io.recvuntil(b"format>",drop=False)
io.sendline(str(s).encode())
print(io.recvline())
io.interactive()

得到flag

Crypto Fermat with Binomial

戏剧性的一题

我把n放到factordb上分解了还成功了

然后第一次拿到了flag

后来被出题人发现了(qwq)于是题目更新了

hint1二项式展开,只保留首尾两项

hint2的式子,mod q结果和mod n一样,然后费马小定理,在来一个20212021次方再二项式展开

好了不会了

后面搜到了原题(感恩出题人提醒)

发现真的就差一点qwq

from gmpy2 import gcd
from Crypto.Util.number import *
import gmpy2
n=16785815493192323072561202520621502124354484873141439416485516896177209180170954358917536655296832389378159385508553582292316986439935870611836481627326624997826278718936899131627405269577001541561786652522795230359038066756500166621870294967504124007392361309677236631475857268249665705586160191841238378747704555589725214417560311950480552359244858338836565084199965357719917862865124721829629583801017461751844801305560796234037169537157236798038347132037065583033136175781724971303334634074643113231202854595470566133689932557205673653855603056520355846208058018605770349841277407297822002222655287986001654291931
hint1=9100042084582559120159031222877385918131627674965428834732092483610222485185500852690169889158524199071605287690845087305188994225784309780346317628828223709405785692567210943043233210503182916135218501703770962120690794212530724251491005258749274621926983941779357144111637154016600411666779133073494389367203037839113492716852468953430962340504727673205375932008380231967356987830939184941935559824751997435555229308732296050345353884892269792098915710385538823080718443304466681676033122340721360871484264707931485035700119764663528137240048303559376884120155943565064746404763004240115053288163324152157473617990
hint2=9715835317933770028352656960194612511232332508578016476234653979758738724483036248158492859699534774069055258691831221183554038938838861427968839315936796645021031146434403767322049813439272141318924746372792359202961866805563916806745433288822292142587118556212747743843666517677675229877703300490191424342819740469916571702460052662852376459432341889334300260369825585572770112675953798390556158097350576177067289449449873243010686716960572551733859485003137822891360533488207469003452641541262228655905655933669756058464699629520449342902123166997135656358968094821077563145658394017534114487847397469149938035501
c=12824901853900928176431805967670922082099408423359348740734692908225214283313020989235896494342846615758839954388241321859784138067628962023114456647732896918446926075150525242914486413449921088854955092881525457824965211111708060188052025883249556408765110000416480911959539207515903372662706942051175602406993472605337450011214198253823995374918086046571064526610180657696977528863091044723572782646772325280660263920280922710139393502451340521170658459979145980603061780857907568888355186816350804498385690058379721372491179071169195852152316654113738209736216721551163445193680416946172818040555458013285013076026
e=65537
q = gcd(n,pow(hint2-1011,20212021,n)*pow(2021,20212021,n)-hint1*pow(1010,20212021,n))
p = n//q
e=65537
phi=(p-1)*(q-1)
d=inverse(e,(p-1)*(q-1))
m=pow(c,d,n)
print(long_to_bytes(m))

Misc ezpython

观察发现没有超过8的数字

转换八进制然后chr()

 

x=[60,170,107,141,155,145,173,167,63,63,153,62,137,163,164,64,162,67,175]
s=""
for i in range(19):
x[i]=64*(x[i]//100)+8*(x[i]//10%10)+x[i]%10
s=s+chr(x[i])
print(s)

RE installer

由于水平辣鸡我分析了老半天没什么卵用于是用了最蠢最简单的办法

flag="0xGame{aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}"
m=""
c=[15728448, 16362025, 13718731, 13740602, 11425044, 13216326, 10048823, 13740603, 12757531, 12255100, 15138636, 12408061, 11228430, 10289095, 10114289, 14723575, 11272070, 9524519, 10267251, 12517282, 11796345, 13653174, 12495389, 13172636, 11468724, 9458930, 8956506, 12320680, 15291551, 11119205, 9568155, 10201663, 10398270, 14745427, 10944395, 13260012, 13194479, 11053619, 12145871, 11184688, 11359448, 11774503, 16602251, 15662990]
for f in range(44):
for k in range(128):
length = len(flag)
arr = []
enc = [
   238,
   257,
   150,
   137,
   167,
   169,
   184,
   193,
   210,
   147,
   219,
   128,
   140,
   135,
   185,
   242,
   204,
   128,
   132,
   159,
   222,
   173,
   226,
   159,
   207,
   169,
   154,
   156,
   216,
   139,
   168,
   187,
   220,
   237,
   207,
   187,
   218,
   138,
   218,
   178,
   246,
   239,
   246,
   241]
for i in range(length):
   arr.append(ord(flag[i]))
arr[f]=k
for i in range(0, 16):
for j in range(0, length):
arr[j] += enc[j]
enc[j] += enc[j]
   
enc = enc[::-1]

if arr[f]==c[f]:
print(chr(k))
m=m+chr(k)
break
print(m)

然后就提交呗qwq

posted @ 2021-11-18 09:09  上辰  阅读(153)  评论(0编辑  收藏  举报