0x06buuctfWP-1

buuctf刷题

0x01 2019红帽杯easyre 2020.11.30

image-20201201085705304

image-20201201085742513

image-20201130171506491

image-20201201085616273

0x02 相册

感觉这题目稍微简单了点

看java文件,C2似乎会有一些定义,看看C2

image-20201201092820389

猜测这个就是要发送的邮箱,经过base64解密 image-20201201092854869

定义在so文件里了

image-20201201092915874

打开so文件看到一些字符串,放到base64解一下试试

image-20201201092934423

提交了即可

image-20201201093307175

0x03 Universe_final_answer

image-20201201105908201

image-20201201105920622

image-20201201105853132

image-20201201105757817

0x04
image-20201201154823295 image-20201201154838647

image-20201201145640995

image-20201201150351743

image-20201201154732373

0x05 新年快乐 2021.1.5

好久没做题了,最近在重刷408的一些知识来着…

upx脱壳

image-20210105142217660

啊这,flag就很明显是HappyNewYear!了

0x06 [MRCTF2020]Transform1
1
2
3
4
#define LOWORD(l)           ((WORD)(((DWORD_PTR)(l)) & 0xffff))
#define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))
#define LOBYTE(w) ((BYTE)(((DWORD_PTR)(w)) & 0xff))
#define HIBYTE(w) ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff))

无壳,主函数如下:

image-20210111101152811

流程:输入的字符串存储到v6,然后根据dword_40f040[i]的顺序将v6的值赋给byte_414040,然后和dword_40f040[i]的低8位做异或,得到的值和byte_40f0e0相同即可

image-20210111101618314

0x07 [ACTF新生赛2020]SoulLike (python爆破 pwn/re)2021.1.12

无壳

主函数,前五位可知是actf{,最后一位是},中间我们输入的字符经过了sub_55D038那个函数的判定

image-20210112173435652

进入这个函数,特别长,3000行,反编译需要久一点,可以看出我们输入的字符经过一大堆异或操作,最后和规定的字符对比,同时不符合的话会返回错误信息,可以知道错误在第几位,因此可以选择爆破

image-20210112173225058

学习python爆破

利用pwn和re正则

re:

https://www.cnblogs.com/python-xkj/archive/2018/06/26/9231624.html

image-20210112173704852

pwn库:

https://github.com/Gallopsled/pwntools-tutorial/blob/master/tubes.md#receiving-data

http://docs.pwntools.com/en/latest/

基本输入输出:

image-20210112173902013

运行脚本即可得到flag

image-20210112172937305

0x08 [MRCTF2020]PixelShooter(unity/安卓)2021.1.13

下载下来是一个apk,运行了下发现是个游戏

image-20210113170627702

看来flag就是要打到一定的分数

用apktool反编译,找了下关键语句,发现并没有,陷入僵局

image-20210113170709008

搜索了下unity相关信息:https://blog.csdn.net/weixin_44058342/article/details/87940908

原来unity的数据一般存在别的地方

用apktoolbox对apk进行反编译,提取出 game/assets/bin/data/Managed/Assembly-CSarp.dll,使用 ILSpy 打开即可看到dll,然后搜索flag关键词,找到对应点

image-20210113171010243

然后就能找到flag了

image-20210113171034487

是个简单题了

0x09 [FlareOn1]Bob Doge 2021.1.18

打开,是个.net文件

运行一下,发现要求我们解密这串字符串

image-20210118155431597

使用dnspy反编译,找到main函数

image-20210118154848447

跟进form1,定义了一个加密的按钮

image-20210118154955211

查看按钮功能定义,是对一个dat_secret字符串的加密操作

image-20210118155028582

在资源里我们可以看到这个字符串,31字节

image-20210118155120940

image-20210118155142916

一开始看的这个字符串,把前面5个字节也算进去了,后来发现前5个字节是一些定义

image-20210118160846527

image-20210118160832519

编写脚本:可以得知flag为text的内容,对text进行了两次加密操作最后输出的是text3

image-20210118155516823

还有一种就是可以在程序上下断点,直接跑,但是我虚拟机上没有.net3服务所以跑不了…….

0x0A [FlareOn5]Ultimate Minesweeper 2021.1.19

打开,发现又是个.net的文件,运行后发现是个扫雷游戏

dnspy反编译一下

主函数:

image-20210119110433175

找到了判定的函数:

image-20210119110525343

看到一个getkey函数,猜测就是生成flag的函数,给了一个数组和一些操作

image-20210119110615575

按照逻辑编了下脚本,跑出来发现不对

image-20210119110834746

然后下断点,看生成的array2的值,然后尝试转换成ascii码,还是不对

那就调试从判定的地方直接跳到成功界面好了,还是不行

image-20210119111206877

此时转换思路,干脆从生成的时候看看哪三个格子不是雷,直接通关好了

开始找初始生成函数:

Initialize函数生成初始界面

minefield生成了30*30

allocatememory里面有一个garbage collect

image-20210119111455340

跟进去看是存储是否存在雷的判定值

image-20210119111427423

下断点,查看garbagecollect的值,在一堆true当中找到3个false的对应坐标记录,然后尝试一下纵横的区别即可(调试两次发现生成的位置的值是固定的

image-20210119111932177

通关即可得到flag

image-20210119110300267

0x0B [GKCTF2020]Chelly’s identity 2021.1.19

这是我目前见过最恶心的题目,函数一个套一个都不知道是什么功能….全靠猜

放到ida里看看字符串

image-20210119180742285

找到对应主函数位置:

image-20210119180823199

输入的字符串存到v35,定义了一个16位的v34空数组

可以猜测是把v35给了v34,然后对v34进行4111BD函数操作和411721函数操作,然后用411852函数做判断

进入4111BD函数看看:

image-20210119181207625

通过16和bad long,可以猜测是判断长度

进入411721函数:

image-20210119181252726

可以看到定义了一个v10,长度还是16位,4116E0函数对v10和128数字进行了一些操作,v9是我们输入的字符串

进入4116E0函数:

image-20210119181546277

定义了一个v6数组,长16位,然后在2-128之间,对i做了一个411672的函数判断,然后把i存到数组里

411672函数功能:

研究了一下发现是判断质数(a2%i

image-20210119181647509

在411721函数下面的循环里,就可以简化一下理解

image-20210119181453477

然后进入411852判断函数:

image-20210119180607388

已知了操作算法和操作完后的数值,就可以编写脚本了

image-20210120114006207