SICTF2023 Round#3 Reverse
病毒分析不会555,求WP
1.babyC++
考点:签到
flag点击就送
2. Ez_pyc
考点:maze类
反编译,看出是数独之后用在线网站解就很简单了
3. SweetTofu
考点:动态调试
下个断点,调试,发现就是个简单异或
4. Artbreak
考点:脑洞
把Graph结点参数拉满后发现神奇的一幕
5. battle city
考点:打电动技术
相信各位都是打电动的高手吧
6. CloseMe
考点:Rust,动态调试,端序,心态
打开就会发现雌小鬼在狠狠地上嘴脸,怎么都关不了,ida打开发现一大坨代码,
没思路先一直往下翻,看到一个关键的异或
Patch下来运行,可以猜测是要通过按 “是否” 来达成输入flag的效果
然后就开始了悲剧的调试之旅
首先可以发现v52这个关键的数据,我们通过前面的代码分析可以得知flag为16个由0和1的数据,而v52就是把他们结合成一个大数
什么意思呢,就是我点“是是是是 否是是否 否是否是 是否是否”对应1,1,1,1 ,0,1,1,0, 0,1,0,1, 1,0,1,1
而v52的值就是1101101001101111 (此为大端序显示)
不过这个东西对我产生了误导,因为我以为后面那个函数是判断,然后调的我头昏眼花也没看出什么zzzzzzz
终于放弃后,往下继续调试(此处省略一万字
终于我发现了关键的地方,那就是v40这里的判断,才是真正的最后的判断!!!!!!!!!!!
然后我们可以输入不同的flag,来看看v40到底会变成什么样,
这里直接给出我的猜想:
我们输入的一串flag,如“1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,1”(此处为输入顺序),他会变成数据1010 0011 1110 0111
程序会把他进行一个补位的>>2操作 (关键)
然后变成1110 1000 1111 1001,然后再把他当成一个二进制数来看待
验证猜想:
输入"1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,1"(此处为输入顺序),得到v40为0xE8F9
发现猜想正确!!!!
那么就顺水推舟地逆出来了,密文是0xA9F1,即1010 1001 1111 0001
然后将他补位<<2,得到1010 0111 1100 0110
那么我们的输入顺序就应该是"0110 0011 1110 0101",即“否是是否 否否是是 是是是否 否是否是”
我们按以上顺序输入,发现程序被关闭了!
那么flag就出来了,即为SICTF{0110001111100101}
后言:
这段时间比赛超多,VN的逆向只出一题让我心态爆炸,然后又被SICTF的雌小鬼Closeme疯狂折磨,好在终于熬过去了,至于病毒分析,还得看各位师傅们的wp了
orzzzzzzzzzzzzz