PatriotCTF 2023

Rev

Patchwork

作者提示patch即可
在这里插入图片描述
这个程序应该只给出标志,但我在代码中设置了错误的值,现在它拒绝跳转到正确的函数。你能帮我打补丁吗?
在这里插入图片描述
蹦床很有趣!我喜欢跳跃!你也应该尝试跳跃!这肯定会比手动反转标志更有趣。
查看函数,有名为give_flag的函数,推测应该是patch将控制流由main函数改为give_flag函数
笔者选择直接修改_star函数使程序的入口点直接跳转到give_flag函数
查看_start函数的汇编代码,红框所示代表将main函数地址设为入口点,
在这里插入图片描述
gdb调试观察,汇编代码中的CE代表main函数和rip的偏移,因此,只需要计算出give_flag函数和rip的偏移并将CE替换即可
在这里插入图片描述
IDA查看main函数的地址为0x1139
在这里插入图片描述
give_flag函数的地址为0x117D
在这里插入图片描述
计算偏移为 0x117D - 0x1139 = 0x44
CE + 44 = 112
因此将 CE patch为 112,并保存运行
在这里插入图片描述
成功得到flag
在这里插入图片描述
也可以直接修改main函数中的隐藏的跳转,使其成功跳转
在这里插入图片描述

Python Garbage Compiler

题目代码:

import string # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+++++.++++.+++.-.+++.++.<<++.>>-.+.--.---------.+++++.-------.
from random import * # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.++++++++++++.---.--.<<++.>>+++++.-----------------.+++++++++++++.----------.+++++++++++.--.<<.>>----.++++.+++.-.+++.++.<<.++++++++++.

def finalstage(w): # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>.+.+.<<++.>>.+++.+++++.-------------.+++++++++++.+++++++.+.-------------------.++++++.--.<<++++++++.>>++++++++++++++++++.<<+.>------------.
    h=0 # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++.<---------.-------------.
    w = list(w) # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+++++++++++++++++++.<<++.>---------.<.>>-----------.---.++++++++++.+.<<++++++++.>>+++.<<+.
    w.reverse() # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+++++++++++++++++++.<<++++++++++++++++.>>-----.-------------.+++++++++++++++++.-----------------.+++++++++++++.+.--------------.<<------.+.
    w = "".join(g for g in w) # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+++++++++++++++++++.<<++.>---------.<.++..++++++++++++.>>-------------.+++++.------.+++++.<<------.>>-------.<<--------.>>-.+++++++++.+++.<<.>>-----------.<<.>>++.+++++.<<.>>+++++++++.<<+++++++++.
    flag = 'flag'.replace('flag', 'galf').replace('galf', '') # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.++++++.-----------.++++++.<<++.>---------.<.+++++++.>>-.++++++.-----------.++++++.<<.+++++++.>>+++++++++++.-------------.+++++++++++.----.-----------.++.++.<<------.-.>>+.++++++.-----------.++++++.<<.+++++.------------.+++++++.>>.------.+++++++++++.------.<<.++.+++++.>>++++++++++++.-------------.+++++++++++.----.-----------.++.++.<<------.-.>>++.------.+++++++++++.------.<<.+++++.------------.+++++++..++.
    while h < len(w): # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+++++++++++++++++++.---------------.+.+++.-------.<<++.>>+++.<<.>----------.<.>>++++.-------.+++++++++.<<++++++++.>>+++++++++.<<+.>--.
        try: # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++++++.--.+++++++.<------------.
            flag += w[h+1] + w[h] # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.++++++.-----------.++++++.<<++.+++++++++++.>---------.<-----------.>>++++++++++++++++.----------------------------.+++++++++++++.<<+++++++++++.++++++.>>-----------.<<-----------------.+++++++++++.-----------.>>++++++++++++++++++++++++++.----------------------------.+++++++++++++.-----------.
        except: # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+.+++++++++++++++++++.---------------------.++.+++++++++++.++++.<------------.
            flag += w[h] # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.++++++.-----------.++++++.<<++.+++++++++++.>---------.<-----------.>>++++++++++++++++.----------------------------.+++++++++++++.-----------.
        h+=2 # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++.<<+++++++++++++.>---------.<+++++++.
    print("Final Stage complete") # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++.++.---------.+++++.++++++.<<++++++++++.------.>.>-----------.+++++.-------------.+++++++++++.<<--.>+++++++++++++.>++++++++.<++++++++++++++.++++++.--.<.>--.>-----.--.+++.----.<++.>++++++++.<.<++.+++++++.
    return flag # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++++.-------------.+++++++++++++++.+.---.----.<<++.>>--------.++++++.-----------.++++++.

