DDR爱好者之家 Design By 杰米

前言

"36967934_一、题目">一、题目

"https://attach.52pojie.cn/forum/202102/19/221744ntv8hwnhtmmomh8h.png" file="https://attach.52pojie.cn/forum/202102/19/221744ntv8hwnhtmmomh8h.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="1080" id="aimg_2212404" inpost="1" />

image-20210219180026397.png

1

没错,这是一个很皮的人写的题目。放张图片在这里让大家感受一下。

二、开搞开搞

2.0 下载文件

下载下来的文件就长这样,看起来并不是很漂亮,连图标都没有。。

跟着小菜鸡一起做CTF(一)

image-20210219180522629.png

2.1 收集文件信息

  1. 使用010editor查看文件类型

    跟着小菜鸡一起做CTF(一)

    image-20210219180940473.png

    啪一下很快啊,我们打开了这个文件,我一看,哎,这是一个ELF文件,哦,原来是linux下的文件,来偷袭我一个windows程序逆向老同志(由于笔者并没有配置linux调试环境,所以只能静态分析)

  2. 确定是否需要脱壳

    一般linux下的文件最多加个UPX壳,我们直接搜索UPX字符串,啊,搜不到,感觉没加。

    跟着小菜鸡一起做CTF(一)

    image-20210219181043464.png

  3. 看一看能否找到明码的flag

    由于是做的ctf题,所以我们直接搜一下flag字符串,看看静态文件中是否存在,好吧,很明显不存在

    跟着小菜鸡一起做CTF(一)

    image-20210219181138831.png

2.2 明确分析思路

这里我们用的是静态分析

  1. 寻找输入
  2. 寻找关键字符串
  3. 定位关键验证逻辑
  4. 分析关键验证逻辑,理清思路
  5. 模拟运行直接调试(没有搭环境,pass)运行得到flag

2.3 详细分析

  1. 将这一坨东西拖入IDA(此时我们可以喝个茶?等它慢慢跑完)

    加载完成后,我们可以看到IDA解析出来的函数,它还很贴心的帮我们分析出了main函数。

    跟着小菜鸡一起做CTF(一)

    image-20210219182056309.png

    7

  2. 双击进入main函数,看到如下一堆函数逻辑。

    跟着小菜鸡一起做CTF(一)

    image-20210219182241359.png

    哎~,看起来似乎作者并没有为难我们,所有功能都放main函数中的,我们甚至还找到了一些注册成功的输出。

    跟着小菜鸡一起做CTF(一)

    image-20210219182331855.png

    9

    有些玩破解的小伙伴就要问了,接下来是不是直接改跳转,让他跳转到Congratulations?当然不是啦!大家走错片场啦,这里是逆向哦。所谓逆向,就是要分析出写程序人的意图,然后让他明白,不管你怎么搞,我都能给你还原成原始代码,并搞你的心态,直接写注册码。接下来,就让我们一起走进这个开发者逗逼的内心世界吧。

  3. 辅助工具,On!

    由于该程序笔者并不想动态调试,加上程序逻辑清晰,并没有加一些花里胡哨的东西(例如花指令),这里就使用了IDA的灵魂,F5,一键还原伪代码。

    我们在main函数中直接F5,就能看到这段逻辑的伪码啦。

    跟着小菜鸡一起做CTF(一)

    image-20210219200843118.png

    10


    跟着小菜鸡一起做CTF(一)

    image-20210219200950816.png


    跟着小菜鸡一起做CTF(一)

    image-20210219201038933.png

    好的,有些长得帅的小伙伴们就要问了,这个是个甚摸神器啊,为什么这些代码我还是看不懂呢?就只有几个成功失败字符串,我们的flag呢?别急,我们将一起一步一步走进作者阴暗的心里世界。

  4. 修改伪码

    首先,我们对代码进行小小的整容外加修改(一系列的变量替换,函数名称替换,变量格式更改),使其更加符合我们的编程习惯。

    跟着小菜鸡一起做CTF(一)

    image-20210219213838160.png

    13


    跟着小菜鸡一起做CTF(一)

    image-20210219213904947.png

    14


    跟着小菜鸡一起做CTF(一)

    image-20210219213958032.png

    "https://attach.52pojie.cn/forum/202102/19/221936vrr0z6un0rgxx9u6.png" file="https://attach.52pojie.cn/forum/202102/19/221936vrr0z6un0rgxx9u6.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="1037" id="aimg_2212419" inpost="1" />

    image-20210219214551764.png

    16

    这样看起来并不直观,根据它的长度(64),以及最后的二维数组运算(mazeBuffer[8 * nPosY + nPosX]),我们可以大胆推断*它就是一个88 = 64大小的二维数组**。

    在数据区域使用IDA的另一个小功能微调,首先按d转换为data模式,然后在标签名右键array,选择如下设置

    跟着小菜鸡一起做CTF(一)

    image-20210219215451888.png

    17

    得到如下直观的二维数组

    跟着小菜鸡一起做CTF(一)

    image-20210219215506831.png

    好吧,并不是很直观,我们再按一下r键,让它以ascii显示,这下直观了

    跟着小菜鸡一起做CTF(一)

    image-20210219215554719.png

    19

    兄弟们,激动人心的时候到了

    为什么每一次操作,x,y都会变化呢?最后检查的为什么是#呢?x,y的初始值为什么是0,0呢?

    答案如下:

    这个mazeBuffer是一个游戏迷宫地图,我们之前分析出来的4个操作性字符(对x,y的值有影响的)Oo.0分别对应左右上下,也就是它会循环读取我们输入的操作性字符,然后让我们从上图的地图中虚拟移动,也就是改变我们的x,y坐标。(如果不明白x++,x--和左右的对应关系的,可以回想一下你们游戏辅助界面绘制的一些知识哟)。

    综上,我们得到了这个flag的终极解法。构造一条能从(0,0)点到达#位置的路径,只能走上图的空白处。现在兄弟们知道怎么走了么?大概就是nctf{右下右右下下左下下下右右右右上上左左},数一数,刚好24个字,然后打开你们的文本编辑器,将上下左右替换成对应的编码(上 ==>.   下==>0 左==>O 右==>o)

    至此,我们得到了我们最终的flag :nctf{o0oo00O000oooo..OO}

    至于验证方面,由于笔者懒得装linux系统,把flag提交上去跑了跑,官网显示通过,说明咱们分析正确了。

    现在,我们已经手把手的走完了整个旅途,是不是感觉ctf也不过如此呢?

2.4 总结

       1. 不要有畏惧心理,再难的程序也有被破解的一天,任何系统的程序只要能被反编译,就能被分析(**在此强烈吐槽某平台,新手题windows的就见到1道,做完新手题都累死我了**)。       2. 要善于使用工具,很多功能IDA啊,OD啊,或者xdbg会给我们提供,工具玩的好,逆向也会更加省时省力       3. 不要局限于破解,分析算法才是逆向的灵魂所在,就像我们今天走完的这段旅途,风景不也很美好么       4.大佬们轻点喷。

三、附件

ELF文件与修改好的IDA文件:跟着小菜鸡一起做CTF(一)MazeCtf.zip2021-2-19 22:22 上传点击文件名下载附件附件下载积分: 吾爱币 -1 CB
解压密码:www.52pojie.cn

DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米