周末打了一下红帽杯,Reverse比较简单,简略写下writeup,好久没发帖子了,水一水
程序首先校验前四个字符是否在"qwertyuiopasdfghjklzxcvbnm1234567890"这个字符集
之后进行xxtea加密,密钥为前四个字符,明文为输入的19个字符+0x00000013,密文为6*32bits,24个字符
接下来是一个一一映射的关系,改变密文顺序,最后是一个比较简单的异或算法,结果与常量进行比较
直接还原出xxtea密文,爆破密钥,复杂度为36**4
flag{CXXand++tea}
main函数解出了一个提示还有彩蛋
根据提示最后发现了
尝试解一下
flag{Act1ve_Defen5e_Test}
前面是一个一一映射关系,改变输入字符串顺序,先不管
之后对输入字符串反修饰C++ 符号名
限定输入长度为31,输出长度为62,之后是一个简单的比较算法
先还原出c++函数名
得到原函数名
private: char __thiscall R0Pxx::My_Aut0_PWN(unsigned char )
根据c++规范手撸修饰后的符号,得到
?My_Aut0_PWN@R0Pxx@@AAEPADPAE@Z
前面说过有一个一一映射的关系,懒得逆了,输入
1234567890abcdefghijklmnopqrstu
得到输出
fg8hi94jk0lma52nobpqc6rsdtue731
直接将结果映射回去得到真正的输入,md5得到flag
flag{63b148e750fed3a33419168ac58083f5}
这道题是赛后才搞出来的,cpp、stl太恶心(还是太菜了
主要都是动态调试调出来的,程序逻辑大概就是输入三个整数然后计算
上面这一段是校验 输入的三个整数 x、y、z 中 x<z && y<x
接下来就是 加、减、乘、幂运算了,连蒙带猜理清了一些逻辑关系
这一部分计算了 (x+y)**3 - 3x\y*y - 3*x*x*y
下面还有一部分计算了 (z+4)**3 - 12*(z**2) - z*48 - 22
最终校验两部分是否相等
化简可以得到一个丢番图方程
x**3+y**3-z**3 == 42
参考f48K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6W2L8W2)9J5k6i4N6A6K9$3W2H3k6h3c8A6j5g2)9J5k6h3!0J5k6#2)9J5c8Y4N6A6K9$3W2Q4x3V1k6e0N6h3#2K6i4K6g2X3L8$3k6Q4y4h3k6@1K9s2u0W2k6g2)9#2k6X3y4#2j5X3g2K6
得到结果
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
最后于 2019-11-13 11:52
被丿feng编辑
,原因: