BUUOJ reverse 不一样的flag
不一样的flag
是不是做习惯了常规的逆向题目?试试这道题,看你在能不能在程序中找到真正的flag!注意:flag并非是flag{XXX}形式,就是一个’字符串‘,考验眼力的时候到了! 注意:得到的 flag 请包上 flag{} 提交
ida看伪C代码:
int __cdecl main(int argc, const char **argv, const char **envp)
{
char v3; // [esp+17h] [ebp-35h]
int v4; // [esp+30h] [ebp-1Ch]
int v5; // [esp+34h] [ebp-18h]
signed int v6; // [esp+38h] [ebp-14h]
int i; // [esp+3Ch] [ebp-10h]
int v8; // [esp+40h] [ebp-Ch] __main();
v4 = ;
v5 = ;
qmemcpy(&v3, _data_start__, 0x19u);
while ( )
{
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 == )
{
++v4;
}
else if ( v6 > )
{
if ( v6 == )
{
--v5;
}
else
{
if ( v6 != )
LABEL_13:
exit();
++v5;
}
}
else
{
if ( v6 != )
goto LABEL_13;
--v4;
}
for ( i = ; i <= ; ++i )
{
if ( *(&v4 + i) < || *(&v4 + i) > )
exit();
}
if ( *((_BYTE *)&v8 + * v4 + v5 - ) == )
exit();
if ( *((_BYTE *)&v8 + * v4 + v5 - ) == )
{
puts("\nok, the order you enter is the flag!");
exit();
}
}
}
可以看到每次都将用户的输入存到v6里面,然后根据v6的值来调整v4和v5的值,输入1就让v4-- 2就让v4++ 3就让v5-- 4就让v5++
下面这一段代码说明v4 和v5取值都必须在0~4之间:
for ( i = ; i <= ; ++i )
{
if ( *(&v4 + i) < || *(&v4 + i) > )
exit();
}
关键在于这一段代码:
if ( *((_BYTE *)&v8 + * v4 + v5 - ) == )
exit();
if ( *((_BYTE *)&v8 + * v4 + v5 - ) == )
{
我们仔细看主函数的代码,发现v8是一直没有动过的,再仔细算一下 &v8 + 5 * v4 + v5 - 41 这个偏移量是 &v8-41 到&v8-17之间,也就是完全落在v3的25个值里面!
他的逻辑是 如果算出来&v8 + 5 * v4 + v5 - 41 这个偏移量对应的值如果是1就退出,否则继续,直到找到“#”这个值
所以这个题本质上是个走迷宫.........
纯手走的 答案是:222441144222
BUUOJ reverse 不一样的flag的更多相关文章
- BUUOJ reverse SimpleRev (爆破)
SimpleRev SimpleRev(flag需加上flag{}再提交) 注意:得到的 flag 请包上 flag{} 提交 拖到ida 找到关键函数: unsigned __int64 Decry ...
- BUUOJ reverse 刮开有奖
刮开有奖 这是一个赌博程序,快去赚钱吧!!!!!!!!!!!!!!!!!!!!!!!!!!!(在编辑框中的输入值,即为flag,提交即可) 注意:得到的 flag 请包上 flag{} 提交 拖到id ...
- [BUUCTF]REVERSE——不一样的flag
不一样的flag 附件 步骤 例行查壳儿,32位程序,无壳儿 32位ida载入,shift+f12检索程序里的字符串,看到了如图标记的字符串,加上下面又上下左右的选项,估计是道迷宫类型的题目 将迷宫字 ...
- 【一天一道LeetCode】#7. Reverse Integer
一天一道LeetCode系列 (一)题目 Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, ...
- leetCode(62)-Reverse Integer
题目: Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 clic ...
- leetcode:Reverse Integer 及Palindrome Number
Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, retur ...
- BUUOJ [BJDCTF 2nd]elementmaster
[BJDCTF 2nd]elementmaster 进来就是这样的一个界面,然后就查看源代码 转换之后是Po.php,尝试在URL之后加上看看,出现了一个“.“ ....... 迷惑 然后看了wp 化 ...
- bzoj3506 [Cqoi2014]排序机械臂
bzoj3506 此题是一道比较简单的spaly题目. 用splay维护序列,将每个点排到对应的位置之后删除,这样比较容易区间翻转. 我的指针写法在洛谷上AC了,但在bzoj上RE. #include ...
- Word Reversal
For each list of words, output a line with each word reversed without changing the order of the wo ...
随机推荐
- Unicode规范中的BOM 和 ISO8891-1编码
Unicode规范中的BOM Unicode规范中有一个BOM的概念.BOM——Byte Order Mark,就是字节序标记.在这里找到一段关于BOM的说明: 在UCS 编码中有一个叫做" ...
- nodejs (下)(设置响应参数)
响应: 可以自定义设置状态码(状态码范围内的):res.statusCode = 404; 修改响应头信息: res.setHeader('content-type','text/html ...
- maven报错1
错误1 错误2 缺少mapper文件 错误3 缺少映射文件 <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉. --> <build> <re ...
- Mockito 2 参数匹配器
Mockito 通过使用 equals() 这种自然的 Java 样式来校验参数值.有时候,当需要有其他一些灵活性的时候,你可能会要求使用参数匹配(argument matchers). 请参考下面的 ...
- 51 Nod 1116 K进制下的大数
1116 K进制下的大数 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 有一个字符串S,记录了一个大数,但不知这个大数是多少进制的,只知道这个数 ...
- 微信小程序简单的推送消息流程
1.进入开发设置-消息推送,启用消息推送 url: 启用并设置消息推送配置后,用户发给小程序的消息以及开发者需要的事件推送,都将被微信转发至该服务器地址中. 2.创建消息模板. 3.WXML代码: 4 ...
- D. Make a Permutation!(思维)
D. Make a Permutation! time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- HDU 5810 Balls and Boxes ——(数学,概率,方差)
官方题解看不太懂,参考了一些人的博客以后自己证明如下: 其中D(X)和E(X)的公式如下(参考自百度百科): 其中 p = 1 / m .(这是每一个单独事件发生的概率期望,在这里单独事件指的是一个球 ...
- redis 持久化 RDB
https://blog.csdn.net/u010028869/article/details/51792197
- Java 注解指导手册(上)
编者的话:注解是java的一个主要特性且每个java开发者都应该知道如何使用它. 我们已经在Java Code Geeks提供了丰富的教程, 如Creating Your Own Java A ...