• buuctf 两道GXYCTF逆向


    1,luck_guy

    ida打开,很简单

    #include<stdio.h>
    int main() {
            char f1[] = "GXY{do_not_";
            char f2[] = "icug`of";
            char temp[7];
    
            for (int j = 0; j < 7; ++j)
            {
                    if (j % 2 == 1)
                            temp[j] = f2[j] - 2;
                    else
                            temp[j] = f2[j] - 1;
                    f2[j] = temp[j];
            }
            printf("%s%s}",f1,f2);
    }

    得到flag

    2,simplecpp

    拖进ida,找到关键函数

     可以分析出逻辑

    v24=v19[2]&~v19[0]
    v24==1176889593874
    
    v31 = (v19[2] & ~v19[1]) & v19[0] | v19[2] & ((v19[1] & v19[0]) | v19[1] & ~v19[0] | ~(v19[1] | v19[0]))
    v31 == 577031497978884115
    
    v28 = v19[2] & ~v19[0] | v19[1] & v19[0] | v19[2] & ~v19[1] | v19[0] & ~v19[1]
    v28 = 4483974544037412639
    (v28 ^ v19[3]) == 4483974543195470111
    
    ((v19[2]&~v19[0]) | (v19[0] & v19[1]) | v19[1] & v19[2]) != (~v19[0] & v19[2] | 0xC00020130082C0C)

    用z3

    from z3 import *
    
    x0,x1,x2,x3=BitVecs('x0 x1 x2 x3',64)
    f=Solver()
    
    f.add(((x2&~x1)&x0|x2&((x1&x0)|x1&~x0|~(x1|x0)))==577031497978884115)
    f.add((4483974544037412639^x3)==4483974543195470111)
    f.add(x2&~x0==1176889593874)
    f.add((x2&~x0|x1&x0|x2&~x1|x0&~x1)==4483974544037412639)
    
    if f.check() == sat:
        print f.model()
    [x3 = 842073600,
     x1 = 2452209997103237128,
     x0 = 4483973367147818765,
     x2 = 577031497978884115]

    再看

     将得出来的数与dst异或

    Dst = 'i_will_check_is_debug_or_noi_wil'
    flag = [0x3E,0x3A,0x46,0x05,0x33,0x28,0x6F,0x0D,0x36,0x38,0x40,0x00,0x22,0x00,0x4f,0x08,0x08,0x02,0x07,0x17,0x15,0x3E,0x30,0x13,0x32,0x31,0x06]
    for i in range(len(flag)):
        print(chr(ord(Dst[i]) ^ flag[i]),end='')

    得到:We1l_D0n^]#k}i<Wlgebra_am_i,但是不对

    之后看了看别人的wp,发现原来在比赛时发公告给了第二部分为e!P0or_a

    3,第三道卡住了,做出来再写 

  • 相关阅读:
    css笔记
    js面向对象开发之--元素拖拽
    git命令笔记
    数据扁平化笔记。
    手写冒泡排序
    ant design-Table组件实现每一行某个特定字段连续相同进行行合并。
    Array.prototype.reduce()。
    I/O多路复用
    TCP/IP四层体系结构
    TCP的三次握手和四次挥手,为什么?
  • 原文地址:https://www.cnblogs.com/harmonica11/p/12191592.html
Copyright © 2020-2023  润新知