DEF CON CTF Qualifier 2022 not-so-advanced writeup

admin 2022年6月21日14:06:07评论66 views字数 1527阅读5分5秒阅读模式
  • not-so-advanced writeup


DEF CON CTF Qualifier 2022 not-so-advanced writeup


最终解答队伍数60 / 总得分队伍数470
这道题目放出的时候,看见后缀为gba文件。
先使用file 命令查看
DEF CON CTF Qualifier 2022 not-so-advanced writeup

之前没有接触过对应文件格式的内容,使用https://fileinfo.com/extension/gba
查看后得知
GBA文件是任天堂Game Boy AdvanceGBA)视频游戏(如神奇宝贝、塞尔达或最终幻想)的ROM镜像。它包含一个GBA 戏的文件,保存的格式可以使用game Boy模拟器玩。
DEF CON CTF Qualifier 2022 not-so-advanced writeup

一个任天堂gameboy游戏 ,因此下载对应的VisualBoy Advance模拟器,这里我使用的是http://www.mgba.io/downloads.html 使用模拟器运行,界面很简单,只是输出了Read the codeshould be easy 。
使用键盘上的上下按键能够更改字母,发现都是a-z小写字母, 回车键为确认,会输出信息。
DEF CON CTF Qualifier 2022 not-so-advanced writeup

通过运行程序大致了解到程序会检查输入的值,与对应的值比对,来显示出不同的提示信息。
IDA载入能够看到一些字符串
DEF CON CTF Qualifier 2022 not-so-advanced writeup

但代码段无法进行反编译,
DEF CON CTF Qualifier 2022 not-so-advanced writeup

尝试使用Ghidra进行逆向,找到了关于GBA的插件,https://github.com/SiD3W4y/GhidraGBA
这里踩了一个坑,本机上使用的Ghidra版本是最新版,插件版本为10.1.导致Ghidra无法加载下载的插件,因此重新下载了10.1版本的Ghidra ,花了一些时间。 下载对应版本的Ghidra就可以直接载入插件了,就能对gba文件分析了。
插件放入的具体位置
DEF CON CTF Qualifier 2022 not-so-advanced writeup

Ghidra中新建项目 ,就能识别出来了
DEF CON CTF Qualifier 2022 not-so-advanced writeup

直接看entry
DEF CON CTF Qualifier 2022 not-so-advanced writeup

能看到字符串
"abcdefghijklmnopqrstuvwxyz_"
这个可能会作为最后解题所需的内容。
再根据界面上显示出来的值 进行关键信息定位
DEF CON CTF Qualifier 2022 not-so-advanced writeup

交叉引用
很容易就找到了程序对应的源码以及伪代码
DEF CON CTF Qualifier 2022 not-so-advanced writeup

很明显 FUN_08000568 就是main函数
FUN_08000e74就是printf函数,main函数代码如下
DEF CON CTF Qualifier 2022 not-so-advanced writeup

对应的汇编代码为
DEF CON CTF Qualifier 2022 not-so-advanced writeup
DEF CON CTF Qualifier 2022 not-so-advanced writeup
DEF CON CTF Qualifier 2022 not-so-advanced writeup

通过分析以上代码分析,main函数功能很少 ,只是获取输入并检查,
iVar1 = FUN_08000298(auStack268);
如果通过函数FUN_08000298的值处理后的值iVar1的值等于0x12E1,那么就可以通过程序,输出That works
而不是我们随便输入的值 ,输出DAT_08005ce4中的值(Nope
DEF CON CTF Qualifier 2022 not-so-advanced writeup

输入点只能小写字母,确认后进行验证,看代码还要满足值等于 0x12e1 ,否则会输入nope

DEF CON CTF Qualifier 2022 not-so-advanced writeup

现在就要着重分析函数FUN_08000298,其伪代码为
DEF CON CTF Qualifier 2022 not-so-advanced writeup
从以上代码可以从循环中分辨出输入长度必须为9
进入函数thunk_FUN_08000cc8
DEF CON CTF Qualifier 2022 not-so-advanced writeup

其调用了fun_08000ba0,继续看fun_08000ba0伪代码

DEF CON CTF Qualifier 2022 not-so-advanced writeup

DEF CON CTF Qualifier 2022 not-so-advanced writeup

DEF CON CTF Qualifier 2022 not-so-advanced writeup

很复杂,进行了大量的变量的处理,其实关注这两行代码就可以了
DEF CON CTF Qualifier 2022 not-so-advanced writeup


 thunk_FUN_08000cc8((uint)local_12 + (uint)*(byte *)(param_1 + local_18),0xfff1);     
 thunk_FUN_08000cc8((uint)local_14 + (uint)extraout_r1,0xfff1);

param_1这里是输入的值
通过分析以上代码,输入长度为9个字符。

那么最开始的 Abcdefghijklmnopqrstuvwxyz_ 要作为字符串输入。

且最终返回值为0x12E1 因此暴力破解写算法
DEF CON CTF Qualifier 2022 not-so-advanced writeup

DEF CON CTF Qualifier 2022 not-so-advanced writeup

DEF CON CTF Qualifier 2022 not-so-advanced writeup

成功。所以最后的flag aaaaaanzb
DEF CON CTF Qualifier 2022 not-so-advanced writeup

原文始发于微信公众号(山石网科安全技术研究院):DEF CON CTF Qualifier 2022 not-so-advanced writeup

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月21日14:06:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   DEF CON CTF Qualifier 2022 not-so-advanced writeuphttp://cn-sec.com/archives/1131757.html

发表评论

匿名网友 填写信息