攻防世界 reverse hackme
时间:2019-09-18
本文章向大家介绍攻防世界 reverse hackme,主要包括攻防世界 reverse hackme使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
hackme XCTF 3rd-GCTF-2017
__int64 __fastcall sub_400F8E(__int64 a1, __int64 a2) { char input[136]; // [rsp+10h] [rbp-B0h] int v4; // [rsp+98h] [rbp-28h] char v5; // [rsp+9Fh] [rbp-21h] int v6; // [rsp+A0h] [rbp-20h] unsigned __int8 c; // [rsp+A6h] [rbp-1Ah] char b; // [rsp+A7h] [rbp-19h] int index; // [rsp+A8h] [rbp-18h] int j; // [rsp+ACh] [rbp-14h] int temp; // [rsp+B0h] [rbp-10h] int k; // [rsp+B4h] [rbp-Ch] _BOOL4 sign; // [rsp+B8h] [rbp-8h] int i; // [rsp+BCh] [rbp-4h] print_407470((__int64)"Give me the password: ", a2); scanf_4075A0((__int64)"%s", input); for ( i = 0; input[i]; ++i ) ; sign = i == 22; // 输入22位 k = 10; // 只验证了10个数 do { index = (signed int)f_406D90() % 22; // 生成随机数 temp = 0; b = byte_6B4270[index]; c = input[index]; v6 = index + 1; j = 0; while ( j < v6 ) { ++j; temp = 0x6D01788D * temp + 0x3039; } v5 = temp ^ c; if ( b != ((unsigned __int8)temp ^ c) ) sign = 0; --k; } while ( k ); if ( sign ) v4 = print_407470((__int64)"Congras\n"); else v4 = print_407470((__int64)"Oh no!\n"); return 0LL; }
程序流程:
验证输入22位-->生成随机数验证10位数
wp:
bs=[0x5F, 0xF2, 0x5E, 0x8B, 0x4E, 0x0E, 0xA3, 0xAA, 0xC7, 0x93, 0x81, 0x3D, 0x5F, 0x74, 0xA3, 0x09, 0x91, 0x2B, 0x49, 0x28, 0x93, 0x67] flag=[0 for i in range(22)] for index in range(22): b=bs[index] temp=0 for i in range(index+1): temp=(0x6D01788D * temp + 0x3039) flag[index]=(temp^b)&0xff print(''.join(map(chr,flag)))
flag{d826e6926098ef46}
原文地址:https://www.cnblogs.com/DirWang/p/11545446.html
- 数据结构C#版笔记--堆栈(Stack)
- MySQL基础入门-第一课 新建数据库(linux版本)
- 2017年度最不安全密码报告,看看你的密码安全吗?
- 数据结构C#版笔记--顺序表(SeqList)
- 数据结构C#版笔记--单链表(LinkList)
- 操作系统 页式存储 页与块之间的关系详解
- 数据结构C#版笔记--双向链表(DbLinkList)
- 斐波那契数列与IE9
- DateTime.ToString()输出"年/月/日 时:分:秒"的格式
- Flash在线拍摄用户头象
- win7 64位下如何折腾Tubro C 3.0
- TweenLite的又一应用:图片的拼图加载效果
- mysql创建数据表时如何判断是否已经存在?
- 温故知新:接口的隐式实现与显式实现
- 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 数组属性和方法
- Windows下Redis服务的安装及Redis服务的命令行启动和关闭
- git hooks
- 二叉树的层次遍历 II
- Android开发笔记(一百七十三)给安装包APK文件瘦身
- 从 1 到 0 构建博客项目(1) -- 操作系统篇(1)
- Spring JPA 定义查询方法
- 代理工厂的简单应用
- iOS逆向之文件系统
- Kettle构建Hadoop ETL实践(四):建立ETL示例模型
- Java并发总篇
- 逻辑漏洞之密码找回漏洞(semcms)
- 逻辑漏洞之越权、支付漏洞
- 多线程基础(二): Thread源码分析
- JeecgBoot环境搭建及前后端项目启动
- Windows下MySQL 8.x和8.x以前版本的安装步骤