zoukankan      html  css  js  c++  java
  • BUUCTF-RE-pyre

    初步探索

    .pyc文件 通过在线 反编译后

    print 'Welcome to Re World!'
    print 'Your input1 is your flag~'
    l = len(input1)
    for i in range(l):
        num = ((input1[i] + i) % 128 + 128) % 128
        code += num
    
    for i in range(l - 1):
        code[i] = code[i] ^ code[i + 1]
    
    print code
    code = [
        'x1f',
        'x12',
        'x1d',
        '(',
        '0',
        '4',
        'x01',
        'x06',
        'x14',
        '4',
        ',',
        'x1b',
        'U',
        '?',
        'o',
        '6',
        '*',
        ':',
        'x01',
        'D',
        ';',
        '%',
        'x13']
    
    

    解题

    ①*关于%有注意的点 (;´д`)ゞ算术真头大啊
    ( a + b ) % c=(a%c+b%c)%c,所以第5行等价于(input1[i]+i)%128。
    ((input1[i] + i) % 128 + 128) % 128
    =((input1[i]+i)%128%128 + 128%128)%128
    =(input1[i]+i)%128

    l=len(code)=23
    然后我们异或的范围是rang(l-1)
    code[i]=code[i]^code[i+1],
    i应该是从0取到l-1-1。处理后,code[22]没有变
    也就是说code[21]=code[21]^code[22] 这个异或做到21已经是最大的值了 在l-1的范围内
    code[22]^=code[23]是在范围外的

    脚本

    code = ['x1f', 'x12', 'x1d', '(', '0', '4', 'x01', 'x06', 'x14', '4', ',', 'x1b', 'U', '?', 'o', '6', '*', ':', 'x01', 'D', ';', '%', 'x13']
    l=len(code)
    print('Welcome to Reverse!')
    for x in range(l-2,-1,-1):
         code[x]=chr(ord(code[x])^ord(code[x+1]))
    for x in range(l):
         print(chr((ord(code[x])-x)%128),end='')
    

    flag

    GWHT{Just_Re_1s_Ha66y!}

    参考:
    平静的雨田
    re学习笔记

  • 相关阅读:
    Maven介绍及安装与配置
    Xshell使用技巧总结
    UML类图
    vim使用案例
    Linux常用命令3(压缩和解压缩总结)
    Linux常用命令2(远程文件下载+查看文件内容)
    Linux常用命令1
    JOptionPane类提示框常用方法总结
    HTTP基础知识3
    HTTP基础知识2
  • 原文地址:https://www.cnblogs.com/Nickyl07/p/12828381.html
Copyright © 2011-2022 走看看