[2019红帽杯]Snake

题目下载:下载

下载完文件是一个用C#编写的untiy程序,对于这种程序果断用dnSpy查看Assembly-CSharp.dll

找到如下位置

发现这些函数都导入了Interface函数,那找到这个动态链接库的位置,用ida打开,f12搜索关键字

发现了You win!,跟进

发现这个代码很长,但是这个GameObject()函数只有一个a1参数,并且他也参与了运算

那他是不是关键点呢,由上图可以知道a1的范围[0,99],所以让a1值从0-99爆破,这里用到了ctypes库,即加载一个dll,值得学习,参考别人的wp,代码如下

最后flag为flag{Ch4rp_W1th_R$@}。

知识点补充:

ctypes 是Python的外部函数库。它提供了与 C语言兼容的数据类型,并允许调用 DLL 或共享库中的函数。可使用该模块以纯 Python 形式对这些库进行封装。

载入动态链接库:
       通过操作这些对象的属性,你可以载入外部的动态链接库。cdll载入按标准的cdecl调用协议导出的函数,而windll导入的库按stdcall调用协议调用其中的函数。oledll也按stdcall调用协议调用其中的函数,并假定该函数返回的是 WindowsHRESULT错误代码,并当函数调用失败时,自动根据该代码甩出一个OSError异常。

在 Linux 下,必须使用包含文件扩展名的文件名来导入共享库。因此不能简单使用对象属性的方式来导入库。因此,你可以使用方法LoadLibrary(),或构造 CDLL 对象来导入库。

Dig the way

题目下载:下载

查壳:

无壳,载入IDA

先看第一部分: 发现有三个函数,看func0

很明显这是交换两个元素的位置。

看第二个函数:func1

返回值是一个可能大于0,小于0或者等于0的数

看第三个函数func2:

发现这个函数的返回值是一个恒大于2的数

继续往下看main函数的其他部分

打开“data”文件进行读操作,文件指针为file_ptr,然后使用feek函数,首先让文件指针指向文件的末尾,用ftell函数来求文件指针(在末尾)对于文件首的偏移字节数,所以v14就是读取的文件中的字符长度,然后在用feek函数指向文件头,用ftell求文件指针(在文件头)相对于文件头的偏移,所以v13为0,然后用for循环读取data文件中字符到v7_20中。

看main函数第三部分:

v5是读取字符串的长度,与v14长度相同。然后主要看这个while循环和get_key。先进入get_key

发现只要进入get_keu函数就可以输出flag了,执行get_key前提是if条件的v9==0,但是按照前面的程序执行的话,v9不可能为0呀!!!

看一下while循环:

执行第一次while循环时,参数为(v8,3,4),执行func0函数,即v8[3]和v8[4]交换位置,而v8[3]是v9值为3,v8[4]是v10值也是3,所以相当没啥变化,返回1给v8[1]。

执行第二次while循环时,参数为(v8,1,2),执行func1函数,经过计算知v8[2]=2。

执行第三次while循环时,参数为(v8,2,3),执行func2函数,经过计算v8[3]=6,即v9=6

通过上面知道只有第三次while会影响v9的值,所以只用想办法让第三次while循环使得v9==0即可,v9的值是通过函数返回求得的,但是func2的值恒大于0,func0只是交换位置没有赋值,只有func1的返回值可能是0,所以让第三次while循环执行func1就行

看一看这些变量在栈中状态

发现str函数应该有20个才对,但是读取数据的时候并没有严格限制是20个,所以有可能在data文件中读取的数据多余20个就会把栈中其他的数据覆盖掉,所以我们可以覆盖掉v9的值,让其为0。

首先通过func0函数交换func1与func2函数执行顺序,然后让第三次while循环执行func1时,让func1函数返回值为0就行,所以执行第一次while时,让参数为(v8,7,8),这样交换func1,func2执行顺序,然后执行第三个while循环时,参数为(v8,2,3),v8[2]=2,让v8[3]==-1,这样返回值就为0,v9就会变为0,所以创建一个data文件,如下(32位时-1在内存中为FF FF FF FF )这样,在执行一下,就会自动跳出flag

函数补充:

feek()

ftell()

long ftell(FILE *stream):函数 ftell 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。

