出题团队简介
赛题设计思路
题目答案:AFF7AEFB8AEFF697B6B915FA9818CB16
使用方案一(老规则)
详细的题目设计说明和破解思路:
运行流程:
-->输入序列号
-->存入string
-->启动本地socket线程(干扰,收发一些假数据)
-->自定义类初始化
-->获取SM4密钥(放在内存里一个固定的__declspec(naked)函数)
-->字符串转HEX数组(16字节)
-->异或加密
-->SM4加密
-->结果比较
详细设计:
1、自定义类有20多个函数,f1调用f2调用f3类推,将计算逻辑分开,增加破解难度。
2、本地socket为干扰分之,会进行一些假数据加密【异或加密-->BASE64加密-->MD5加密】。
3、字符串均使用内置函数加密。
4、自定义的超大类会使IDA F5解析不完整
破解思路:
1、anti会干扰计算结果(需要过简单的反调试)(插件即可过)。
2、有干扰的无用代码,需要跟踪或去除干扰代码。
3、解密流程为【HexToString(自定义异或解密(SM4解密(key, arr)))】 key和arr均能逆出。
赛题解析
本赛题解析由看雪论坛大侠 上学困难户 给出:
一
初步分析与思路
-
程序内字符串均已加密,运行时通过xor特定值解密。
-
程序启动时创建了一个socket线程,会接受数据
-
共三次数据,三条线程,第一次解密一串16进制值,第二次BASE64第一次的值,第三次MD5第二次的BASE64
-
主线程中给出了FLAG首位为A,长度为32
-
主线程在一个充满了垃圾代码与套娃的call里执行判定(套娃CALL我们命名为bad)
0030B11E | E8 808BF9FF | call <crackme.my_1memmove> |
0030B123 | C645 FC 2D | mov byte ptr ss:[ebp-0x4],0x2D | 2D:'-'
0030B127 | C645 FC 00 | mov byte ptr ss:[ebp-0x4],0x0 |
0030B12B | 8BCE | mov ecx,esi |
0030B12D | E8 601F0000 | call <crackme.judge> |
002B86E3 | E8 BBB5FEFF | call <crackme.my_1memmove> |
002B86E8 | C645 FC 07 | mov byte ptr ss:[ebp-0x4],0x7 |
002B86EC | 56 | push esi |
002B86ED | C645 FC 00 | mov byte ptr ss:[ebp-0x4],0x0 |
002B86F1 | E8 571D0200 | call <crackme.xxxed> | |
二
实践
三
多解分析
第十题《陷入轮回》正在进行中
球分享
球点赞
球在看
原文始发于微信公众号(看雪学苑):看雪2022 KCTF 春季赛 | 第九题设计思路及解析
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论