game

上次在bugku遇见同一道题,用的是od动态分析,这次试用ida静态分析一次,并尽可能详细写出解题步骤。

1.代码载入ida分析


将程序载入ida进行分析,并找到主函数。(寻找主函数步骤:将界面下端输出窗口上移一些,右键点击上方‘函数名称’,再点击‘快速筛选’,在下面出现的空白框中输入‘main’)点击选择框中的‘main’,双击按F5再进入主函数伪代码:

从主函数内容可知,我们需要打开函数main_0():双击main_0函数,进入。
图中绿色字体为游戏介绍,上方蓝色文字为游戏动画界面,不必理会。再上方可见函数首先定义了整形i与v2,v0作为全局变量,要注意它。

!!有点灵异了,本来截图前函数定义的是v1,截完图发现定义的就是v2了,别去想它,记住上图中v1就是下面的v2就行了(越想越害怕)!!

第一个while循环结束位置在main_0函数最下方,可见第一个while循环很大,有可能是整个游戏进程循环。
第二个while循环的内容为每当输入一个数据v2,检查其是否符合游戏规则,符合则终止本次循环break,不符合则提示并继续输入。
接下来在v2不等于0的情况下进入函数sub_4576D6(v2 - 1);,v2为0就再次重置游戏了。我们点开sub_4576D6(v2 - 1)函数,查看其内容:

接着点开函数:
易知变量a1就是参数v2-1,分析可知此函数是游戏部分运行规则。
以上图中部分也是运行规则,继续分析可知下图中部分内容为是否出现flag的条件,因为八行中的每一行都变为1时,即全部通开时,调用函数sub_457AB4()
我们点开此函数:看到关键字:

脚本编写及运行

可预知flag即将得到,分析以下伪代码可知,这段数据分为两个数组,进行两次异或运算,最下方的返回的函数作用是将其转化为字符串数组,猜测输出字符串为flag,可编写python脚本:

 a=[18,64,98,5,2,4,6,3,6,48,49,65,32,12,48,65,31,78,62,32,49,32,1,57,96,3,21,9,4,62,3,5,4,1,2,3,44,65,78,32,16,97,54,16,44,52,32,64,89,45,32,65,15,34,18,16,0]b=[123,32,18,98,119,108,65,41,124,80,125,38,124,111,74,49,83,108,94,108,84,6,96,83,44,121,104,110,32,95,117,101,99,123,127,119,96,48,107,71,92,29,81,107,90,85,64,12,43,76,86,13,114,1,117,126,0]i=0c=''while (i<56):a[i]^=b[i]a[i]^=19c=c+chr(a[i])i=i+1print (c)

运行得到flag:
zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}
以上步骤新手小白也能操作!!!
以上步骤新手小白也能操作!!!
以上步骤新手小白也能操作!!!
笔记链接:文档:c++.note
链接:http://note.youdao.com/noteshare?id=6bf859fe1c3e646e8a0781357fbf7928

