>
This site is best viewed in a modern browser with JavaScript enabled.
### id="flarum-content">
内部赛密码3-avbv编码(Easy)
ThTsOd
首先,这个解法并不完美,存在nc连接时间长,参数需要符合特定条件等问题,仅供参考。
预期解是仿照https://www.zhihu.com/question/381784377上的做法,然后发现出题人都仿照不来,太菜了。
根据题目里的信息for i in range(58):
以及连上去测试的结果,发现这是正常Base58的编码。
先写出解密函数
shift=[8,7,6,5,4,3]
def dec(x,tr,add,xor):
r=0
for i in range(6):
r+=tr[x[shift[i]]]*58**i
return (r-add)^xor
收集数据
datanum=0x200000
import time
nett1=time.time()
from pwn import *
r=remote("127.0.0.1",9999)
i=0
bv=[]
try:
while(i<datanum):
r.sendline("1")
r.recvuntil(":\n")
r.sendline(hex(i))
bv.append(r.recvline().strip())
i+=1
r.close()
nett2=time.time()
print(nett2-nett1)
f=open('ctf.txt','a+')
for i in range(len(bv)):
f.write(bv[i]+'\n')
f.close()
except EOFError:
f=open('ctf.txt','a+')
for i in range(len(bv)):
f.write(bv[i]+'\n')
f.close()
print("EOF!")
print(len(bv))
exit(1)
按照知乎上解法
接下来找了一些 av 号 x,满足 x 和 x+1 对应 bv 号的第 11 位不同。设异或的数为 X,那么
bv=[]
f=open('crypto3hint(0x200000).txt')
for i in range(datanum):
bv.append(f.readline().strip())
f.close()
diff=[]
for i in range(0,datanum-1):
if(bv[i][7]!=bv[i+1][7]):
diff.append(i)
#print(diff)
def check(x,k):
return ((k^x)//(58)!=(k^(x+1))//(58))
b=0
ti1=time.time()
for a in range(0,58):
print(2**25*a%58)
b=0
while(b<2**25):
if(all(check(x,2**25*a+b) for x in diff)):
print(2**25*a%58,b,2**25*a+b)
ti2=time.time()
print(ti2-ti1)
b+=1
会得出以下结果
(0, 12688674, 12688674)
(0, 12688675, 12688675)
(38, 4088540, 473850588)
(38, 4088541, 473850589)
(38, 29465890, 499227938)
(38, 29465891, 499227939)
(18, 20865756, 960389852)
(18, 20865757, 960389853)
取第一组数据,得到码表
from pwn import *
r=remote("127.0.0.1",9999)
i=0
X=12688674
cv=''
while(i<58):
r.sendline("1")
r.recvuntil(":\n")
r.sendline(hex(i^X))
cv+=r.recvline().strip()[-1]
i+=1
r.close()
print(str(cv))
zwupFBnosbUYvMa1Tc9DH7GJe2XrQA3kV4CE8iZjfRqNtgLdP5hxKmW6yS
设xor参数12688674,add参数为0,此时加密0得到的对应数字可知,为1556662768
计算(1556662768-add) ^ 12688674 == 0得到add为1543974094
xor为c19d22,add为5c072cce,码表为zwupFBnosbUYvMa1Tc9DH7GJe2XrQA3kV4CE8iZjfRqNtgLdP5hxKmW6yS
验证后得到flag
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论