buuctf刷题
0x01 2019红帽杯easyre 2020.11.30
0x02 相册
感觉这题目稍微简单了点
看java文件,C2似乎会有一些定义,看看C2
猜测这个就是要发送的邮箱,经过base64解密
定义在so文件里了
打开so文件看到一些字符串,放到base64解一下试试
提交了即可
0x03 Universe_final_answer
0x04
0x05 新年快乐 2021.1.5
好久没做题了,最近在重刷408的一些知识来着…
upx脱壳
啊这,flag就很明显是HappyNewYear!了
0x06 [MRCTF2020]Transform1
1 | #define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff)) |
无壳,主函数如下:
流程:输入的字符串存储到v6,然后根据dword_40f040[i]的顺序将v6的值赋给byte_414040,然后和dword_40f040[i]的低8位做异或,得到的值和byte_40f0e0相同即可
0x07 [ACTF新生赛2020]SoulLike (python爆破 pwn/re)2021.1.12
无壳
主函数,前五位可知是actf{,最后一位是},中间我们输入的字符经过了sub_55D038那个函数的判定
进入这个函数,特别长,3000行,反编译需要久一点,可以看出我们输入的字符经过一大堆异或操作,最后和规定的字符对比,同时不符合的话会返回错误信息,可以知道错误在第几位,因此可以选择爆破
学习python爆破
利用pwn和re正则
re:
https://www.cnblogs.com/python-xkj/archive/2018/06/26/9231624.html
pwn库:
https://github.com/Gallopsled/pwntools-tutorial/blob/master/tubes.md#receiving-data
http://docs.pwntools.com/en/latest/
基本输入输出:
运行脚本即可得到flag
0x08 [MRCTF2020]PixelShooter(unity/安卓)2021.1.13
下载下来是一个apk,运行了下发现是个游戏
看来flag就是要打到一定的分数
用apktool反编译,找了下关键语句,发现并没有,陷入僵局
搜索了下unity相关信息:https://blog.csdn.net/weixin_44058342/article/details/87940908
原来unity的数据一般存在别的地方
用apktoolbox对apk进行反编译,提取出 game/assets/bin/data/Managed/Assembly-CSarp.dll,使用 ILSpy 打开即可看到dll,然后搜索flag关键词,找到对应点
然后就能找到flag了
是个简单题了
0x09 [FlareOn1]Bob Doge 2021.1.18
打开,是个.net文件
运行一下,发现要求我们解密这串字符串
使用dnspy反编译,找到main函数
跟进form1,定义了一个加密的按钮
查看按钮功能定义,是对一个dat_secret字符串的加密操作
在资源里我们可以看到这个字符串,31字节
一开始看的这个字符串,把前面5个字节也算进去了,后来发现前5个字节是一些定义
编写脚本:可以得知flag为text的内容,对text进行了两次加密操作最后输出的是text3
还有一种就是可以在程序上下断点,直接跑,但是我虚拟机上没有.net3服务所以跑不了…….
0x0A [FlareOn5]Ultimate Minesweeper 2021.1.19
打开,发现又是个.net的文件,运行后发现是个扫雷游戏
dnspy反编译一下
主函数:
找到了判定的函数:
看到一个getkey函数,猜测就是生成flag的函数,给了一个数组和一些操作
按照逻辑编了下脚本,跑出来发现不对
然后下断点,看生成的array2的值,然后尝试转换成ascii码,还是不对
那就调试从判定的地方直接跳到成功界面好了,还是不行
此时转换思路,干脆从生成的时候看看哪三个格子不是雷,直接通关好了
开始找初始生成函数:
Initialize函数生成初始界面
minefield生成了30*30
allocatememory里面有一个garbage collect
跟进去看是存储是否存在雷的判定值
下断点,查看garbagecollect的值,在一堆true当中找到3个false的对应坐标记录,然后尝试一下纵横的区别即可(调试两次发现生成的位置的值是固定的
通关即可得到flag
0x0B [GKCTF2020]Chelly’s identity 2021.1.19
这是我目前见过最恶心的题目,函数一个套一个都不知道是什么功能….全靠猜
放到ida里看看字符串
找到对应主函数位置:
输入的字符串存到v35,定义了一个16位的v34空数组
可以猜测是把v35给了v34,然后对v34进行4111BD函数操作和411721函数操作,然后用411852函数做判断
进入4111BD函数看看:
通过16和bad long,可以猜测是判断长度
进入411721函数:
可以看到定义了一个v10,长度还是16位,4116E0函数对v10和128数字进行了一些操作,v9是我们输入的字符串
进入4116E0函数:
定义了一个v6数组,长16位,然后在2-128之间,对i做了一个411672的函数判断,然后把i存到数组里
411672函数功能:
研究了一下发现是判断质数(a2%i
在411721函数下面的循环里,就可以简化一下理解
然后进入411852判断函数:
已知了操作算法和操作完后的数值,就可以编写脚本了