BUUCTF-RE-不一样的flag
时间:2020-03-12
本文章向大家介绍BUUCTF-RE-不一样的flag,主要包括BUUCTF-RE-不一样的flag使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
养成扔PE的习惯
用IDA打开
1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 char v3; // [esp+17h] [ebp-35h] 4 int v4; // [esp+30h] [ebp-1Ch] 5 int v5; // [esp+34h] [ebp-18h] 6 signed int v6; // [esp+38h] [ebp-14h] 7 int i; // [esp+3Ch] [ebp-10h] 8 int v8; // [esp+40h] [ebp-Ch] 9 10 __main(); 11 v4 = 0; 12 v5 = 0; 13 qmemcpy(&v3, _data_start__, 0x19u); 14 while ( 1 ) 15 { 16 puts("you can choose one action to execute"); 17 puts("1 up"); 18 puts("2 down"); 19 puts("3 left"); 20 printf("4 right\n:"); 21 scanf("%d", &v6); 22 if ( v6 == 2 ) 23 { 24 ++v4; 25 } 26 else if ( v6 > 2 ) 27 { 28 if ( v6 == 3 ) 29 { 30 --v5; 31 } 32 else 33 { 34 if ( v6 != 4 ) 35 LABEL_13: 36 exit(1); 37 ++v5; 38 } 39 } 40 else 41 { 42 if ( v6 != 1 ) 43 goto LABEL_13; 44 --v4; 45 } 46 for ( i = 0; i <= 1; ++i ) 47 { 48 if ( *(&v4 + i) < 0 || *(&v4 + i) > 4 ) 49 exit(1); 50 } 51 if ( *((_BYTE *)&v8 + 5 * v4 + v5 - 41) == '1' ) 52 exit(1); 53 if ( *((_BYTE *)&v8 + 5 * v4 + v5 - 41) == '#' ) 54 { 55 puts("\nok, the order you enter is the flag!"); 56 exit(0); 57 } 58 } 59 }
从13行的_data_start__中得到以下信息
.data:00402000 public __data_start__ .data:00402000 __data_start__ db '*11110100001010000101111#',0
又结合16-20、51-53行可知这是一个迷宫
第51、53行中的5*v4可知这是一个5x5的迷宫
*1111 01000 01010 00010 1111#
从*走到#即可
flag就是通过迷宫的数字
原文地址:https://www.cnblogs.com/Nickyl07/p/12482635.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- TF-IDF算法(2)—python实现
- C语言定义数组时使用枚举作为数组的下标
- 机器学习(七)—回归
- C语言定义数组时使用枚举作为数组的下标 ——c99功能
- C语言——for循环和while循环的效率区别——类似哨兵思想
- 机器学习(八)—Apriori算法
- 机器学习(九)—FP-growth算法
- LeetCode — (1)
- Django初体验——搭建简易blog
- Python开发简单记事本
- 在stm32开发可以调用c标准库的排序和查找 qsort bsearch
- Python解析excel文件并存入sqlite数据库
- python学习总结
- C语言calloc()函数:分配内存空间并初始化——stm32中的应用
- 提升代码的运算速度——代码优化的方法总结