专栏名称: 看雪学苑
致力于移动与安全研究的开发者社区,看雪学院(kanxue.com)官方微信公众帐号。
目录
相关文章推荐
嘶吼专业版  ·  Ultralytics 人工智能模型被劫持 ... ·  昨天  
游资研报  ·  立案英伟达,CPU、GPU、人工智能芯片自主 ... ·  3 天前  
游资研报  ·  立案英伟达,CPU、GPU、人工智能芯片自主 ... ·  3 天前  
储能网  ·  0.855元/Wh!铁塔河南郑州8.1MWh ... ·  4 天前  
储能网  ·  0.855元/Wh!铁塔河南郑州8.1MWh ... ·  4 天前  
沪上布政使  ·  上海:2024年度“科技创新行动计划”科学仪 ... ·  6 天前  
沪上布政使  ·  上海:2024年度“科技创新行动计划”科学仪 ... ·  6 天前  
51好读  ›  专栏  ›  看雪学苑

看雪.WiFi万能钥匙 CTF 2017第七题 点评及解题思路

看雪学苑  · 公众号  · 互联网安全  · 2017-06-15 18:02

正文


一览赛况 

看雪CTF 2017 比赛进行至第七题

截止至今天中午12点,第七题破解人数为16人!


攻击方排名前十名变动较大,比赛排名有人升、有人降。

loudy上升4位,从第十升到第5位!

EricAzche也升到第7位,

本题过后,又一位新面孔冲进前十,kkHAIKE

谁会获得最终的大奖呢?最后的前十名又是谁呢?

期待ing......

接下来我们来回顾一下第六题

看看 看雪评委和出题者是怎么说的ヾ(๑╹◡╹)ノ"。



看雪评委 netwind 点评


此题作者采用了多种反调试手段给攻击方增加了不少难度。通过int3 异常触发程序执行流程;通过TLS对OEP进行异或加密;通过对部分函数进行加密,让其以SMC动态解码的方式执行来保护函数不被调试分析;通过对程序进行自效验的方式,防止被篡改。算法上采用约瑟夫环变形处理。此题难在考察攻方选手绕过反调试的能力。

作者简介:


作者不问年少,本名蒋超。毕业于西南交大计算机系,现在铁路行业任数据库系统工程师。爱好计算机编程(熟悉C/c++/Basic等语言)、电影、游戏、逆向分析、跑步、象棋等。2008年左右接触看雪,我认识了很多朋友,谢谢你们的帮助,让我不断成长,也学到了很多新的知识!


看雪 CTF2017 第七题设计思路

注册码说明:原注册码为 bwns@pediy!后来根据要求全改为字母加数字,连空格都去掉了!

现注册码为:BwnsAtPediy2017KX9Ok

注册成功截图:


制作思路

来源于约瑟夫环的变形处理。将一张码表看成一个圈,取用户输入的字符在码表中的下标。然后从此字符的下一字符处开始移动其下标值/5+5(这样做为了大幅度减少循环次数),然后取对应的字符,对此字符进行高5位低3位移位操作后,取其HEX字符进行验证。

验证方式为对每个字符的ASCII值/4的商,余数比较。(可由此进行注册码的反推。)

其他处理:

1、在Button中进行了特殊处理,使用int3异常开始游戏,必须触发异常,否则就退出了。

2、用TLS对OEP进行异或解密。

3、使用了SMC对显示对话框解码,解码的KEY即为用户输入的字符。此处用了try-catch包裹,故输入不正确的key不会崩溃。

4、StartGame函数也进行了 SMC 加密,运行时解密,完成后再加密。

5、对EXE加入简单自校验,使用MapFileCheckSum(测试发现此处360会误报木马),若发现改动,直接退出。

6、SMC均采用IDA直接查看地址后精确处理,无其它标记,制作稍麻烦。

关键代码


下面选取攻击者 爱琴海 的破解分析


序言

本题采用TLS、SMC等反调试、反分析手段,算法为索引一个64字节“环”匹中密文再进行加密和隐藏比较,并利用注册码进行SMC解码,想爆破都不容易!本题算法和防护手段都算上乘之作,无奈碰到了大神而饮恨。

本文是在提交答案之后重新写的,假设输入答案:BwnsAtPediy2017KX9Ok,节省笔墨纸砚,努力把文章写好。


查壳,试运行,分析TLS反调试


//首先查壳,Microsoft Linker(14.0)[EXE32],OD加载直接运行,OEP停不下来,噶么鬼?
//检查PE格式发现TLS

