0x02xctf新手训练题

xctf新手训练题

0x1 open-source

下载文件后可以直接看源码

image-20201022173337438

要求是输入4个参数,第一个参数为’0xcafe’,第二个参数是符合判定条件的int值,第三个参数是’h4cky0u’,然后进行一些数据操作得到hash,并用十六进制方式输出(%x)

编写脚本实现,得到flag为0xc0ffee

image-20201021172112641

0x2 simple-unpack

提示是加了壳的二进制文件,查壳

image-20201022173809443

一开始不知道怎么脱二进制文件的壳,参考:https://bbs.pediy.com/thread-157645.htm

到软件中提示的地址下载脱壳程序进行脱壳(https://github.com/upx/upx/releases)

image-20201022173853002

脱壳成功后用IDA查看,即得到flag

image-20201022174038951

0x3 logmein

查看下载的文件

image-20201022174115535

用IDA找到对应关键字进行分析

image-20201022174143070

重点函数:

image-20201023171541380

编写脚本即可

image-20201023171351848

注意:小端模式

0x4 insanity

下载文件后直接编辑器就能查看到flag

0x5 getit

IDA中反编译

image-20201022174234603

image-20201022174338459

可以看到t就是flag,我们需要知道?的数值,编写脚本即可得到flag

image-20201022111119084

此题注意:python中字符串是不可以直接操作修改的,可以先改为列表,然后重新生成

0x6 python-trade

.pyc后缀的文件,直接用EasyPythonDecompiler解了,获得源码

24CD274DE2E7A49AC28DC75BFF631FA2

CF034599DBEAC7285F7E5C9C744EBB6D

BB56738DB65555D9FF8F1424320439CB

可以看到操作:对输入的字符串进行自定义的encode操作然后用base64加密

编写脚本解码即得flag

image-20201022113051197

0x7 re1

放进IDA查看

查看主函数,可以看到只要输入的字符串和v5相同就可以了,找到对应v5的值即可得flag

image-20201022183057868

image-20201022175340918

0x8 Hello,CTF

用IDA打开,找到主要函数

image-20201022175837176

从下面的循环判定值为17和上面v13的长度为34猜测出两位代表一个字符

十六进制转ASCII即可得flag

image-20201022175959301

0x9 no-string-attached

IDA中查看主函数

image-20201022180039861

进入每个函数看看

先看banner()

image-20201022180101213

就是打印一些东西,查看对应打印的数值(unk_80488B0和8048960)

image-20201022180251090

可以看到是两个字符串,就是一些欢迎的信息之类的

查看下一个,也是打印一些信息,需要你输入字符串

image-20201022180356018

image-20201022180449834

再看下一个,是主函数了,只要输入的函数和s2相同即可,s2是两个输入进行decrypt操作后得到的值

image-20201022180527832

看decrypt,对两个宽字节进行了操作。编写脚本实现功能即可得flag

image-20201022180623954

image-20201022141847145

0xA csaw2013reversing2

IDA中看主函数

image-20201022180506157

通过运行程序,发现并不会进入if的判定。

lpMem+1就是我们需要知道的乱码消息

image-20201022181008895

可以知道通过memcpy_s操作将unk_409B10的数据给了lpMem

image-20201022181020276

查看sub_401000

image-20201022181112925

是对lpMem进行了一些操作的,猜测是由于并没有运行,所以出现乱码

用IDA动态调试(debugger),下断点

image-20201022181352168

跳过进入判定后的ExitProcess(),直接跳到下面弹出messageboxA的地方,就能得到flag了

image-20201022181317768

0xB maze

看题目就知道是一个迷宫题

IDA中找主函数

image-20201022181455862

看到这四个不同函数的判断,猜测应该就是上下左右了

image-20201022181522773

分别点进去查看,得知’O’为左,’o’为右,’.’为上,’0’为下,并且在函数中有规定了8这个边界值

image-20201022181719854

接下来找迷宫和终点

image-20201022181743142

通过最终判定的条件,可以知道终点是’#’

image-20201022181833592

601060就是需要找的迷宫

image-20201022183115702

image-20201022183129721

在HEX界面查看

image-20201022181923615

根据边界值8重新排列,23就是终点,只走20即可得flag

image-20201022182143651