攻防世界--open-source
时间:2019-08-21
本文章向大家介绍攻防世界--open-source,主要包括攻防世界--open-source使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.打开源码
打开源码
1 #include <stdio.h> 2 #include <string.h> 3 4 int main(int argc, char *argv[]) { 5 if (argc != 4) { 6 printf("what?\n"); 7 exit(1); 8 } 9 10 unsigned int first = atoi(argv[1]); 11 if (first != 0xcafe) { 12 printf("you are wrong, sorry.\n"); 13 exit(2); 14 } 15 16 unsigned int second = atoi(argv[2]); 17 if (second % 5 == 3 || second % 17 != 8) { 18 printf("ha, you won't get it!\n"); 19 exit(3); 20 } 21 22 if (strcmp("h4cky0u", argv[3])) { 23 printf("so close, dude!\n"); 24 exit(4); 25 } 26 27 printf("Brr wrrr grr\n"); 28 29 unsigned int hash = first * 31337 + (second % 17) * 11 + strlen(argv[3]) - 1615810207; 30 31 printf("Get your key: "); 32 printf("%x\n", hash); 33 34 return 0; 35 }
2. 分析
很明显,第29行计算flag,第32行代码输出十六进制形式。第29行代码就是利用argv[1]~argv[3]的数据进行计算。
2.1 argv[1]
if (first != 0xcafe) { printf("you are wrong, sorry.\n"); exit(2); }
不等于0xcafe就退出,那first=0xcafe
2.2 argv[2]
if (second % 5 == 3 || second % 17 != 8) { printf("ha, you won't get it!\n"); exit(3); }
满足if条件就退出,我想到第一个不满足的数就是25,second = 25
2.3 argv[3]
if (strcmp("h4cky0u", argv[3])) { printf("so close, dude!\n"); exit(4); }
相等strcmp返回0,退出if条件,那argv[3]=“h4cky0u”
3.get flag!
综上,写出解flag代码
#include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { int first = 0xcafe; int second = 25; argv[3] = "h4cky0u"; printf("Brr wrrr grr\n"); unsigned int hash = first * 31337 + (second % 17) * 11 + strlen(argv[3]) - 1615810207; printf("Get your key: "); printf("%x\n", hash); system("PAUSE"); return 0; }
原文地址:https://www.cnblogs.com/Mayfly-nymph/p/11391823.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 数组属性和方法
- postgres数据库不能用ip地址访问的问题
- Flutter基础widgets教程-ButtonBar篇
- 如何在linux服务上创建samba文件共享服务
- Salesforce Javascript(二) 箭头函数
- java面试基础部分;
- 7-2.表单-HTML基础
- 如何在github上传多个项目
- Flutter基础widgets教程-Card篇
- Springboot热部署,使用spring-boot-devtools、springloaded两种方式进行热部署
- SpringBoot中jsp里面的静态资源js、css、images访问不到解决办法
- spring boot jsp里面的静态资源访问不到解决办法
- Flutter基础widgets教程-Center篇
- 如何上传项目到GitHub
- ES6编码规范
- Flutter基础widgets教程-Checkbox篇