Absolute_Baby_Encrytpion
打开附件发现是单字符替换
替换回来即可
exp.py
with open("data",'r') as f:
data = f.read()
# print(data)
import re
decode_char_list = re.findall("case '(.*?)'",data)
encode_char_list = re.findall("encryptedString = encryptedString.concat\('(.*?)'\)",data)
print(encode_char_list)
decode_dict = {}
for k,v in zip(encode_char_list,decode_char_list):
decode_dict[k] = v
print(decode_dict)
encode_text = """
+}!q")hiim)#}-nvm)i-$#mvn#0mnbm)im#n+}!qnm8)i-$#mvnoc#0nz<$9inm!>-n1:1-nm8)i-$~c58n!}qhij#0[noic##m8nc8n?!8c}w!n]>&
"""
for t in encode_text:
try:
print(decode_dict[t],end="")
except:
print(t)
babylua
在线跑一下lua 可以知道是标准的md5
exp.py
import random
import hashlib
table = ""
for i in range(65,91):
table += chr(i)
for i in range(97,123):
table += chr(i)
# print(table)
def md5(a):
return hashlib.md5(a.encode()).hexdigest()
target = "b5e62abe84"
def get_key():
print(len(target))
for a in table:
for b in table:
for c in table:
for d in table:
tmp = a + b + c + d
# print(md5(md5(tmp))[0:10],len(md5(md5(tmp))[1:11]))
if md5(md5(tmp))[0:10] == target:
print(tmp)
break
key = md5(md5('kKpU'))
print(key)
data = "200 161 198 157 173 169 199 150 105 163 193 175 173 194 135 131 135 225".split(' ')
enc_data = [int(t,10) for t in data]
for i in range(len(enc_data)):
print(chr(enc_data[i] - ord(key[i])),end="")
Magic of Encoding
去除假flag 然后转zip
Math Problem
用coppersmith解出x 然后求出kp gcd即可得到p
exp.py
from Crypto.Util.number import *
import gmpy2
e = 65537
n = 79239019133008902130006198964639844798771408211660544649405418249108104979283858140199725213927656792578582828912684320882248828512464244641351915288069266378046829511827542801945752252863425605946379775869602719406340271702260307900825314967696531175183205977973427572862807386846990514994510850414958255877
c = 45457869965165575324534408050513326739799864850578881475341543330291990558135968254698676312246850389922318827771380881195754151389802803398367341521544667542828862543407738361578535730524976113729406101764290984943061582342991118766322793847422471903811686775249409300301726906738475446634950949059180072008
a = 9303981927028382051386918702900550228062240363697933771286553052631411452412621158116514735706670764224584958899184294505751247393129887316131576567242619
b = 9007779281398842447745292673398186664639261529076471011805234554666556577498532370235883716552696783469143334088312327338274844469338982242193952226631913
y = 970090448249525757357772770885678889252473675418473052487452323704761315577270362842929142427322075233537587085124672615901229826477368779145818623466854
R.<x> = PolynomialRing(Zmod(n))
f=y**2-x**3-a*x+-b
f=f.monic()
x0 = f.small_roots(X=2^64, beta=0.4,epsilon=0.01)
print(x0)
x=int(x0[0])
kp=pow(y,2)-b-a*x-x**3
p=gmpy2.gcd(kp,n)
q=n//p
d=gmpy2.invert(e,(p-1)*(q-1))
m=pow(c,d,n)
print(long_to_bytes(int(m)))
#flag{c4edd6d0-d1b3-cbda-95e3-a323edc35be5}