1024杯-抽象语言

admin 2022年1月5日22:55:52CTF专场评论11 views820字阅读2分44秒阅读模式

>

>

1024杯-抽象语言

admin

re_ 抽象语言

先手共还原 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)

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月5日22:55:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  1024杯-抽象语言 http://cn-sec.com/archives/719562.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: