XCTF 4th-WHCTF-2017 creakme
exe文件 运行一下

随便输一下

ps.这个曹操身边的故事挺有意思的 但是没啥卵用.......
查一下壳无壳
ida载入 发现找不到main函数 直接看start感觉逻辑乱乱的(萌新求不喷.....)
百度之,可能是MFC写的,小白真的是纯小白 一脸蒙蔽,第一次接触MFC 看一下大神的题解照着复现了一遍 但是大佬中间有的地方讲的不明白,可能是觉得太简单不需要讲了吧....我尽量写的详细一点
我们知道(其实并不知道)MessageBoxA函数是于创建、显示并操作一个消息对话框的,像这种题目基本上都是将用户的输入进行各种异或啊,调整顺序啊之类的和正确密码比对,正确就会提示你输入正确或者干脆直接显示出来flag之类的,所以如果我们能找到提示用户输入正确的对话框,再往上追溯调用就大概率找到判断函数!找到之后分析里面的逻辑就可以反向算出flag。
于是在各个函数里面寻找,其中有两个函数调用了MessageBoxA这个函数,分别是sub_4016E0和sub_401720,寻找一下他们的调用关系 发现都是sub_4015E0函数调用的,看一下它的逻辑:

可以看出来我们的判断并没有错!肯定是if里面的判定条件决定了是否调用MessageBoxA输出正确的提示,所以我们看一下sub_401630这个函数

我们直接看函数的主体部分 首先是一个srand生成随机数,然后令v4=rand[0]%10 再将v2和v3对应的某一位数值进行比对
我们知道(其实并不知道)srand函数是随机数发生器的初始化函数。srand和rand()配合使用产生伪随机数序列。
什么意思呢,就是rand()函数是通过系统所给定的数字作为种子,生成一串随机序列的函数,但是如果种子一样rand()得到的序列也是不变的,而srand()是可以改变种子值的函数。
不过对于这道题的逻辑,由于初始以10作为种子,rand[0]为0x47(71);以1作为种子,rand[0]为0x29(41),模10后都令v4=1,所以产生的v4不会有变化,一直是1
解决了v4的问题,判断的逻辑就很清楚了:a2的每一个值和v3+96的第n*10+1个值比对
往上找了一下