def stage2(b): # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>.+.+.<<++.>>+++++++++++++.+.-------------------.++++++.--.<<++++++++++++++++++.----------.>>---.<<+.>------------.
    t = "++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.++++++.-----------.++++++."[-15:(7*9)].strip('-') # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++++++.<<++.>---------.<.++.+++++++++..........>>-------------------------.<+.<.>.<...>.<.......>.<..........>--....<++.>>++.<++....<--..+++.---......+++.-...........+.---......+++.------------.>>--.<<+++++++++++.++++.++++.>----.<-------------.>---.<++.>++.<-.>>++.<<+++++.>>++++++++++++++++++++++.+.--.---------.+++++++.<<------.-.++++++.------.++.
    for q in range(len(b)): # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.+++++++++.+++.<<++.>>-.<<.>>--------.+++++.<<.>>++++.-----------------.+++++++++++++.-------.--.<<++++++++.>>+++++++.-------.+++++++++.<<.>>------------.<<+..>------------.
        t += chr(ord(b[q])-randint(0,5)) # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++++++.<<++.+++++++++++.>---------.<-----------.>>-----------------.+++++.++++++++++.<<++++++++.>>---.+++.--------------.<<.>>--.-------.++++++++++++++++++++++.--------------------.<<+.++++.>>+++++++++++++++++++++.-----------------.+++++++++++++.----------.+++++.+++++.++++++.<<-----.++++++++.----.>--------.<---..
    print("Stage 2 complete") # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++.++.---------.+++++.++++++.<<++++++++++.------.>+++++++++++++.>.<++++++++++++++.++++++.--.<--.++++++++++++++++++.------------------.>--.>-----.--.+++.----.<++.>++++++++.<.<++.+++++++.
    flag = finalstage(t) # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.++++++.-----------.++++++.<<++.>---------.<.>>-.+++.+++++.-------------.+++++++++++.+++++++.+.-------------------.++++++.--.<<++++++++.>>+++++++++++++++.<<+.
    return flag # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++++.-------------.+++++++++++++++.+.---.----.<<++.>>--------.++++++.-----------.++++++.

def stage1(a): # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>.+.+.<<++.>>+++++++++++++.+.-------------------.++++++.--.<<+++++++++++++++++.---------.>>----.<<+.>------------.
    a = list(a) # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>---.<<++.>---------.<.>>+++++++++++.---.++++++++++.+.<<++++++++.>>-------------------.<<+.
    b = list(string.ascii_lowercase) # abcdefghijklmnopqrstuvwxyz
    for o in range(len(a)): # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.+++++++++.+++.<<++.>>---.<<.>>------.+++++.<<.>>++++.-----------------.+++++++++++++.-------.--.<<++++++++.>>+++++++.-------.+++++++++.<<.>>-------------.<<+..>------------.
        a[o] = chr(ord(a[o])^o) # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>---.------.++++++++++++++++++++.------------------.<<++.>---------.<.>>++++++.+++++.++++++++++.<<++++++++.>>---.+++.--------------.<<.>>---.------.++++++++++++++++++++.------------------.<<+.>>+.+++++++++++++++++.<<
    z = "".join(x for x in a) # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++++++++++++.<<++.>---------.<.++..++++++++++++.>>----------------.+++++.------.+++++.<<------.>>++++++++++.<<--------.>>------------------.+++++++++.+++.<<.>>++++++.<<.>>---------------.+++++.<<.>>-------------.<<+++++++++.
    for y in range(len(z)): # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.+++++++++.+++.<<++.>>+++++++.<<.>>----------------.+++++.<<.>>++++.-----------------.+++++++++++++.-------.--.<<++++++++.>>+++++++.-------.+++++++++.<<.>>++++++++++++.<<+..>------------.
        b[y%len(b)] = chr((ord(z[y])^ord(a[y]))+len(b)) # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>--.-------.++++++++++++++++++++++++++++++.<<+++++++.>>-------------.-------.+++++++++.<<+++.>>------------.<<+.>>-----.<<---------.>---------.<.>>++++++.+++++.++++++++++.<<++++++++..>>---.+++.--------------.<<.>>++++++++++++++++++++++.<++++++++++++++++++++++++++++++.>-.<++.<+.>+.>----------.+++.<++++++.<-.>---.------.>+++++++.<++.<+..++.>>-------------.-------.+++++++++.<<---.>+++++.<+..
    print("Stage 1 complete") # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++.++.---------.+++++.++++++.<<++++++++++.------.>+++++++++++++.>.<++++++++++++++.++++++.--.<--.+++++++++++++++++.-----------------.>--.>-----.--.+++.----.<++.>++++++++.<.<++.+++++++.
    flag = stage2(z) # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.++++++.-----------.++++++.<<++.>---------.<.>>++++++++++++.+.-------------------.++++++.--.<-----------.<++++++++.>>+++++++++++++++++++++.<<+.
    return flag # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++++.-------------.+++++++++++++++.+.---.----.<<++.>>--------.++++++.-----------.++++++.

