GFSJ0375-【serial-150】
花指令
题目简介
Run and capture the flag!
从简介可以看出来 可以动调获取flag 因为是跑起来获取flag
进去能看到有花指令 我们去除花指令 我自己写了一个一键去除花指令的IDA插件 要的可以联系我领取
- 去除花指令方法
- 动调
随便下一个断点 F8一步一步走 到这里会出现让你输入 我们随便输入一个 额 剧透一波 输入16位
长度验证
第一个字符验证
最后一个字符验证 采用了一种比较绕的方法
如图0xF 不就是15吗 正好16位 然后两个add了一下跟155比较
然后算一下 86 那不就是V吗 对不对
然后就是以此类推
- flag
flag直出
int __fastcall main(int argc, const char **argv, const char **envp)
{
__int64 v3; // rdx
char s[512]; // [rsp+0h] [rbp-200h] BYREF
memset(s, 0, sizeof(s));
std::operator<<<std::char_traits<char>>(&std::cout, "Please Enter the valid key!\n", 32);
std::operator>><char,std::char_traits<char>>(&std::cin, s);
if ( strlen(s) != 16 )
goto LABEL_19;
if ( s[0] != 69 )
goto LABEL_19;
v3 = 69;
if ( s[15] != 86 )
goto LABEL_19;
if ( s[1] == 90
&& (v3 = 90, s[14] == 65)
&& s[2] == 57
&& (v3 = 57, s[13] == 98)
&& s[3] == 100
&& (v3 = 100, s[12] == 55)
&& s[4] == 109
&& (v3 = 109, s[11] == 71)
&& s[5] == 113
&& (v3 = 113, s[10] == 57)
&& s[6] == 52
&& (v3 = 52, s[9] == 103)
&& s[7] == 99
&& (v3 = 99, s[8] == 56) )
{
std::operator<<<std::char_traits<char>>(&std::cout, "Serial number is valid :)\n", 99);
return 0;
}
else
{
LABEL_19:
std::operator<<<std::char_traits<char>>(&std::cout, "Serial number is not valid!\n", v3);
return 0;
}
}
flag
EZ9dmq4c8g9G7bAV
评论