【CTF对抗-simple一道逆向题的思考】此文章归类为:CTF对抗。
1、学习了一道逆向的CTF题,分享下思路
先看主函数,比较简单的想法,就是输入flag然后经过几个对比判断得到congratulations这个结果
(upload/attach/202408/966049_742YS7F2HXDHGST.webp))
这里主要有三个判断条件。作为新手,我只能正面搞下,还是一个个的来解决判断条件。
2、第一个判断条件
第一个判断条件比较简单,第16位是个-就可以了,这样就绕过成功了,这个就不提了
3、第二个判断条件
进入sub_401192函数看下
这里把这些ascii都转成字符串
转成字符串之后,相信很多大佬就已经知道怎么解了,但是作为新手的我,我不知道哈哈哈,我只能想笨办法自己慢慢推。
要求是从aAB这个数组中取B这个字符,并且要求每次循环都要落在字符’.’上。
看了一眼这个计算的表达式以及’B’、’.’的位置,我决定从以下两个点进行破局
理由就是前不着村后不着店,ad都是加减1,落在上述位置的必定是S或w逆推回去之后可以很快得出来结果,往回倒2,3次就可以。
但是后来问了别人,他们说这个是常见的CTF迷宫图,顺便给我讲解了一下,很快可以理解,虽然从逻辑上与我这个没差别,但是更直观,因为是*11,所以就按照11来划分,把上述表划分为
那么怎么走就很简单了,不断按wasd使得从A走到B就可以了,这样方法更直观,也确实比我那个方法更快,以后可以作为小技巧,但是我估计实际情况应该是没这种东西。
动态调试了下,答案没问题,第二个条件也判定成功。
4、第三个判断条件
第三个就有点变态了对我刚接触逆向的人来说,居然要动态调试才可以,还好不知道什么时候听别人说过动态调试,去研究了下,调成功了。这里有个要注意的,调试的时候别用kali,内存一直会报错,换成ubuntu就没问题。。。
正常来分析,分别是开辟内存,src写了个内容,copy了memory。然后dest作为指针调用了函数,分别是V7,V4跟byte404320,最后把V7作为输入到401342.
分别看下40126F跟401342
401342比较简单,就是一个对比,要求对比出来的值跟r60ihyZ/m4lseHt+m4t+mIkc一样就ok了,这个不多考虑,重点考虑前一个函数。
40126F主要是两个数据的异或,一开始我没想明白,这一步的作用是什么,为什么要搞这个东西,然后还把异或之后的结果输出。这一步卡了我2个小时,哭泣。
后来也是读了很多遍这个代码,才想到,是不是异或之后实际是一串代码,然后输入了到了dest这里动态写了函数。Ok,那就动态调试下,看下如何绕过这个部分。Ubuntu,启动!
动态调试之后,先过第一第二重if,进入第三重,写进memory,到call r8这里按下p F7 F5这些,进入了之前动态写的函数,接下来就是一马平川了,这个部分就是一个base64的加密算法。两个特征,一个%3,一个是=填充。
之后是调用了byte_404320,实际也就是base64 的table
最后解密,拼接就好了
得到最终的flag
flag{ssddddwddddssas-J1aR@j1w@nch1sh3m3}
最后于 20小时前
被mb_ccaadaoz编辑
,原因:
更多【CTF对抗-simple一道逆向题的思考】相关视频教程:www.yxfzedu.com