首页
论坛
课程
招聘
[原创]提交题目 2022 KCTF
2022-5-4 23:57 1707

[原创]提交题目 2022 KCTF

2022-5-4 23:57
1707

战队名称:
Archaia

 

队长QQ:
916964950

 

参赛题目:
见附件

 

公开的用户名及序列号:
用户名 : E1445A98642AEBC1
序列号 : 933C7436B05D705A4E84BA95B4E3884EBA1ED212053F8B6D9DAA2C893F3ABE39

 

题目答案:
用户名 : KCTF
序列号 : 39ED62B341BC560217EAB3BF90265D101067856B36495264144A5B487264CB4B

 

题目设计:
此题为分别使用了X86和X64的代码混淆,并使用了天堂之门技术对调试进行干扰。

 

1.题目介绍:这次提交的题目是windows32位的应用程序,作战思路是将算法代码分成三部分,分别对三部分算法代码进行不同运行模式(32位运行模式和64位运行模式)的混淆,然后使用天堂之门进行运行模式的切换。

 

2.整体设计:
(1)核心算法部分:
本程序将解密算法分割成3部分。
第一部分是用64位指令实现;
第二部分是用32位指令实现;
第三部分是用64位指令实现;
使用天堂之门技术进行三个部分的连接;
(2)除算法外的其他部分:
本程序的其他部分由cpp编写,在项目中使用cpp的异常处理干扰调试者。

 

(3)天堂之门:天堂之门的运行模式切换,能使该程序可以对抗市面上大部分的调试器,使其调试工作不顺利的进行。

 

图片描述

 

3.混淆:
(1)64位混淆:64位混淆主要有指令等价替换,流程干扰,花指令,产生垃圾代码、栈地址修改等干扰功能,为了影响攻击者,指令等价替换、产生垃圾代码等功能具有一定随机性。

 

(2)32位混淆:32位的混淆在64位的功能基础上,加入了seh异常处理干扰程序执行流程,主要目的是影响调试器的trace功能。同时将部分代码做了简单的加密处理(将某些指令做了异或加密),也是通过异常的方式获取代码控制权,然后在异常中使用天堂之门切换到64位之后再解密后续的代码,解密完成之后切换到32位继续执行。

 

4.算法:

  1. 使用AES算法和修改的Base64算法(以下简称Base64)验证用户名和序列号是否正确
    (1) 算法参考KCTF2021春季赛-千里寻根实现
    (2) 验证算法部分是一段完整的shellcode代码,将其分片成3部分后,做了混淆和校验。
    (3) 如果对输入的序列号解密失败,或者解密结果与用户名不匹配,则提示失败。

  2. 使用CRC32算法保护算法部分的内存完整性
    (1) 在解密shellcode中,随机插入5份CRC32检查,计算出当前EIP前后一段内存范围内的校验值
    (2) 使用5份校验值分别对Base64映射表的一部分做异或,得到加密后的Base64映射表
    (3) CrackMe一开始使用该加密后的Base64映射表,只有运行时得到正确的CRC32值,才可以恢复正确的Base64映射表
    (4) 该校验主要用于反调试,在校验范围内的内存如果有被修改(比如下了int3断点),那么Base64映射表的结果将是错误的

技术要点:
1、天堂之门
2、X86和X64的代码混淆
3、SEH异常
4、算法设计

 

破解时可能会遇到的问题
1.总体思路:
通过调试器的trace功能或者模拟执行的方式拿到完整的解密算法,最后分析解密算法得到加密算法。
2.需要解决的问题
(1)想办法突破天堂之门的限制
(2)在32位算法部分,对抗异常处理和天堂之门
(3)拿到完整的代码之后,需要写脚本将垃圾指令除去,以便最后的分析
(4)通过分析解密算法得到加密的算法。

 

预期的破解思路:
1.想办法处理32位到64位天堂之门的模式转换

 

2.调试第一层,找出第一层64位代码混淆的规律,编写脚本获取到关键信息

 

3.想办法处理64位到32位天堂之门的模式转换

 

4.调试第二层,找出第二层32位代码混淆的规律,编写脚本获取到关键信息

 

5.想办法处理32位到64位天堂之门的模式转换

 

6.调试第三层,找出第三层64位代码混淆的规律,编写脚本获取到关键信息

 

7.想办法处理64位到32位天堂之门的模式转换,然后找到结果校验处

 

8.经过上面的步骤找到的信息,根据特征分离出关键算法代码

 

9.根据关键算法代码写逆算法


看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

最后于 2022-5-20 11:54 被醍醐编辑 ,原因:
上传的附件:
收藏
点赞0
打赏
分享
最新回复 (3)
雪    币: 1037
活跃值: 活跃值 (9886)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2022-5-5 16:16
2
0

多解了,请重新修正bug


最后于 2022-5-5 16:16 被kanxue编辑 ,原因:
雪    币: 1037
活跃值: 活跃值 (9886)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2022-5-9 12:35
3
0
第五题 危机四伏
雪    币: 3970
活跃值: 活跃值 (626)
能力值: ( LV12,RANK:279 )
在线值:
发帖
回帖
粉丝
htg 活跃值 3 2022-6-4 10:11
4
0
去除混淆太难了,已经dump出来了三段代码,有没有什么好的方法。
2.调试第一层,找出第一层64位代码混淆的规律,编写脚本获取到关键信息
【使用IDA分析,一段接一段的挑战jmp】
4.调试第二层,找出第二层32位代码混淆的规律,编写脚本获取到关键信息
6.调试第三层,找出第三层64位代码混淆的规律,编写脚本获取到关键信息
游客
登录 | 注册 方可回帖
返回