//勾选SOD插件“Break On Tls”,重新加载,跟踪40C120 TLS函数,看看都做了什么小动作
//加载停在了40C120

//使用6字节密钥“EB 74 58 CC E8 75”分别异或OEP入口0xC8字节代码,还原并清除了OD自动设置的OEP断点,所以载入就跑飞了。
//接下来对代码段设置内存访问断点,几次运行后就能断到OEP



分析主体流程


//断点 bp GetDlgItemTextA,输入注册码,单击“开始验证”

//断下来之后,返回主程序

//用“PEDIY”作为密钥,解密426字节,对应“CALL 00411B30”所需要的主算法程序

//处理前

//处理后

//继续跟踪主程序


分析算法程序


//断点410558,断下后单步跟进 CALL 00411B30

//Array1:(用户输入与0xCC异或后)

Array2:(64字节)

//在Array2环中索引查询结果
//Array3:

//对Array3再次异或、移位、与等加密,结果还是更新到Array3中

//加密后的Array3


分析验证程序


//返回主程序

//加密“CALL 00411B30”对应主算法流程的426字节,主算法程序加密掉,理念不错,用完弃之!

//CHECK,跟进 CALL 00411825

//检验Array3是否满足,如果不满足就不进行后续SMC解码

//再跟进 CALL 00411975

//Array3 未转换之前:

//索引表,字符串、十六进制转换:

//Array3转为字符串Array4 "A30B1B828ABB4A9BA9BB93AAA36B82AA024AB243"
//确定输入位数20位,这里才能达到80(0x50),异或后为0才能触发跳转

//目的是为了将Array4每个字母作为十六进制数进行除以4,取商和余数变形,阻止破解者轻易理解算法,藏得好辛苦,作者辛苦了!
//下记录断点,查看40组变形结果

//找到要比较的表,必须相同

//正确值

//Array4校验值

//算法破解思路:
//根据40位校验值按“4的倍数+余数”,求出40个字符Array4,然后转Array3,再进行20位字符串,逐位穷举,限定合法字符


分析关键CHECK的SMC解码程序(隐含注册码筛选要求)


//返回到上级程序,分析后续SMC过程
//申请内存4096字节,用于SMC,这种方法可取,防止爆破和静态分析

//待解码数据拷贝

//源:

//目的:

//SMC解码,异或


算法破解


//1、根据40位校验值按“4的倍数+余数”,求出40个字符Array4,然后转Array3,再进行20位字符串,逐位穷举,限定合法字符

//Python

//穷举合法字符注册码如下:第1、3、11、19位只有唯一解,而其他位都存在好几个解,为了进一步筛选注册码,需要分析SMC解码

//2、根据SMC解码,结合对反汇编代码的认知进行推理,在待选注册码范围中人工筛选出最终答案:(作者你也太狠了吧,呵呵)

//对不确定的第7、8位手工验证,最多4次:

//当输入第2组:BwnsAtPediy2017KX9Ok 弹出信息成功提示“Well Done!:)”
//当输入第4组:BwnsAtiediy2017KX9Ok 弹出空白信息提示,确定后退出程序
//因此最终答案为:BwnsAtPediy2017KX9Ok


提示成功程序分析(SMC)


//SMC代码最终解密结果:

//调用SMC执行,跟进

//SMC最终反汇编

//使用MessageBoxA显示成功信息



总结


这个作品的设计理念上乘,尤其结合SMC有效防止爆破,有实际应用价值。假如算法和反调试、反分析再做加强,得分还能提高!



最后感谢 WiFi 万能钥匙安全应急响应中心的赞助支持,

接下来的比赛大家一定要使出洪荒之力哦!↖(^ω^)↗

比心 ❤



赞助商

上海连尚网络科技有限公司成立于 2013 年,是一家专注于提供免费上网和内容服务的移动互联网企业。连尚网络自主研发的核心产品 WiFi 万能钥匙,以分享经济的模式,通过云计算和大数据技术,利用热点主人分享的闲置WiFi资源,为用户提供免费、稳定、安全的上网服务,以帮助更多的人上网,找到属于他们的机会,改变自己的命运。




往期热门内容推荐



更多比赛详情,长按下方二维码,“关注看雪学院公众号”查看!

看雪论坛:http://bbs.pediy.com/

微信公众号 ID:ikanxue

微博:看雪安全

商务合作[email protected]




阅读原文了解更多