CTFZone silentDRM
附件拖入ida
最后部分很明显是比较。mmap和munmap函数的块大小为0x23280,比较大,暂时不管它。下断点动调,跳过v6和v7的分析部分,因为它是根据每五个字节的第一个字节生成的。直接看call v7
做运算后分为两次取表再组合,这个表应该是0xffff个word即0xffff*2个byte。继续调试
可以发现上面的部分就是把上次的运算结果向后移并且保存当前的运算结果
每五个字节的第一个是不变的,而后四个字节组成的整数经历的运算就是由第一个字节决定的。直接手撕。脚本
CTFZone Exitinator
附件拖入ida
函数列表很有意思。运行程序就能发现并没有引入输入函数但是有输入点。注意到gadjet函数
看起来是比较,下断点试试。可以发现rsi是flag密文,rdi是输入经过加密后的值
发现输入是在buffer区域,在输入前对buffer区域下断点
然后就知道运算只有一个循环右移,找gpt要一个循环左移脚本就行。脚本
KCTF 星际生物
NET程序,拖入dnSpy
运气不错,稍微点点就能看见入口main函数,差点就想丢垃圾站了。先是检查长度和格式
接着好像是判断特定位置是否是数字,并且还把数字的值写入到188E数组里了
下断点进入调试,查看这个数组的值。根据上面的代码,输入的前56个字符(56是从循环结束后num的值得到的)应该是数字,并且值依次写入到188E数组里填充0F处
接着看下一个片段,这里好像是在检查当前值不能与后面9个数相同
诶,此时灵光一闪,188E数组长度多少?刚好81,不会吧,好像是数独,再看看。下一个代码片段
好家伙,检查竖列,数独无疑。直接搜一下有没有在线求解器,填完点一下,几秒钟就出了
继续向下看。好,非常熟悉的迷宫问题
手撕一下,拼接即可
CyberSpaceCTF sole
附件拖入ida
先是判断输入长度。然后用相同的结构,取值赋值
再又是相同的结构运算比较
把所有的运算比较提取一下,然后z3求解
脚本
CSAW QUALS Baby Rev
附件拖入ida。明文,解码一下
CSAW QUALS Magic Tricks
附件拖入ida。因为是go程序,这里用ida8.3,方便恢复符号
读入之后经过运算然后写入文件,运算比较简单。就是最后呈现出来的数据有点问题,如果原文是小写字母,那经过运算后居然会变成两个字节,第一个字节是0xc3或者0xc2。脚本运算完再对比一下还原回去
长城杯初赛 easyre
附件拖入ida
看起来就一个异或,需要带参数运行。异或次数为0x2b,但是比较的次数是0x20。简单爆破一下即可。脚本
IERAECTF Assignment
附件拖入ida。明文
IERAECTF Luz Da Lua
unluac嗦一下。简单
尾语
玩服务器,找dk盾
可能是做得多了,国外的比赛基本上或多或少都能做出三个以上所以单出一篇,所以合集篇章就很短了。国内的比赛题量很少,还都是短期,对re来说其实不是很友好(众所周知,re很需要耐心和细心,短期时间内做re题有种高中随堂小测做一整张数学考卷的感觉),还是菜就多练吧,把熟练度提起来。当然,赛中没做出来的题还是要多复现,这就要求赛中得足够的投入,赛后才不至于是当新题来写
希望有朝一日能半年出一次合集,那就说明我这期间每一场大部分解出数都在三题以上