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. element not interactable,这种提示表示元素当前在页面上不可见

    1.出现element not interactable,发现这个元素在页面上不可见,需要拖动下拉框才能看到这个元素 2.这个时候需要让元素在页面上可见,才可操作

  2. python推导式创建序列

    推导式创建序列 推导式是一个或多个迭代器快速创建序列的一种方式.可以将循环和条件判断结合,简化代码.几个推导式注意符号的使用,比如小括号,方括号,大括号等等. 列表推导式 列表推导式生成列表对象,语法 ...

  3. Jenkins-配置LDAP认证

    Jenkins-配置LDAP认证 参考文档: LDAP添加用户详见我的博文  Linux分类 中的< LDAP2-创建OU和用户>博文. 1.LDAP配置 1.准备一个adminDN账号用 ...

  4. 用Java执行Python:Jython踩坑笔记

    常见的java调用python脚本方式 1.通过Jython.jar提供的类库实现 2.通过Runtime.getRuntime()开启进程来执行脚本文件 1.Jython Jpython使用时,版本 ...

  5. 苹果 icloud 把我 ipad min 所有照片丢失

    苹果 icloud 把我 ipad min 所有照片丢失,大概发生在 '云上贵州' 之后! 发帖纪念--- 求个说法---

  6. 实现可调整宽高的DIV(左右拖动和上下拖动)

    前言 本例是在React中实现,不过改一改通过原生js也很好实现,另外兼容性也做到了IE9.(IE8讲道理也是可以的). 首先看一下需要实现的需求: 要拖动图中的白色横条调整绿色和蓝色区域的高度,要拖 ...

  7. 使用模块PIL 生成 随机验证码

    --------------默认自己无能,无疑是给失败制造机会!你认为自己是什么样的人,就将成为什么样的人. 要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创 ...

  8. H5 文字属性的缩写

    05-文字属性的缩写 abc我是段落 <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  9. BZOJ1997 平面图判定 平面图性质 2-sat

    相交的两条边不能在同一侧,用2-sat即可. 平面图点数-边数关系 \(E\le 3V-6\) 写这篇文章我只是想说明,知乎一小时,题解一分钟. lb Zhihu, gos langar Qarwet ...

  10. ImportError: DLL load failed: 找不到指定的模块。

    这里用的anacoda,报错是找不到DLL,可能是该DLL的环境变量没配置,配置系统环境变量: 重启一下pycharm,OK.