2020腾讯游戏安全竞赛初赛
0x00 题初赛共分为ring3和ring0两道题
初赛ring3题目:
winmine.exe是一个扫雷游戏程序,winmine.dmp是该程序的一份进程dump, 在这份dump中,winmine.exe的内存映像有指令被篡改,篡改实现了外挂功能。
请找出dump中,winmine.exe的内存映像中2处被篡改实现外挂功能的指令(被篡改指令的偏移、篡改前后的指令分别是什么),并分析这些指令篡改所实现的外挂功能是什么。
初赛ring0题目:
DriverDemo.sys是一个驱动程序,它内置了一些限制。
1, 不能篡改该文件,尝试使驱动成功加载。
2, 该驱动程序成功加载后,突破它的限制,但不允许patch文件或内存,使它成功打印出(用dbgview可接受)调试信息”hello world!”。
驱动未签名,需要设置Windows 10高级启动选项,禁用驱动程序强制签名后方可答题,支持使用虚拟机。
0x01 解ring3给了一个dmp文件,可以考虑先上Windbg分析一下
题目中提到了内存映像中有指令被篡改,因此先把winmine.dmp的内容转写为文件
用windbg打开.dmp, ...
2021腾讯游戏安全竞赛初赛
0x00 题题目说明:下载ctf1.exe (md5:63b2b6e27bc8e95cf81e5be8e5081265)。运行ctf1.exe,依据程序提示,找到flag。
0x01 解OpenGL做的三维图形显示程序
这里考的应该是解锁视角限制
打开程序只能看到一个箭头指向右上角
然后鼠标被限制了,没办法移动太多
比较相似的程序:https://blog.csdn.net/szqsdq/article/details/79584409
关于OpenGL的摄像机可以看这个:https://learnopengl-cn.github.io/01%20Getting%20started/09%20Camera/
对OpenGL不熟,可以先试试解除对鼠标的限制
这里会涉及到Windows消息机制:https://blog.csdn.net/liulianglin/article/details/14449577
可以先去找窗口注册的函数,那里有WndProc函数,负责处理各种消息,当然也包括鼠标消息
在IDA的structures视图中找到WNDCLASSEXW结构体,然后x查询交叉引用, ...
2022腾讯游戏安全竞赛初赛
0x00 题这里有一个画了flag的小程序,可好像出了点问题,flag丢失了,需要把它找回来。
要求:
1、不得直接patch系统组件实现绘制(如:直接编写D3D代码绘制flag),只能对题目自身代码进行修改或调用。
2、找回的flag需要和预期图案(包括颜色)一致,如果绘制结果存在偏差会扣除一定分数。
3、赛后需要提交找回flag的截图和解题代码或文档进行评分。
0x01 解运行程序会发现ACE的蓝色logo,过几秒后会自动消失
上IDA,直接看看WinMain(https://learn.microsoft.com/zh-cn/windows/win32/learnwin32/winmain--the-application-entry-point)
可以看到创建了一个互斥体(CreateMutexA),保证程序单例运行
之后是创建窗口
先D3D入个门吧:https://www.cnblogs.com/skiwnchiwns/p/10343190.html
之后这里能找到D3D的初始化过程的一步
所以大概可以判定这是D3D的初始化函数
看里面包着的函数sub_14000109 ...
2024NKCTFvm?vm!
0x00 分析题目根据官方WP,这道题是有原题的
原题的WP在这:https://ctf.0xff.re/2022/dicectf_2022/cable_management
本题的脚本有:https://ycznkvrmzo.feishu.cn/docx/E92JdQmGxoUwXexnQgpcRaIsn7g
此题据官方WP是
改编了逻辑状态,把整个部分切为两半,第一个部分在异或的基础上加入了一个与门
在第二个部分加入了一个或门
没看懂(
由于这题相对比较抽象,所以会大量引用WP
这题需要对wireworld有所了解(至少知道规则才能做):
Wireworld导线世界规则:
1、空(黑色):永远不变
2、电子头(蓝色):下一代变为电子尾
3、电子尾(白色):下一代变为导线
4、导线(黄色):一般不变,但当周围一圈有一个或两个电子头时变为电子头
0x01 解ELF,无壳
无从下手,只能先看看main函数
从下面开始看看函数
printf的样子很奇怪,不过unk_2004和unk_2005倒是知道是什么
那么估计sub_1570就是一个判断函数了,
根据WP,这个sub_12 ...
2024NKCTFREEZ
0x00 分析题目和上一道题一样大部分还是用Z3
不过这道题会动态输出一个可执行文件,有点类似于SMC了
0x01 解ELF,无壳
直接上IDA
没有cmp,而这个byte_404070里面的内容很多
应该是类似于SMC那样会输出一个可执行文件,而这些应该就是操作码
试着运行一下
这时候会输出一个outputfile
直接拷走就行(
来到outputfile的main里面,可以发现整个程序的加密可以被分为三个操作
第一部分是一大堆加减乘除和位运算
第二部分是和内存里的某个东西(dword_55FA1FBB2010)进行乘除以及位运算
第三部分就是一个简单的异或
将byte_55FA1FBB2080与第二部分的结果异或然后与byte_55FA1FBB20A0进行比较
那么就该REVERSE了
先从最后的开始,直接异或得出第二部分的结果
1234567891011key = [0x32, 0x44, 0xaa, 0x56, 0x63, 0x3d, 0x2b, 0x09, 0xcd, 0x34, 0x99, 0x3c, 0x56, 0xb8, 0x99, 0xde, ...
2024NKCTFlogin_system
0x00 题目分析比较简单的一题,主要是Z3的使用方法和换表AES
关于Z3:https://github.com/Z3Prover/z3
AES不必多说(
0x01 解ELF,无壳
直接上IDA
由login Success的提示可以看到不仅要password,还要username
那么就一个个来看吧
首先是user name
在strlen后有一个if包含一个函数,这个函数应该就是对user name的判断了
根据strlen可知这个name的长度应该为16B
进去这个对user name内容的判断
这么多等式,首先想到用Z3解,再仔细看看,可以发现这些等式每四个为一组,所以就可以写脚本先把name搞出来
123456789101112131415161718192021222324252627from z3 import *a1 = [BitVec(('x%s' % i), 8) for i in range(16)]out = []s = Solver()s.add(a1[2] + a1[1] + a1[0] + a1[3] == 447)s.add(1 ...
2023DASCTFxCBCTFmarshal
0x00 分析marshal库:https://docs.python.org/zh-cn/3/library/marshal.html
marshal模块包含一此能以二进制格式来读写 Python 值的函数。marshal 模块主要是为了支持读写 .pyc 文件形式“伪编译”代码的 Python 模块。不是所有 Python 对象类型都受支持;一般来说,此模块只能写入和读取不依赖于特定 Python 调用的对象。
使用dis.dis进行反汇编:https://docs.python.org/zh-cn/3/library/dis.html
dis模块通过反汇编支持CPython的bytecode分析。
0x01 解只有一个.py文件,打开后是这样的
直接运行运行不起来
事已至此先分析函数吧
关于这个marshal.load(file)
从打开的文件读取一个值并返回。 如果读不到有效的值(例如由于数据为不同 Python 版本的不兼容 marshal 格式),则会引发 EOFError, ValueError 或 TypeError。 文件必须为可读的 binary fi ...
2023DASCTFxCBCTFauuuu3
0x00 题目分析关于AutoIt:https://www.autoitscript.com/site/autoit/
感觉autoit可以类比为lua,都是脚本语言,而且都利用到了虚拟机技术
不过autoit设计用于Windows GUI(图形用户界面)中进行自动化操作,其他脚本语言好像不能做到
使用动调或者IDA比较耗时间,据官方说法在v3.2.5.1后autoit不再拥有自带的反编译工具,不过对应的虚拟指令含义有大哥分析出来了,而且有工具可以快速获取源码
AutoIt-Ripper:https://github.com/nazywam/AutoIt-Ripper
0x01 解查壳,这次换个软件
运行一下,随便输点东西看看
用pip安装autoit-ripper后直接扒皮
打开.au3,搜一下”wrong”
分析加密流程,首先判断输入是否满足38位,如果满足,则将输入经过ENC函数加密,ENC函数如下
12345678910111213141516171819202122Func ENC ( $DATA , $KEY ) $DATA = Binary ( $DATA ) L ...
2023starCTFez_code
0x00 题目分析powershell混淆
关于powershell脚本:https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_scripts?view=powershell-7.4
powershell的使用:https://blog.csdn.net/qq_41874930/article/details/108146932
关于powershell中的IEX:https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.utility/invoke-expression?view=powershell-7.4
powershell反混淆:https://www.freebuf.com/articles/system/181697.html
github反混淆项目:https://github.com/Malandrone/PowerDecode
0x01 解后缀改为.ps1 ...
2023starCTFflagfile
0x00 题目分析关于linux的file命令和magic file:https://blog.csdn.net/shenwansangz/article/details/50506507
对file命令的版本有要求
以当前题目为例,安装5.41版本的file命令
1234567891011121314151617wget ftp://ftp.astron.com/pub/file/file-5.41.tar.gztar -xvzf file-5.41.tar.gzcd file-5.41./configuremakesudo make install# Output:# 'file-5.41.tar.gz saved'# 'file-5.41/ configured'# 'file-5.41/ compiled'# 'file-5.41/ installed'
0x01 解随便在flag里面写点东西
然后使用
1file -m flag.mgc -d flag
其中file -d用于输出调试信息
...