专栏名称: 看雪学苑
致力于移动与安全研究的开发者社区,看雪学院(kanxue.com)官方微信公众帐号。
目录
相关文章推荐
51好读  ›  专栏  ›  看雪学苑

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

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

正文

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

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


攻击方排名前十名波动不大,

loudy从第十位上升至第7位,

poyoten再次冲进前十位~

前十名能否保守住自己的位置呢?

是否会有黑马一战成名呢?

期待ing......

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

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




看雪评委 netwind 点评

该题亮点依然在反调试上,用虚拟机进行代码保护,通过线程动态加解密主要代码,通过校验和检查代码完整性,根据时间来反调试,另外还将实际代码替换为假代码,防止反汇编,在反调试方面让攻方选手举步维艰。算法上采用了RSA算法的思想,解决掉反调试后,参考RSA算法可以求解。

作者简介


作者loudy,原名吴林峰,毕业于北京航空航天大学电子信息工程专业,当前从事工作出于保密规定暂不公开。爱好跑步、篮球、电影;热衷编程、特别是逆向分析。2007年接触看雪,以潜水学习为主,也希望多认识有相同爱好的朋友。


看雪 CTF2017 第八题设计思路


一、答案

UFdVXVRTVVFYWltdXV9XQkFDQEUtLVBTV1BWVVFQUVxeWVxfWENDQkRCQE5CTEBCWFZaVVRTVlxZU1lcXC0tVGhpNV9pc19BX1ZlcnlfU2ltcGxlX1Rlc3Qh

二、基本设计思想

(1)简单虚拟机(使用虚拟寄存器传值)

实现了系统函数调用、CMP、JNZ、XOR等调用

(2)反调试

主要使用了3种

1、  线程动态加密解密主要代码

2、  CheckSum检查主要代码

3、  时间判断

(3)反汇编

主要通过将实际代码替换为假代码,防止反汇编。

(4)算法设计

主要是利用RSA思想,其中(比较小)

P:900F0CA3041C345B

Q:98FCAE63A170C363

N:56172073862A662A8D6BB1A135999031

E:D9C382944A461EE3

D:4A064A97921BDF9E3F354E9020AE054F

首先对输入进行base64解码,然后将解码后注册码分成三段,

1、  第一段解码得到E,再和固定值做大数乘法运算,结果和另一固定值比较,相等则到下一步

2、  第二段解码得到N,再和固定值做大数乘法运算,结果和另一固定值比较,相等则到下一步

3、  通过E和N对第三段加密,和内存固定值比较,相等则成功

三、破解思路

1、先解决反调试和反反汇编,将真正代码还原

2、识别大数乘法运算,通过固定值和大数除法还原E、N,得到第一段和第二段注册码。

3、通过E、N解出D

4、用N和D对固定值解密,得到第三段注册码。

5、组合三段注册码,base64加密,得到最终的注册码。


下面选取攻击者 风间仁 的破解分析


1. TlsCallback

创建了6个线程, 前3个线程是负责smc解码的, 后3个线程没用

线程1:解码 004025DC 处的跳转及 check1 函数

线程2:解码 0040263C 处的跳转及 check2 函数

线程3:解码 0040269C 处的跳转及 check3 函数

2. 主流程

一个自定义的虚拟机

校验函数

检测代码改动

sn=base64_decode(sn)

sn的格式(共90位): (20位)--(39位)--(27位)

校验前20位

(sn1 xor abcdefg...) * 98765432109876543210123 == 1549780652036258484424751705102781884386113

校验中间39位







请到「今天看啥」查看全文