BUUCTF逆向DAY-3[9-12]

不一样的flag

IDA打开,f5反编译_main函数

image

分析可知这是一个走迷宫的程序,v3为一个5*5的迷宫的地图,*为起点,#为终点,路径为flag

image


SimpleRev

IDA64打开,f5反编译main函数,追踪相关函数

image

分析可知是把大小写字母(v1-39-key[v3%v5]+97)%26+97

追踪一下与key有关的key1

image

追踪一下与text有关的key3

image

上面的int是小端序 ida默认大端序

然后上脚本梭哈

#python3
import string
key="ADSFKNDCLS"
text="killshadow"
s=""
flag=[]
loop=string.ascii_uppercase

for i in range(0,len(key)):
    if ( ord(key[i]) > 64 and ord(key[i]) <= 90 ):
        s += chr(ord(key[i]) + 32)
    else:
        s +=key[i]

for i in range(0,len(text)):
    for j in loop:
        if ord(text[i])==((ord(j)-39-ord(s[i])+97)%26+97):
            flag.append(j)
for i in flag:
    print(i,end="")

输入值是大小写字母 而网上的wp都只爆破了小写字母 每个符合的大写字母ascii码加26得到的小写字母也符合

垃圾题目


Java逆向解密

使用JD-GUI反编译.class文件

image

要注意一下java里的符号优先级+^优先级高

直接脚本梭哈

#python3
a=[180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]
for i in a:
    i^=32
    i-=64
    print(chr(i),end="")

luck_guy

IDA64打开文件,f5反编译main函数,追踪相关函数

image

分析可知flag为f1+f2 f2可能经过加密

追踪f1

image

f1为GXY{do_not_ f2中应该有} 初始的f2中没有} 所以最后的f2应该是加密过的(可能加密了1~3次)

上脚本对f2进行加密

#python3
a=[0x69,0x63,0x75,0x67,0x60,0x6f,0x66,0x7f]
for i in range(3):
    for j in range(len(a)):
        if j % 2 == 1:
            a[j] -= 2
        else:
            a[j]-=1
        print(chr(a[j]),end="")
    print("")

最终发现只加密了1次

image

posted @ 2021-11-03 11:15  地狱✟祈祷  阅读(28)  评论(0编辑  收藏  举报