早上洗了一早上衣服突然想起虎符杯的事情,匆匆开了电脑啥也没解出来,对着大佬的WP复现。
S1lenc3师傅带带我~~
无壳,32位
MIPS的,使用ida7.5打开
ctrl+f搜索main,跳转到主函数F5反编译查看这有个判断函数,后面v10等于7有提到flag
看看函数server_check_redemption_code()
最后写着return k - v10 + 1;
那说明v10(新)==k - v10(旧) + 1;
v10(新)==7已经知道,现在需要找的是v10(旧)和k
还是看函数server_check_redemption_code()
跟着v10发现v10=v3,v3又是a2的长度,a2来自传参
回到main函数看
a2对应的是v14,v14来自v11,v11又经过了pre()
函数的处理
看看pre();
有一个判断,输入的字符串长度为0xE(14),然后v10和a1有关,,所以知道v10(旧)=14,那么k就是20了,然后发现又调用了函数server_check_redemption_code()
,并且还写到了v9,所以可以知道取了字符串Ninja Must Die 3 Is A Cruel Game, So Hard For Me
的前14位
也就是Ninja Must Die
我们发现从main函数调用的函数server_check_redemption_code()
还有一个v13没有看
顺着看过去发现了字符串I Love Ninja Must Die 3. Beautiful Art And Motive Operation Is Creative.
作为a1传过去,发现最后有一个检查v7和a1的第二十位是不是一样的
发现字符串I Love Ninja Must Die 3. Beautiful Art And Motive Operation Is Creative.
的第二十位和Ninja Must Die
的第十四位都是e
所以 flag是:flag{Ninja Must Die}