xctf game解法2——沙窝里相关推荐

  1. 【算法基础12】最小生成树的两种解法(普里姆、克鲁斯卡尔)

    一.稠密图:朴素版prim算法 主要思想:每次从树外的结点中找到一个距离树最近的点加入树,将这段路径长度计入最小生成树的路径长度中,然后依据新的树更新树外结点距离树的距离,再次找到最近点加入,直到所有 ...

  2. java回文数算法for_【Java】【每日算法/刷穿 LeetCode】9. 回文数(简单)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]9. 回文数(简单) 宫水三叶发布于 今天 15:30 题目描述 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从 ...

  3. access中判断回文的代码_LeetCode 第九题 回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数.示例 1: 输入: 121 输出: true示例 2: 输入: -121 输出: false 解释: 从左向右读 ...

  4. 652 Find Duplicate Subtrees

    weekly contest 43的签到题. 这题的解法告诉一个重要的道理:当执行完 .. dfs(root.left); dfs(root.right); .. 复制代码 这两句通常的dfs都会有的 ...

  5. Hash Exercise 21.11.27

    Day01 and Day02 理论学习 什么是哈希桶?就是键对应的那个链表,生活中把东西放入桶中是有顺序的,因此用桶来比喻有顺序的链表 目录 问题1 经典的两数之和 1.双指针 2.哈希表 问题2 ...

  6. 让青春继续----缅怀我的大学生活

    青春的土壤中,只有记忆是潮湿的.我们不是植物,不能在这块土地上生生不息.当我们回眸青春,仿佛有一种说不出的痛.很多人问过我,青春的绝别,是否意味着年迈的将近.其实,青春,它一直都在继续. <让青 ...

  7. 基于单片机的车辆防碰撞及自动刹车系统(STC89C52RC芯片+超声波传感器HC-SR04+液晶屏1602+继电器+蜂鸣器)...

    基于单片机的车辆防碰撞及自动刹车系统(STC89C52RC芯片+超声波传感器HC-SR04+液晶屏1602+继电器+蜂鸣器) 本系统的目的是设计一个基于单片机的车辆防碰撞及自动刹车系统,系统通过对汽车 ...

  8. 基于单片机的车辆防碰撞及自动刹车系统(STC89C52RC芯片+超声波传感器HC-SR04+液晶屏1602+继电器+蜂鸣器)

    本系统的目的是设计一个基于单片机的车辆防碰撞及自动刹车系统,系统通过对汽车行进过程中前后车距离的实时检测与过近声光报警功能有效的解决当前汽车行驶过程中由于驾驶员反应不及时导致跟车距离过近引发汽车追尾的 ...

  9. CTF练习WP(week1)之二

    目录 1.flag_in_your_hand1 2.[HCTF 2018]WarmUp ​ 1.flag_in_your_hand1 题目链接:题目 (xctf.org.cn) 打开附件里的html, ...

最新文章

  1. http://hi.baidu.com/grayworm/blog/item/c76c4046307d380a6a63e56a.html
  2. 湖南网络推广浅析外链怎么发才会更快的收录?
  3. 2017《面向对象程序设计》课程作业八
  4. 回调函数function的test
  5. SQL注入学习——Bool盲注详解 sqli-labs(Less 8)
  6. mysql大数据更新缓存_redis缓存mysql
  7. spring初始化bean时执行某些方法完成特定的初始化操作
  8. 生信宝典联合科学出版社在双 11推出生物信息专题书单 5 折优惠!学起来!
  9. OpenSubdiv:大规模并行CPU和GPU架构上实现高性能细分表面
  10. SQLLDR载数加速,优化参数
  11. 编译原理-陈火旺-第三版-课后习题第八章123题
  12. [转][职业导航]作为初涉销售的年轻人,你是否具备核心竞争力?
  13. docker启动mysql报错Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use
  14. git免密pull指定ssh密钥文件
  15. 什么是固态功率放大器?射频固态功率放大器?
  16. 2013年9月19日
  17. Jabra E85t蓝牙耳机同时连接2部手机
  18. 什么叫真正的IT男?
  19. UI设计入门:五种基本APP界面类型【萧蕊冰】
  20. 实体店防盗,RFID技术作用巨大

热门文章

  1. Airtest IDE 自动化测试14 - 查看手机上 app 的包名 几种方式
  2. 西工大机考(精细化工工艺学)大作业网考
  3. 纯C语言开发无java、无dex的安卓native apk(新NDK-r23e + WSL)---2022笔记
  4. 魔兽争霸窗口模式补丁
  5. objective-c calendar 日历(2)
  6. 虚幻4简单的AR图像增强(包括安卓打包环境)
  7. 无线干扰的20种错误说法
  8. 翻译mosHow to Switch to a New Undo Tablespace (文档 ID 1951695.1)使用新的undo表空间和删除旧的表空间
  9. 【论文写作】Word中公式快捷输入方式
  10. Shadertoy基础教学02、画笑脸