2.1【欢乐向】逆向刷题被虐哭日常记录

2.1【欢乐向】逆向刷题被虐哭日常记录

前面好多题之前做了也没记录,懒得整了,直接从剩下的几个开始:

Getit

这一段是解密的关键,后面的是把flag写入文档又给删了。

其实可以修改程序逻辑让他别删,但是我不会

2.1【欢乐向】逆向刷题被虐哭日常记录_第1张图片

 

逆着来推一边,不会写py,用c写个。

2.1【欢乐向】逆向刷题被虐哭日常记录_第2张图片

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第3张图片

 

?不应当,我大概是忘了加括号。

2.1【欢乐向】逆向刷题被虐哭日常记录_第4张图片

 

???我觉得我的没啥问题,去网上查了查相关的:

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第5张图片

 

 

在IDA里没看到有S,咱也不知道咋回事

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第6张图片

 

 

 

 

no-strings-attached

直接扔IDA瞅瞅:

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第7张图片

 

挨个函数筛,筛出最后一个有、东西。

 

 

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第8张图片

 

有个叫decrypt的函数,看起来像是加密函数,去gdb里下个断点看看。

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第9张图片

 

r运行,n单步走。

 

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第10张图片

 

中间那一大坨大概是没设置好,现学gdb怎么用先不管了。

查内存找字符串,

加密好的东西放进了寄存器eax里:

 

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第11张图片

 

翻翻寄存器里的东西,找到第一个0x00结尾的是字符串的结尾。

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第12张图片

 

x:就是用来查看内存中数值的,后面的200代表查看多少个,wx代表是以word字节查看看,$eax代表的eax寄存器中的值

在这里我们看到0x00000000,这就证明这个字符串结束了,因为,在C中,代表字符串结尾的就是"\0",那么前面的就是经过decrypt函数生成的falg

C:按字符格式显示,把这些十六进制的换成好看一点的。

 

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第13张图片

 

 

 

 

python-trade:

Pyc文件,网页反编译一下:https://tool.lu/pyc/

2.1【欢乐向】逆向刷题被虐哭日常记录_第14张图片

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第15张图片

 

翻译翻译,这堆字母让我们输入一串字符串,然后经过encode函数一系列操作之后和correct比较,正确了就算是输对了flag。

 

那咱们就反其道而行之。

先给他把correct给base64解密了。

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第16张图片

 

完事了之后在逆着走一遍。

2.1【欢乐向】逆向刷题被虐哭日常记录_第17张图片

 

 

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第18张图片

 

 

 

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第19张图片

 

再次被自己菜哭,我觉得没啥问题咋就不给我过?

又上网查了查,去评论转了一圈,发现有人说可能是base64解码的问题,我用的网页解码,不应该有差才对的,怪事。

补上了几个字符然后过了,正确的是这个:nctf{d3c0mpil1n9_PyC}

 

 

 

 

Maze

题目给的叫迷宫,运行了一下也没啥东西,扔进ida看看:

2.1【欢乐向】逆向刷题被虐哭日常记录_第20张图片

 

看起来像是四个字符:0oO.

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第21张图片

其实在IDA里把光标选择ASCII码按R键就可以把ASCII码变成字符了。

 

2.1【欢乐向】逆向刷题被虐哭日常记录_第22张图片

然后这几个是坐标移动

v9是一个二维数组,用来控制上下和左右这两种方向的。

两种可能:

1.v9代表横向、&v9+1代表竖向

2.v9代表竖向、&v9+1代表横向

反正是诶个试过去了

从左上角到#,经历→↓→→↓↓←↓↓↓→→→→↑↑←←,转换为o0oo00O000oooo..OO

Flag:nctf{o0oo00O000oooo..OO}

好像是南邮的题吧...真厉害。

 

还剩一个比较难搞,明天继续。

2.1【欢乐向】逆向刷题被虐哭日常记录_第23张图片

你可能感兴趣的:(2.1【欢乐向】逆向刷题被虐哭日常记录)