SCTF-2014 misc100 writeup(赛后分析)

下载文件后,file命令看一下是ELF32程序,strings命令发现程序被UPX加壳了。

upx -d snake-final.exe

脱壳后扔到IDA里面分析,主函数发现调用signal注册了若干个回调函数:

特别是几个38h、32h、34h、36h。实际上是定义了4个控制贪吃蛇行动的游戏按键。但显然就这个程序,按对应的键是产生不出对应的signal信号的。(有队伍使用向进程发送对应signal的方式,间接操控贪吃蛇,游戏成功可以获得flag)。经过进一步分析,发现最重要的回调函数是handler,同时在handler中存在"int 3"反调试,正常执行的时候会产生signal==5的信号,这里的处理函数为nullsub_1。实际上就是忽略,所以我们也可以直接 nop 掉 int 3。当然完全按照本文的静态分析方法,而不使用调试,完全可以忽略 int 3。

进一步分析handler,发现是一个极其复杂的函数。没心思看,找找有没有别的入口。

strings窗口发现"Mission Complete",xref发现这个字符串引用位置sub_80492E0+14C。

分析sub_80492E0:

这个函数确实是判断游戏成功与否的标志,成功的话,还需要判断一个ebx == 3,这里的ebx实际上是函数的传入参数。但问题是,找到成功的标志,但是后面没有跟着输出flag的地方,而仅仅是调用settimer重置了新的信号量。这样程序的执行流又回到handler里面。

根据目前的信息,寻找带参数3调用sub_80492E0的地方,xref只发现两处8049941、8049FF1。实际上这两处的代码是一样的(经过最后的分析实际上这里往后的代码就是输出flag的地方,但我在这里迷失了很久)。比较奇怪的是这两处都不在IDA识别的handle函数的作用域中。原因是IDA识别出了handler函数的Canary保护机制,以此作为handler函数的开始和结束。

进一步分析handler发现:

原来成功吃到30个食物成功后,是通过C++异常处理机制来调用sub_80492E0( 3 )的。

通过上面查找xref的两个地方,随便选取第二个,看到调用代码:

由于sub_80492E0里面没有显示flag的地方,只是重置settimer,那么猜测很有可能flag也是通过异常处理链来打印的。上面的代码发现,调用sub_80492E0后,重新抛出了一个异常。所以继续观察下面的代码:

这里注意804A039处的一个比较,这是在打印flag前的异常处理链中的最后一道门槛。也是调试时候为什么sub_80492E0已经运行到"Mission Complete",但还是没有出现flag的原因。

注意这里的一个循环,实际上就是printf "[ebp-50+i] xor 2Ah"。(2Ah是ascii的‘*‘)

import sys
a=‘\x7f\x1a\x64\7f\x78\x44\x5e\x50\x67\x7d\x4e\x5f‘
for i in range(0, len(a)):
    sys.stdout.write(chr(ord(a[i]) ^ ord(‘*‘)))

得到:U0N-LRntzMWdu

这个还没有完,继续往下看:

可见flag还有两部分,其中[ebp-84h]就是handler函数开始处的值(说明异常处理实际上还是应该在handler当中的,只是IDA分析的使用因为canary的原因,被排除了):

最后一部分的数据是804C0C0处的全局数据,三部分的算法是一样的,最后解码得到:

U0NURntzMWduNGxfMXNfZnVubnk6KX0=

echo 
U0NURntzMWduNGxfMXNfZnVubnk6KX0= | base64 -d

得到flag。

后记:

此题看360首发的sctf writeup上,只讲了"Mission Complete"和sub_80492E0,然后就直接base64字符串了,不知道那位大神是如何“看”出来的。

C++的throw--catch的逆向分析是头一回遇到,还是应该写一个简单的C++相应程序,然后逆向研究一下它的结构。这样才知道handler里面canary和异常处理是人为的有意为之,还是编译器本来就是这样处理的。

由于信号量的处理有线程再入的特点,异常也会涉及到跨线程的问题,所以程序流程要完全研究透彻,需要理解的内容非常多。有待进一步学习。

这个题目如果调试,如果跟踪到异常处理的代码,还请大牛不吝赐教。

时间: 2024-10-12 09:13:01

SCTF-2014 misc100 writeup(赛后分析)的相关文章

SCTF 2014 pwn题目分析

因为最近要去做ctf比赛的这一块所以就针对性的分析一下近些年的各大比赛的PWN题目.主防项目目前先搁置起来了,等比赛打完再去搞吧. 这次分析的是去年的SCTF的赛题,是我的学长们出的题,个人感觉还是很符合套路的:一道栈溢出.一道格式化字符串.一道堆溢出. pwn200 一个栈溢出. 题目给出了libc.保护只有nx. 拿到题后的基本思路就是leak出got表中函数的地址,然后拿libc算偏移算出system的地址.然后用这个地址去覆盖一个函数的got表. pwn300 一个明显的格式化字符串漏洞

SANS:2014年安全分析与安全智能调研报告

