提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
BUUCTF刷题笔记
1.easyre
下载好附件好,先用PE查壳
发现没有壳,将文件拖入ida中
发现flag,flag{this_Is_a_EaSyRe}
2.reverse1
首先将下载好的文件拖入PE查壳
发现没有壳,再拖入ida,先在左侧找到主函数main,然后F5进行反编译
分析代码,需要将“Str2”进行加密,操作为将“o”变成“0”
所以flag为flag{hell0_w0rld}
3.reverse2
首先将文件拖入PE中查壳
没有壳,再将文件拖入ida,在左侧找到主函数main,然后F5反编译
双击flag之后可以得到
然后分析代码
将“i”或者“r"变成“1”,最终flag为
flag{hack1ng_fo1_fun}
4.内涵的软件
首先将文件拖入PE查壳
没有壳之后拖入ida,在左侧找到主函数main,F5反编译
找到flag,flag为flag{49d3c93df25caad81232130f3d2ebfad}
5.新年快乐
首先将文件拖入PE查壳
发现文件是有壳的,upx的壳
将文件脱完壳后,再将文件拖入ida,在左侧找到主函数main,然后F5反编译
分析代码,进行一个比较
最终flag为flag{HappyNewYear!}
6.xor
首先将文件拖入PE查壳
没有壳,直接拖入ida,在左侧找到主函数main,然后F5反编译
双击global
分析代码,将下一个和之前一个进行异或运算,但是global中既有数据还有字符,全部转成ascii码,进行异或
a=[0x66,0x0A,0x6b,0x0C,0x77,0x26,
0x4f,0x2e,0x40,0x11,0x78,0x0D,
0x5a,0x3b,0x55,0x11,
0x70,0x19,0x46,0x1F,0x76,0x22,
0x4d,0x23,0x44,0x0E,0x67,
0x06,0x68,0x0F,0x47,0x32,0x4f]
s=' '
s+='f'
for i in range(1,len(a)):
s+=chr(a[i]^a[i-1])
print(s)
得到flag,flag{QianQiuWanDai_YiTongJiangHu}
7.reverse3
首先将文件拖入PE查壳
没有壳,将文件拖入ida,在左侧找到主函数main,F5反编译
分析代码,首先输入Str,然后进行sub_4110BE加密,然后又进行for循环得到Destination,最后是Destination与Str2进行比较
然后查看一下加密
发现是base64加密
脚本如下
import base64
str='e3nifIH9b_C@n@dH'
flag=' '
for i in range(len(str)):
flag+=chr(ord(str[i])-i)
flag=base64.b64decode(flag)
print(flag)
最终flag为flag{i_l0ve_you}
8.不一样的flag
首先将下载好的文件拖入PE查壳
发现没有壳,再将文件拖入ida,在左侧找到主函数main,然后F5反编译
分析代码,是一个迷宫
碰到“#”输出flag
*11110100001010000101111#正好是25位
再根据代码,走迷宫,应该是222441144222
最终flag为flag{222441144222}
9.SimpleRev
首先将文件拖入PE查壳
发现没有壳,再将文件拖入ida,在左侧找到主函数main,然后F5反编译
点击进入Decry()函数
分析代码
join连接key3和v9
然后将key1的值复制给key
再连接key和src
所以text = killshadow
所以key = ADSFKNDCLS
继续分析,key[v3%v5]大写字母转为小写
如果!strcmp(text ,str2),则正确,strcmp函数,是比较函数,如果两个字符串相同,则等于0,所以text = str2。
接下来写脚本
lt='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
key=list('ADSFKNDCLS'.lower())
klens=len(key)
text='killshadow'
flag=''
for i in range(len(text)):
str2=text[i]
for c in lt:
if str2== chr((ord(c) - 39 - ord(key[i % klens]) + 97) % 26 + 97):
flag+=c
print('flag{'+flag+'}')
最终flag为flag{KLDQCUDFZO}
10.[GXYCTF2019]luck_guy
首先下载好文件将文件拖入PE查壳
查完发现没有壳,直接将文件拖入ida,在左侧找到主函数,F5反编译
然后点击进入welcome()函数,发现没有什么用
再点击进入patch_me()函数
分析一下,发现flag就是将f1和f2连接起来
f1已经得到,只要得到f2就得到flag
f2在case 4和case 5进行加密
icug`of\x7F全部转化成ascii码,脚本如下:
f2 = [0x69, 0x63, 0x75, 0x67, 0x60, 0x6f, 0x66, 0x7f]
flag = 'GXY{do_not_'
for j in range(8):
if (j % 2 == 1):
flag += chr(f2[j] - 2)
else:
flag += chr(f2[j] - 1)
print(flag)
最后flag为flag{do_not_hate_me}
11.[BJDCTF2020]JustRE
首先将文件拖入PE查壳
查完没有壳,再将文件拖入ida中,然后F5反编译,随便点击了几个函数
这个falg很简单,%d%d就是后面的19999和0;
最终flag为flag{1999902069a45792d233ac}
12.[GWCTF 2019]pyre
下载完之后发现文件后缀是pyc,反编译python,上网寻找一个在线网站
分析代码,进行了一步运算和异或,脚本如下:
code = ['\x1f','\x12','\x1d','(','0','4','\x01','\x06','\x14','4',
`',','\x1b','U','?','o','6','*',':','\x01','D',';','%','\x13']
l=len(code)
flag=' '
for i in range(l-2,-1,-1):
code[i]=chr(ord(code[i])^ord(code[i+1]))
for i in range(len(code)):
flag+=chr((ord(code[i])-i)%128)
print(flag)
最后flag为flag{Just_Re_1s_Ha66y!}
13.[ACTF新生赛2020]easyre
下载好文件将文件拖入PE中查壳
发现是upx的壳
脱完壳之后拖入ida,在左侧找到主函数,F5反编译
点击打开data-start函数
分析代码,将*F’“N,”(I?+@转化成ascii码,然后作为v4的下标并且-1,对照data-start得到flag,脚本如下:
key = '~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(\'&%$# !"' #要加\
encrypt = [42,70,39,34,78,44,34,40,73,63,43,64]
x = []
flag = ''
for i in encrypt:
x.append(key.find(chr(i))+1)`
for i in x:
flag += chr(i)
print(flag)
最终flag为flag{U9X_1S_W6@T?}
14.[ACTF新生赛2020]rome
下载好文件后先将文件拖入PE查壳
没有壳再拖入ida,在左侧找到主函数main,F5反编译
分析代码,flag是v12
加密,然后在和v12对比,脚本如下:
data = 'Qsw3sj_lz4_Ujw@l'
flag = ''
for i in range(16):
for j in range(127):
tmp = j
if j>64 and j <= 90:
j = (j-51) % 26 + 65
if j>96 and j<=122:
j = (j - 79) % 26 + 97
if chr(j) == data[i]:
flag += chr(tmp)
print(flag)
得到最终flag为flag{Cae3ar_th4_Gre@t}