Low Sodium Bagel

1
2
3
4
$ steghide extract -sf low-sodium-bagel.jpeg -p ""
wrote extracted data to "steganopayload4837.txt".
$ cat steganopayload4837.txt
utflag{b1u3b3rry_b4g3ls_4r3_th3_b3st}

关于steghide一些使用简单的爆破脚本https://blog.csdn.net/blood_seeker/article/details/81837571关于一些steghide参数介绍https://blog.csdn.net/qq_40657585/article/details/83931078

UTCTF adventure ROM

这一题要感谢dotsu师傅的指导,让我这个小白学到了一点东西。

首先是如何打开.gb文件,使用的是Gameboy反汇编追踪工具BGB,BGB 是一款运行于windows 的GameBoy,GameBoy Color 和 Super GameBoy 。模拟器打开的界面如下:

开始随便转了转,就DEAD了,然后看了大佬的解释说能输入ABCD,开始找了半天输入,后来才知道要站在每个方框内按A就可以输入了,这样我们可以猜测游戏逻辑,碰到隐藏的东西会死掉,输入不对会LOSER

用IDA分析文件中选择z80处理器,加载进去后还是binary文件,纠结了好久去问了dotsu师傅,最后给出了解决办法:IDA里edit->select all,然后按C键选force,这样会强制解析整个文件,但是里面的数据和字符串也会被解析为指令,可以对照着hex窗口,按A转为字符串或者按D转为数据。果然大佬就是大佬啊经验丰富,先找到放关键字的地方转字符串

然后找到引用字符串的函数,按x不管用,search->text也不行,只能手动找了,这里是我看到放关键字符串的地方下面就是sub_73b函数所以猜测引用在sub_33E这个函数里面,看流程图就找到了引用的函数,这样我们就能知道出现DEAD的逻辑了,然后nop掉(nop方法\x00),这样游戏的限制就没有了,同样的方法把所有的DEAD都nop掉,然后选择patch中应用到该文件中

再找到引用LOSER的函数,向上就能看到比较寄存器a,c的值,如果相等就继续循环,如果不相等就跳到LOAER处,那我们只要能弄清楚a和c谁存的是输入的,谁存的是正确值,就能拿到flag了。后面就是用gbg中的debugger来反汇编比较寄存器a,c的值,在比较处下断点,随便输入(F2下断点,F3单步执行,F9继续执行),gbg比较方便能修改寄存器的值修改指令知道结束,并把每一次寄存器c里面的值记录下来,连在一起就是flag。

mov

IDA加载发现全是MOV指令,可以大概知道使用了Movfuscator进行了混淆处理。

对于复杂一些的Movfuscator程序,可以尝试根据程序中字符串等信息,配合trace工具和下断点来追踪程序流程,并猜测程序逻辑(一般来说逻辑不会特别复杂)。此外,也可以尝试使用Demovfuscator进行反混淆,运气好的话说不定会解得比较好看。(这些都是dutsu师傅写的,小白正学习中)

在gdb中调试,遇到sigill信号会停住,然后发现栈中有一个字符”u”,再试一下就会发现utflag,继续就能得到flag。

关于Movfuscator的学习

根据官方介绍Movfuscator是一个单指令C编译器(the single instruction C compiler)