这里有一个strcpy函数,将内存中的一串字符串赋值到了v2+96上,继续往下分析就会知道在这里的v2+96就是v3+96,所以现在已经很明白了,只要将这个字符串每隔十个取出来(直到取到320就结束)就是最后的flag啦!
s = ";f1K3{c5:efl21t4;1t1zaxpim9}5+?gtux;=vc9v{v7+buhU{bT=-am2q}=fh[xk{y?xrqe{?}l5-sd2-Mo+:j{9=sY[dalvpx?z3{?no{[k5ll{zjsu5[kfla+r6Zg72o0skq6cGl5cw[=d?3v9q5-vkjSv{4sqtg=f0cz{+jurjfl[tb]lrfF1;2}udhb?0g8{om:T4dh;z:oz-Dn=m=ux;o[gs9{+zqx+sq-dsxctcvykUs2oddrt43pwv:f0;njkrb9los6g0{ih?rqantfx$sslqd:rvqixr;j{?o:sn+[i[yA11;gsmr8lm0?3};+iv+Tf:4Gtv2:-20upi0]7?77=;qzx{m-W;0vtueh]ko8d?=w:fbhd{E:;19?p=k:b+}doht6wpEq-z]2qbV1}dh416qw9:xm[;ed;:ecb-0:ni-s4u2kf6]2wn45amzjrun=ofkx-=hmgo-lz;j909=rmo7xcj4le0hxs[i]-vjl[?o12:sv4upio7ma1hRy7556+57krev:hLQ+1cx65z5v5];6n=[p83;n={zm{k2p"
flag=''
for i in range(len(s)//10):
flag+=s[i*10+1]
if(i*10==320):
break
print(flag)
最后得到:
flag{The-Y3ll0w-turb4ns-Upri$ing}
第一次提交不对,只提交{}里面的内容就好啦!
XCTF 4th-WHCTF-2017 creakme的更多相关文章
- Whctf 2017 -UNTITLED- Writeup
Whctf 2017 -UNTITLED- Writeup 转载请表明出处http://www.cnblogs.com/WangAoBo/p/7541481.html 分析: 下载下来的附件是一个py ...
- 团队作业8——Beta版本冲刺计划及安排
团队作业8--Beta版本冲刺计划及安排 经过紧张的Alpha阶段,很多组已经从完全不熟悉语言和环境,到现在能够实现初步的功能.下一阶段即将加快编码进度,完成系统功能.强化软件工程的体会. 凡事预则立 ...
- Support for SSL/TLS protocols on Windows
https://blogs.msdn.microsoft.com/kaushal/2011/10/02/support-for-ssltls-protocols-on-windows/ Support ...
- SIIA CODIE AWARDS 2017
Business Technology Best Advertising or Campaign Management Platform Albert, Albert Choozle, Choozle ...
- TIOBE 2017 8月编程语言排行榜 后院“硝烟四起”
处于排名榜最前面的几个编程语言的分数长期以来一直都在下降:Java和C在TIOBE榜单中的分数一直比较低.而且几乎所有其他排名前十的语言每年都在下降. 那么哪个什么语言抓住了这个机遇呢?这发生在排行榜 ...
- CI Weekly #10 | 2017 DevOps 趋势预测
2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...
- 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS
一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...
- iOS的ATS配置 - 2017年前ATS规定的适配
苹果规定 从2017年1月1日起,新提交的 app 不允许使用NSAllowsArbitraryLoads来绕过ATS(全称:App Transport Security)的限制. 以前为了能兼容ht ...
- 深入研究Visual studio 2017 RC新特性
在[Xamarin+Prism开发详解三:Visual studio 2017 RC初体验]中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很 ...
随机推荐
- sqlachemy 获取新创建对象的id,flush与commit
for account_info in valid_account_detail: try: account = account_info.get('account') password = acco ...
- Android-App性能测试工具GT的使用方法
参考链接: https://www.cnblogs.com/syw20170419/p/7228145.html?utm_source=itdadao&utm_medium=referral ...
- 禁止 gVim 在 Linux 下自动生成 undo 文件 *.un~
在配置文件 .vimrc 中加入配置项, set noundofile 完.
- 数组复制的五种方式(遍历循环一一赋值、System.arraycopy、地址赋值、克隆clone()、Arrays.copyof())
package com.Summer_0424.cn; import java.util.Arrays; import java.util.concurrent.CopyOnWriteArrayLis ...
- JUnit5 快速指南
JUnit5 快速指南 version: junit5 1. 安装 2. JUnit 注解 3. 编写单元测试 3.1. 基本的单元测试类和方法 3.2. 定制测试类和方法的显示名称 3.3. 断言( ...
- 【精编重制版】JavaWeb 入门级项目实战 -- 文章发布系统 (第二节)
说明 本教程是,原文章发布系统教程的精编重制版,会包含每一节的源码,以及修正之前的一些错误.因为之前的教程只做到了评论模块,很多地方还不完美,因此重制版会修复之前的一些谬误和阐述不清的地方,而且,后期 ...
- 性能调优6:Spool 假脱机调优
SQL Server的Spool(假脱机)操作符,用于把前一个操作符处理的数据(又称作中间结果集)存储到一个隐藏的临时结构中,以便在执行过程中重用这些数据.这个临时结构都创建在tempdb中,通常的结 ...
- iOS开发简记(6):storyboard的使用
从xib到storyboard,iOS界面开发的方式在变化. 这里记录怎么使用storyboard来完成简单的界面开发,比如实现一个“我”的简单界面. (1)新建storyboard 在新建文件向导中 ...
- Item 17: 理解特殊成员函数的生成规则
本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 C++的官方说法中,特殊成员函数是C++愿意去主动生成的.C++9 ...
- UWP 自定义控件:了解模板化控件 系列文章
UWP自定义控件的入门文章 [UWP 自定义控件]了解模板化控件(1):基础知识 [UWP 自定义控件]了解模板化控件(2):模仿ContentControl [UWP 自定义控件]了解模板化控件(2 ...