下载附件打开来看看,三个条件达成即可
第一个是0xcafe,第二个是满足or的一个数字,第三个是h4cky0u
最后会输出key
把first注释掉,加上参数
编译c文件
gcc 1.c -o 2
./2 0 25 h4cky0u
最后输出key即可
我们先用扫描壳工具,发现有upx壳
进行脱壳
upx -d
直接拿去ida搜索flag即可
直接加载进ida然后指定main按F5
s是用户输入的字符串,先进行比较长度,如果长度比v8小
判断如果输入的字符串和经过运算后的后字符串不等则成功
说明字符串就是flag
最后根据所知内容编写exp
key1 = ":\"AL_RT^L*.?+6/46"
key2 = "harambe"
key3 = 7
flag = ''
for i in range(0,len(key1)):
flag += chr(ord(key1[i]) ^ ord(key2[i%key3]))
print flag
直接放进ida然后搜索flag即可
9447{This_is_a_flag}
首先通过在线工具反编译出ptthon文件
然后通过他的编码方式写出解码方式
顺序输入8,7,6,5,4,3,2,1即可
双击进去,就看到了十六进制的字符,转换一下即可
F5直接进去,双击authenticate,有个加密函数
然后就是编写exp
s1 = [0x0000143A, 0x00001436, 0x00001437, 0x0000143B, 0x00001480, 0x0000147A, 0x00001471, 0x00001478, 0x00001463,0x00001466, 0x00001473, 0x00001467, 0x00001462, 0x00001465, 0x00001473, 0x00001460, 0x0000146B, 0x00001471,0x00001478, 0x0000146A, 0x00001473, 0x00001470, 0x00001464, 0x00001478, 0x0000146E, 0x00001470, 0x00001470,0x00001464, 0x00001470, 0x00001464, 0x0000146E, 0x0000147B, 0x00001476, 0x00001478, 0x0000146A, 0x00001473,0x0000147B, 0x00001480]
s2 = [0x00001401, 0x00001402, 0x00001403, 0x00001404, 0x00001405]
dest = s1
v4 = 0
flag = ''
v6 = len(s1)
v7 = len(s2)
while v4 < v6:
i = 0
while i < v7 and v4 < v6:
dest[v4] -= s2[i]
flag += chr(dest[v4])
v4 += 1
i += 1
print(flag)
s='c61b68366edeb7bdce3c6820314b7498'
v5=0
flag=''
while v5
直接放进ida打开
假设一个十六进制数0x12345678
大端的存储方式是:12,34,56,78,然后读取的时候也是从前往后读
小端的存储方式是:78,56,34,12,然后读取的时候是从后往前读取
所以,最后的flag应该是:DUTCTF{We1c0met0DUTCTF}
放进ida按F5,发现关键函数
执行了mov指令,接下来调用call,F8继续执行,执行完,edx存的就是flag的地址
直接带进ida,发现main函数下有一些判断
可以发现这些函数会跳到lable15的位置,然后,对lable15分析,发现特殊的字符串
猜测可能是一个8*8的迷宫
根据迷宫最后得到的flag: nctf{o0oo00O000oooo..OO}