• buuctf re刷题1


    零碎操作:

    ida shift+e 指定字符串的特定格式

    ida shift +f12 看字符串

    ida ctrl+x 指定字符串交叉引用

    reverse3

    找到字符串 e3nifIH9b_C@n@dH

    每个字符与对应下标相减后base64解码

    import base64
    str=[0x65, 0x33, 0x6E, 0x69, 0x66, 0x49, 0x48, 0x39, 0x62, 0x5F, 
      0x43, 0x40, 0x6E, 0x40, 0x64, 0x48, 0x00]
    for i in range(len(str)-1):
        str[i]=chr(str[i]-i)
    str.pop()
    str=''.join(str)
    print (str)
    print (base64.b64decode(str))
    

    helloword

    是Android的apk文件,用apk ide 打开

    找到helloword的main那里,看到flag

    不一样的flag

    是一个走迷宫

    应该要观察到后面判断的1和**#**,与上面有个字符串长度为25

    *11110100001010000101111#

    可以分为5列

    *1111

    01000

    01010

    00010

    1111#

    对应flag是

    flag{222441144222}

    SimpleRev

    小端程序的话,转换ascll码要反一下,(应该)

    可得到两个字符串

    text=killshadow

    key=ADSFKNDCLS

    转换为小写key=adsfkndcls

    思路就是把key的每个字符经过结合flag的每个字符,特定操作后变成text的每个字符

    脚本的话用枚举,然后模仿程序的操作,满足条件就break然后找下一个字符

    (感觉逆着写写不出来)

    #SimpleRev
    text=['k','i','l','l','s','h','a','d','o','w']
    key=['a','d','s','f','k','n','d','c','l','s']
    flag=[]
    v3=0
    for i in range(len(text)):
        for k in range(65,123):
            if ( ((k<=96 or k>122)and (k>64 and k<=90))or (k>96 and k<=122) ):
                if (ord(text[i])==(k-39-ord(key[v3%len(text)])+97)%26+97):
                    flag.append(chr(k))
                    v3+=1
                    break
    flag=''.join(flag)
    print(flag)
    

    Java逆向解密

    jd-gui打开

    然后观察下,就是flag每个ascll+64异或0x20要等于key的每个数值

    key=[180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 
            133, 191, 134, 140, 129, 135, 191, 65]
    flag=[]
    for i in range(len(key)):
        flag.append(chr(key[i]-64^0x20))
    flag=''.join(flag)
    print("flag{"+flag+"}")
    

    [GXYCTF2019]luck_guy

    这种elf文件都是小端的,ascll码要反以下用reverse()方法

    找到字符串GXY{do_not_

    根据程序功能减-1-2,组合就能得到flag了

    #[GXYCTF2019]luck_guy
    s=[127,102,111,96,103,117,99,105]
    s.reverse()
    for i in range(1):
        for i in range(len(s)):
            if (i%2==1):
                s[i]-=2
            else:
                s[i]-=1
    for i in range(len(s)):
        s[i]=chr(s[i])
    flag=''.join(s)
    print('GXY{do_not_'+flag)
    

    [BJDCTF2020]JustRE

    发现字符串BJD{%d%d2069a45792d233ac}

    两个fomat,跟进一看有19999,和0两个参数,放进去就行

  • 相关阅读:
    【MFC】窗口消息与绘制(4)
    MySql 查询字段包含指定字符串(locate函数)
    天天写SQL,这些神奇的特性你知道吗?
    Unity之Hololens2开发 如何接入的MRTK OpenXR Plugin
    Threejs中使用Tweenjs实现动画效果和Tweenjs使用说明文档
    【计算机组成原理】定点数和浮点数
    Scikit-Learn快速生成分类数据集
    【随想】每日两题Day.2
    Java面向对象编程
    自定义安装Redhat8.6镜像:
  • 原文地址:https://blog.csdn.net/m0_51251108/article/details/127122876