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的更多相关文章

  1. Whctf 2017 -UNTITLED- Writeup

    Whctf 2017 -UNTITLED- Writeup 转载请表明出处http://www.cnblogs.com/WangAoBo/p/7541481.html 分析: 下载下来的附件是一个py ...

  2. 团队作业8——Beta版本冲刺计划及安排

    团队作业8--Beta版本冲刺计划及安排 经过紧张的Alpha阶段,很多组已经从完全不熟悉语言和环境,到现在能够实现初步的功能.下一阶段即将加快编码进度,完成系统功能.强化软件工程的体会. 凡事预则立 ...

  3. Support for SSL/TLS protocols on Windows

    https://blogs.msdn.microsoft.com/kaushal/2011/10/02/support-for-ssltls-protocols-on-windows/ Support ...

  4. SIIA CODIE AWARDS 2017

    Business Technology Best Advertising or Campaign Management Platform Albert, Albert Choozle, Choozle ...

  5. TIOBE 2017 8月编程语言排行榜 后院“硝烟四起”

    处于排名榜最前面的几个编程语言的分数长期以来一直都在下降:Java和C在TIOBE榜单中的分数一直比较低.而且几乎所有其他排名前十的语言每年都在下降. 那么哪个什么语言抓住了这个机遇呢?这发生在排行榜 ...

  6. CI Weekly #10 | 2017 DevOps 趋势预测

    2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...

  7. 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS

    一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...

  8. iOS的ATS配置 - 2017年前ATS规定的适配

    苹果规定 从2017年1月1日起,新提交的 app 不允许使用NSAllowsArbitraryLoads来绕过ATS(全称:App Transport Security)的限制. 以前为了能兼容ht ...

  9. 深入研究Visual studio 2017 RC新特性

    在[Xamarin+Prism开发详解三:Visual studio 2017 RC初体验]中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很 ...

随机推荐

  1. copyOf数组复制方法的使用(数组扩容练习)

    package com.Summer_0420.cn; import java.util.Arrays; /** * @author Summer * 我们使用数组存储了50名学生的考试信息 , 今天 ...

  2. intoj

    192.168.0.6:1024 emm....我太健忘了...

  3. 关于Spring Data JPA更新部分字段的问题

    1.问题背景 个人比较喜欢Spring data JPA,这次的问题是在实体类中使用List类型作为字段,JPA也提供了操作的方法,即使用@ElementCollection注解,网上对于JPA的知识 ...

  4. Java的并发及锁

    Java并发编程:用AQS写一把可重入锁 https://blog.csdn.net/zhang5476499/article/details/83796289 线程的同步时可以使一个线程阻塞而等待一 ...

  5. flink1.7 checkpoint源码分析

    初始化state类 //org.apache.flink.streaming.runtime.tasks.StreamTask#initializeState initializeState(); p ...

  6. 01 前言/基础设施 - DevOps之路

    01 前言/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi 简介 基础架构采用DevOps设计思想, ...

  7. 十二、存token获取token刷新token发送header头

    //测试token //获取token function setToken(data){ var storage = window.localStorage; if(!storage){ alert( ...

  8. 六、input框中的数字(金额)只能输入正整数

    <input type="text" placeholder="请输入整数" onkeyup="this.value=this.value.re ...

  9. python线程中的全局变量与局部变量

    在python多线程开发中,全局变量是多个线程共享的数据,局部变量是各自线程的,非共享的. 如下几种写法都是可以的: 第一种:将列表当成参数传递给线程 from threading import Th ...

  10. mysql异常:Packet for query is too large (10240 > 1024). You can change this value

    出现这个问题的原因是:mysql的配置文件中 max_allowed_packet 设置过小,mysql根据配置文件会限制server接受的数据包大小. 还有人会说我操作的数据量明显没有超过这个值为啥 ...