先看看c的源码

#include <stdio.h>
#include <fcntl.h> #define PW_LEN 10
#define XORKEY 1 void xor(char* s, int len){
int i;
for(i=; i<len; i++){
s[i] ^= XORKEY;
}
} int main(int argc, char* argv[]){ int fd;
if(fd=open("/home/mistake/password",O_RDONLY,) < ){
printf("can't open password %d\n", fd);
return ;
} printf("do not bruteforce...\n");
sleep(time()%); char pw_buf[PW_LEN+];
int len;
if(!(len=read(fd,pw_buf,PW_LEN) > )){
printf("read error\n");
close(fd);
return ;
} char pw_buf2[PW_LEN+];
printf("input password : ");
scanf("%10s", pw_buf2); // xor your input
xor(pw_buf2, ); if(!strncmp(pw_buf, pw_buf2, PW_LEN)){
printf("Password OK\n");
system("/bin/cat flag\n");
}
else{
printf("Wrong Password\n");
} close(fd);
return ;
}

让pw_buf 和 ^1过的pw_buf2相等就可以cat flag了

题目给了提示,operator priority,运算符优先,即<会优先于=,所以会先打开password,里面的内容大于0,所以获得的flase  即fd=0

if(fd=open("/home/mistake/password",O_RDONLY,) < )

因为fd=0,是标准输入,所以我们可以进行输入

  if(!(len=read(fd,pw_buf,PW_LEN) > )){
printf("read error\n");
close(fd);
return ;

那我们就可以输入pw_buf,之后在pw_buf2的位置输入一个10字节的数字并且异或1的值等于pw_buf,这样他们就相等,也就获得flag

这里我们让pw_buf等于0000000000,然后让pw_buf2等于1111111111  ,因为1111111111 ^1111111111=0

满足上面的if判断式

Mommy, the operator priority always confuses me :(

最新文章

  1. Hexo - 快速,轻量,强大的 Node.js 博客框架
  2. BZOJ 1082 【SCOI2005】 栅栏
  3. Android 闹钟设置
  4. Jeecms自定义标签用法[单个内容]
  5. Python简易爬虫
  6. mapreduce的基本思想
  7. mvp框架
  8. 深入理解计算机系统(2.3)------布尔代数以及C语言运算符
  9. JavaScript基础回顾
  10. DIY 温控烙铁
  11. 从一次输入框无法输入的bug,谈如何限制输入框输入类型
  12. 模拟赛20181016 Uva 1040 状压+搜索 2005 ACM world final problem c
  13. PHP不借助第三个变量交换值
  14. git 代码服务器的网页版gitweb的搭建
  15. 《Android源代码设计模式解析与实战》读书笔记(十)
  16. matplotlib01
  17. TCC(Tiny C Compiler)介绍
  18. css水波动画效果
  19. TcxScheduler的使用2
  20. SQL Server Connection Pooling (ADO.NET)

热门文章

  1. 使用java代码操作Redis
  2. 爬取沪深a股数据
  3. &lt;Array&gt; 54 (高频+hard )45
  4. 创建windows服务方法
  5. python request获取ip、获取登录设备
  6. QOS限速
  7. Linq分页排序通用方法
  8. Nginx反向代理及负载均衡介绍
  9. RocketMQ(4)---RocketMQ核心配置讲解
  10. php实现基础排序算法