BUUCTF-[2019红帽杯]SnakeDig the way相关推荐

  1. [2019红帽杯]easyRE1题解

    迷蒙马背眠,月随残梦天边远,淡淡起茶烟.                                                         --松尾芭蕉 目录 1.查壳 2.拖入64位I ...

  2. buu [2019红帽杯]xx1 wp

    首先用exeinfo打开它,发现是无壳的64位程序. 逆向先静后动,因此先用ida 打开: main函数代码如下: int __cdecl main(int argc, const char **ar ...

  3. buu [2019红帽杯]childRE wr

    这个题是有一定难度的,它考的知识点不是特别常见,对于萌新来说. 解题步骤: 1. 下载完附件之后先进行查壳 无壳,我们直接拖进ida64中.通过shift+f12查看字符串 找到输出flag的字符串通 ...

  4. [2019红帽杯]easyRE writeup

    很想挑战难题,发现自己连writeup也看不懂 用64bit的ida打开,查找字符 找到函数: signed __int64 sub_4009C6() {signed __int64 result; ...

  5. 2019 蓝桥杯省赛 B 组模拟赛(一)蒜厂年会

    2019 蓝桥杯省赛 B 组模拟赛(一)蒜厂年会 这题有两种情况 1.最大的和是在0~n-1 2.最大的和越过了首尾 这时候只要用n个数的和 - 0~n-1 的连续的最小和 这是求连续子集最大.最小 ...

  6. 面向萌新的红帽杯2018线上赛wp

    网络安全攻防大赛第二届"红帽杯"网络安全攻防大赛(除了web3 guess id,不会做.没写.) misc2 Not Only Wireshark 下载流量包,wireshark ...

  7. [CTFHub] 2021-第四届红帽杯网络安全大赛-Web-find_it

    [CTFHub] 2021-第四届红帽杯网络安全大赛-Web-find_it 看群里说CTFHub上复现了, 我来看看 本来想按照红帽杯的套路来试一下,发现phpinfo里莫得flag了 只能想想其他 ...

  8. 2019蓝桥杯每周一题第二周之Mineweep(扫雷)

    2019蓝桥杯每周一题第二周之Mineweep(扫雷) 写在开头: 写这个题的时候真的是一次次的纠错,题不难,里面的逻辑关系有复杂,每一次都以为会运行正确了,结果又一个小地方出错,写了一上午还是有问题 ...

  9. 计算机工业设计大赛作品,大赛回顾丨聚焦2019攀升杯全国高校工业设计大赛总决赛!...

    原标题:大赛回顾丨聚焦2019"攀升杯"全国高校工业设计大赛总决赛! 长江叠浪,波澜浩荡:东湖潮涌,水击横堤:长江之滨,东湖之畔.今日,2019"攀升杯"全国高 ...

最新文章

  1. python 客户端 如何获取手机_Python学习---Django的request扩展[获取用户设备信息]
  2. 宏基因组学习交流4群成立
  3. AI设计的新启发 | 什么是用户体验中台?
  4. linux内核dentry结构学习
  5. spring boot配置文件【application.yml】常见问题之一,未添加空格
  6. java录入会员信息_java-第三章-升级我行我素购物管理系统,实现会员信息录入的功能...
  7. 精美在线课程教育学习培训平台网站模板源码 HTML纯静态
  8. html5 多文件选择
  9. checkAll全选的一个小例子
  10. JUST——简单转换下的JSON
  11. Linux服务器运行环境搭建(四)——Tomcat安装
  12. pytorch入门——线性回归
  13. 恐怖!Spring Boot “内存泄漏”,排查竟这么难!
  14. oracle和sqlserver数据库直接生成xml
  15. python内置对象的实现_Python面向对象——内置对象的功能扩展
  16. 2021-08-25剑指 Offer 13. 机器人的运动范围
  17. WIN7X64SP1极限精简版by双心
  18. stata15中文乱码_一次性解决Stata中文乱码问题
  19. 服务器装win10系统,win10服务器系统
  20. 易鲸捷数据库(EsgynDB)常用SQL

热门文章

  1. 深度好文 | YOLOv5+DeepSORT多目标跟踪深入解读与测试(含源码)
  2. cd28v2虚拟服务器,科技知识:华为荣耀CD28v2路由器初始密码
  3. three.js textureLoader加载图片失败
  4. 赏析角度有哪些_赏析句子的角度有哪些呢
  5. mixamo 导出的模型没有贴图
  6. 基于dataX的数据同步平台搭建
  7. C2429 语言功能“结构化绑定“需要编译器标志“/std:c++17“
  8. Servlet快速筑基
  9. Cent OS 安装 opencv 2.4.4 人脸识别 linux
  10. Linux 快照 (snapshot) 原理与实践(二) 快照功能实践