怎么在网站做推广,网站建设工作室门头,做外贸生意用哪个网站,安徽蚌埠怀远县建设局网站不一样的flag 是不是做习惯了常规的逆向题目#xff1f;试试这道题#xff0c;看你在能不能在程序中找到真正的flag#xff01;注意#xff1a;flag并非是flag{XXX}形式#xff0c;就是一个’字符串‘#xff0c;考验眼力的时候到了#xff01; 注意#xff1a;得到的 … 不一样的flag 是不是做习惯了常规的逆向题目试试这道题看你在能不能在程序中找到真正的flag注意flag并非是flag{XXX}形式就是一个’字符串‘考验眼力的时候到了 注意得到的 flag 请包上 flag{} 提交 ida看伪C代码 int __cdecl main(int argc, const char **argv, const char **envp)
{char v3; // [esp17h] [ebp-35h]int v4; // [esp30h] [ebp-1Ch]int v5; // [esp34h] [ebp-18h]signed int v6; // [esp38h] [ebp-14h]int i; // [esp3Ch] [ebp-10h]int v8; // [esp40h] [ebp-Ch]
__main();v4 0;v5 0;qmemcpy(v3, _data_start__, 0x19u);while ( 1 ){puts(you can choose one action to execute);puts(1 up);puts(2 down);puts(3 left);printf(4 right\n:);scanf(%d, v6);if ( v6 2 ){v4;}else if ( v6 2 ){if ( v6 3 ){--v5;}else{if ( v6 ! 4 )
LABEL_13:exit(1);v5;}}else{if ( v6 ! 1 )goto LABEL_13;--v4;}for ( i 0; i 1; i ){if ( *(v4 i) 0 || *(v4 i) 4 )exit(1);}if ( *((_BYTE *)v8 5 * v4 v5 - 41) 49 )exit(1);if ( *((_BYTE *)v8 5 * v4 v5 - 41) 35 ){puts(\nok, the order you enter is the flag!);exit(0);}}
} 可以看到每次都将用户的输入存到v6里面然后根据v6的值来调整v4和v5的值输入1就让v4-- 2就让v4 3就让v5-- 4就让v5 下面这一段代码说明v4 和v5取值都必须在0~4之间 for ( i 0; i 1; i ){if ( *(v4 i) 0 || *(v4 i) 4 )exit(1);} 关键在于这一段代码 if ( *((_BYTE *)v8 5 * v4 v5 - 41) 49 )exit(1);if ( *((_BYTE *)v8 5 * v4 v5 - 41) 35 ){ 我们仔细看主函数的代码发现v8是一直没有动过的再仔细算一下 v8 5 * v4 v5 - 41 这个偏移量是 v8-41 到v8-17之间也就是完全落在v3的25个值里面 他的逻辑是 如果算出来v8 5 * v4 v5 - 41 这个偏移量对应的值如果是1就退出否则继续直到找到“#”这个值 所以这个题本质上是个走迷宫......... 纯手走的 答案是222441144222 转载于:https://www.cnblogs.com/dyhaohaoxuexi/p/11421648.html