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}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Labuladong"是一个著名的算法题解博主,他的刷题笔记非常受欢迎。他的笔记具有以下几个特点: 1. 思路清晰:Labuladong的刷题笔记总是能够很清晰地阐述解题思路。他善于将复杂的问题简化为易于理解的小问题,并通过逐步引入关键概念和方法,帮助读者理解并掌握解题思路。 2. 逻辑严谨:Labuladong的刷题笔记经过深思熟虑,逻辑严谨。他会从问题的定义开始,逐步引入相关的概念和解题思路,循序渐进地解决问题。这种严谨的逻辑结构有助于读者理解和消化算法的核心思想。 3. 举例详细:Labuladong的刷题笔记通常会通过具体的例子来说明解题思路。这种举例的方式不仅能够帮助读者更好地理解解题方法,还可以帮助读者更好地应用这些方法解决其他类似的问题。 4. 知识点整合:Labuladong的刷题笔记不仅仅是一个题解,而是将相关的算法知识点整合起来,构建出一个完整的学习体系。他会引入一些底层的算法原理,将不同的解题方法进行比较和总结。这种整合的方式能够帮助读者更好地理解和掌握算法的本质。 总之,Labuladong的刷题笔记以其思路清晰、逻辑严谨、举例详细和知识点整合等特点,为广大读者提供了一种深入学习和理解算法的有效途径。通过阅读他的刷题笔记并进行实践,读者能够提高解题能力,并在面对各种算法问题时能够找到正确、高效的解决方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值