先手共还原 python字节码, 然后再手算2进制,最后一个字符一个字符算, 我做了大约三个小时吧,
做题记录在家里, 忘记保存了,就很难受. 这边就不演示了
#coding = utf-8
import base64
k = 0
c = b'巴拉巴拉那一堆 字节数组, base64编码后的'
i = 0
def x(n):
"""判断 k**2-1 的值是否满足条件 """
return False
c = base64.b64decode(c).split(',')
z = lambda n : 2**n-1
while len(c) > i:
out = ''
if x(z(k)):
out += chr(int(c[i]) ^ z(k))
i += 1
k += 1
print(out.join(['flag{','}']))
差不多这样吧, 其他的 最好手算, 这个脚本跑的非常慢, 第八个字符 算了好长时间, 后面是有规律的,
大数 xor 大数 前面的位 一定相等, 所以直接遍历就行, 还有就是 这个次方全都是 素数, 就很棒,最大的一个不是 1w 就是 10w 多
l = [2,3,7,9,13,17,19,31,61,89]
#coding = utf-8
power = lambda n: 2**n
for i in range(31,10000000,2):
if str(power(i)).count("要匹配的值") != 0:
print("第%d次, 值为:"%i,power(i))
break
自动化脚本
c = ['123123123412312','1231231278461273']
cindex = 6 # 从六位开始,前几位都挺好算的
l = []
for i in range(61,10000000,2):
if str(pow(2,i)).count(c[cindex][:4]) !=0:
l.append(i)
cindex += 1
flag = ''
for i in range(len(l)):
flag += chr(pow(l[i]) ^ int(c[i]))
print(flag)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论