def entry(f): # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>.+.+.<<++.>>-.+++++++++.++++++.--.+++++++.<<++++++++.>>-------------------.<<+.>------------.
    seed(10) # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+++++++++++++++.--------------..-.<<++++++++++.+++++++++.-.-------.
    f = list(f) # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.<<++.>---------.<.>>++++++.---.++++++++++.+.<<++++++++.>>--------------.<<+.
    f.reverse() # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.<<++++++++++++++++.>>++++++++++++.-------------.+++++++++++++++++.-----------------.+++++++++++++.+.--------------.<<------.+.
    f = "".join(i for i in f) # 逆序 ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.<<++.>---------.<.++..++++++++++++.>>++++.+++++.------.+++++.<<------.>>-----.<<--------.>>---.+++++++++.+++.<<.>>---------.<<.>>.+++++.<<.>>--------.<<+++++++++.
    print("Entry complete") # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++.++.---------.+++++.++++++.<<++++++++++.------.>-.>------.++++++.--.+++++++.<<--.>>----------------------.++++++++++++.--.+++.----.-------.+++++++++++++++.---------------.<<++.+++++++.
    flag = stage1(f) # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.++++++.-----------.++++++.<<++.>---------.<.>>++++++++++++.+.-------------------.++++++.--.<------------.<++++++++.>>+.<<+.
    return flag # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++++.-------------.+++++++++++++++.+.---.----.<<++.>>--------.++++++.-----------.++++++.

if __name__ == '__main__':# ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+++++.---.<<++.>>-------..+++++++++++++++.-------------.++++++++++++.--------.------..<<.>---------..<.+++++++.>>..++++++++++++++.------------.++++++++.+++++.---------------..<<.>---.
    input = entry(input("Enter Flag: ")) # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+++++.+++++.++.+++++.-.<<++.>---------.<.>>---------------.+++++++++.++++++.--.+++++++.<<++++++++.>>----------------.+++++.++.+++++.-.<<.------.>++++++++.>------.++++++.---------------.+++++++++++++.<<--.>+.>------.-----------.++++++.<------------.<.++.+++++++..
    flag = open('output.txt', 'r').readlines()[0] # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.++++++.-----------.++++++.<<++.>---------.<.>>++++++++.+.-----------.+++++++++.<<++++++++.-.>>+.++++++.-.----.+++++.-.<<+++++++.>>.++++.----.<<-------.+++++.------------.+++++++.>>--.<<.++.+++++.>>.-------------.----.+++.++++++++.---.+++++.---------.++++++++++++++.<<------.+.>>------------------------.<<+++++++.>>++.
    if input == flag: # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+++++.---.<<++.>>+++.+++++.++.+++++.-.<<.>---------..<.>>--------------.++++++.-----------.++++++.<---.
        print("What... how?") # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++.++.---------.+++++.++++++.<<++++++++++.------.>+++++++++++++++++.>------------.-------.+++++++++++++++++++.<<++++++++++++...--------------.>>------------.+++++++.++++++++.<------------------------.<++.+++++++.
        print("I guess you broke my 'beautiful' code :(") # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++.++.---------.+++++.++++++.<<++++++++++.------.>+++.<--.>>-------------.++++++++++++++.----------------.++++++++++++++..<<.>>++++++.----------.++++++.<<.>>-------------------.++++++++++++++++.---.----.------.<<.>>++++++++.++++++++++++.<<.+++++++.>>-----------------------.+++.----.++++++++++++++++++++.-.-----------.---.+++++++++++++++.---------.<<.-------.>>---------.++++++++++++.-----------.+.<<.>---------------.<++++++++.------.+++++++.
    else: # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+.+++++++.+++++++.--------------.<------------.
        print("haha, nope. Try again!") # ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++++.++.---------.+++++.++++++.<<++++++++++.------.>>------------.-------.+++++++.-------.<<++++++++++.------------.>>+++++++++++++.+.+.-----------.<<++++++++++++++.--------------.>++++++++++++++.>+++++++++++++.+++++++.<<.>+++++++++++++.++++++.------.++++++++.+++++.<+.+.+++++++.

三个阶段逐个分析进行逆向,

def nfinalstage():
    s = "^seqVVh+]>z(jE=%oK![b$\\NSu86-8fXd0>dy"
    print(len(s))
    flag = ''
    h=0
    while(h<len(s)):
        try: 
            flag += s[h+1] + s[h] 
        except: 
            flag += s[h] 
        h+=2
    flag = list(flag)
    flag.reverse()
    s = "".join(g for g in flag)
    return s
print(nfinalstage())

print("stage2------------------------")
print(stage2("asdfghjk"))

def nstage2():
    seed(10)
    t = ''
    b = "y>dd0fX-886Su\\Nb$![oK=%jEz(]>h+VVeq^s"
    for q in range(len(b)): 
        p = randint(0,5)
        # print(p)
        t += chr(ord(b[q])+p)
    return t
print(nstage2())

print(stage2("}>gg4fY0;:;Tu`Qd$\"`qK@&nG}+_Cj.W[gv`t") == "y>dd0fX-886Su\\Nb$![oK=%jEz(]>h+VVeq^s")

def nstage1():
    z = "}>gg4fY0;:;Tu`Qd$\"`qK@&nG}+_Cj.W[gv`t"
    z = list(z)
    for o in range(len(z)): 
        z[o] = chr(ord(z[o])^o)
    a = "".join(x for x in z)
    return a
print(nstage1())
a = list(nstage1())
a.reverse()
a = "".join(x for x in a)
print(a)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值