2014年10月份,紧接着2014年度日志管理调研报告(Log management survey),SANS又发布了2014年度的安全分析与智能调研报告(Analytics and Intelligence Survey 2014). 正如我之前博客所述,SANS认为安全分析与日志管理逐渐分开了,当下主流的SIEM/安管平台厂商将目光更多地聚焦到了安全分析和安全智能上,以实现所谓的下一代SIEM/安管平台.而安全分析和安全智能则跟BDA(大数据分析)更加密切相关. SANS对安全智能的定义采纳

关于c++与java中文乱码问题分析与解决

关于c++与java中文乱码问题分析与解决 DionysosLai([email protected])  2014/8/1 问题分析: 之所以会出现中文乱码问题,归根结底在于中文的编码与英文的编码方式存在差异. 在java内部是使用16bit的unicode编码(即utf-16)来表示字符串,无论英文还是中文都是2字节. C/C++使用的是原始数据,ascii是一个字节,中文一般是GB2312编码,用2个字节表示一个汉字. Jni内部是使用utf-8编码表示字符串的,utf-8是扁长的unic

未来世界的数据

在2013年2月13号那天,圣安东尼奥马刺队做客克利夫兰迎战骑士队,整场比赛都打得十分焦灼.直到第四节最后时刻,骑士的新秀得分后卫迪昂-韦特斯命中了他菜鸟赛季最大心脏的一球,一记高难度跳投,力助球队在最后9.5秒取得了2分的领先优势.但问题是,他留给了马刺9.5秒的时间,观众们隐约有种不祥的预感,速贷中心那些骑士球迷的情绪甚至都开始失控. 马刺队叫了暂停,获得了一次前场球的机会,他们决定打一个他们最喜欢的战术.马特-邦纳快速把球发给了距篮筐30尺远的托尼-帕克,待邓肯做了个结结实实的挡拆,迫使泰

排球计分软件规格说明书

适用范围,目的: 本产品主要应用于各种排球比赛,比如:校园排球比赛,其目的是为每场排球比赛进行有效计分,使用者多为比赛计分员. 系统概述: 1,本产品的目标: 产品主要对比赛分数进行处理,但产品本身并不能主动进行信息采集需根据产品需求及时提供所需信息,对比赛进行计分.提高效率,利用软件进行管理,避免人工管理的失误,从而实现干效率的积分管理. 2,产品功能: 对比赛比分进行统计:定时提醒交换场地:判断比赛胜负:统计比赛时间: 一般约束:     假定:用户能够提供交付测试的环境:     设计及实

fzuoj Problem 2179 chriswho

http://acm.fzu.edu.cn/problem.php?pid=2179 Problem 2179 chriswho Accept: 57    Submit: 136 Time Limit: 10000 mSec    Memory Limit : 327680 KB  Problem Description Chriswho很喜欢数字,特别喜欢一种数字,它能整除它的每一位数字(如果该位是0当做能整除),比如说126这个数字他就很喜欢,因为126%1=126%2=126%6=0.为

好书推荐:《黑客秘笈:渗透测试实用指南》

内容简介‍‍ 所谓的渗透测试,就是借助各种漏洞扫描工具,通过模拟黑客的攻击方法,来对网络安全进行评估. 本书采用大量真实案例和集邮帮助的建议讲解了在渗透测试期间会面临的一些障碍,以及相应的解决方法.本书共分为10章,其内容涵盖了本书所涉的攻 击机器/工具的安装配置,网络扫描,漏洞利用,人工地查找和搜索Web应用程序的漏洞,攻陷系统后如何获取更重要的信息,社工方面的技巧,物理访问攻击, 规避杀毒软件的方法,破解密码相关的小技巧和最终的成果汇总等知识. 本书编排有序,章节直接相互独立,读者可以按需阅

松贷后房价涨跌内幕 吃透楼市12个规律不吃亏

松贷后房价涨跌内幕 吃透楼市12个规律不吃亏 行业动态中国新闻网[微博]2014-10-26 04:45 我要分享 4 2014年中国房价走势到现在已经下跌无疑,但还是有很多人对房价的上涨保持希望.事实这几年中国楼市的房价涨幅非常明显,相反下跌则非常少. 据IMF预警,多数国家房价过热,中国房价增幅九成上榜.IMF也指出,在亚洲和拉美很多新兴市场国家中,房价和抵押贷款增长迅速,去年菲律宾的房价增幅超过10%,中国为9%,巴西为7%,已有迹象表明这些国家的大城市房地产业存在过热. 本文特别准备吃透

OLI.System.2010 2CD

include:OLI Analyzer v3.1.3 OLI ScaleChem v4.0.3 工业水溶液电解质体系预测的标准OLI成立于1971年,是一款应用广泛的化学过程计算软件. OLI Analyzer热力学模拟铬酸钠碳化生产重铬酸钠工艺,包括一次碳化/二次碳化/碳酸氢钠分离以及碳酸氢钠湿法分解.探索浓度/温度/压力 等因素对碳化工艺过程中平衡的影响.确定平衡的最佳条件. OLI.System包含OLI Analyzer v3.1.3和OLI ScaleChem v4.0.3,完整好用