首页
社区
课程
招聘
[原创] KCTF 2021 Win. 第一题 算力与攻击模式
发表于: 2021-11-17 18:43 4123

[原创] KCTF 2021 Win. 第一题 算力与攻击模式

HHHso 活跃值
22
2021-11-17 18:43
4123

算力与攻击模式

【摘要】

          “签到题”标签,自然是尽可能简易,本题主要采用了CRC32算法。提供了样本name/key,设计者有预想的简单攻击模式,但由于掌握信息的差异,攻击者不一定会按照设计者思路进行攻击,这里阐述设计者预想的攻击模式和另一种预想之外的攻击模式,后者触发了多解。


第1节 算法原理

1.1 静态分析

    这里我们直接采用静态分析的方式,直接样本进IDA Pro。如图1-1,其为程序入口经过运行时初始化后的设计者代码入口。

图1-1 用户代码入口

    DialogFunc是我们的窗体消息响应函数,如图1-2,eWinMsg是我们添加的enum类型,内容参考附件xtypes.h内容,提取自VS2019的C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\WinUser.h,可通过加载xtypes.h添加;也可以通过【View|Open Subviews|Local Types】让后Insert键粘贴xtypes.h内容添加。定位到函数参数上,通过Y快捷键,输出enum eWinMsg,重新F5实现。

    图1-2 DiagFunc窗体消息响应主函数

    可见,Hi_OnClick_check_2F1340为我们检测控件响应函数,上图地址已经rebase,可通过idapython【idc.Jump(idaapi.get_imagebase()+0x1340)】直接跳转。如图1-3

图1-3 检测控件点击响应函数


1.2 算法识别

    如何确定Hi_crc32_buf_size、Hi_atoi、Hi_int2str函数原义?

(1)crc32函数Hi_crc32_buf_size的确定,如图1-4,我们通过网络搜索引擎搜索 0xEDB88320常量,出现crc32关联;

通过python测试比对输入输出参数验证为crc32.

import zlib
hex(zlib.crc32(b'KCTF'))
#0x5ee54f4c


    

图1-4 crc32函数

    同理,通过观测Hi_atoi和Hi_int2str输入输出结果,得到其原义。


1.3 检验算法

#算法描述
(1)key 为 "0123456789"字符集,且key_len长度最大为10
(2)kxn = crc32(name,name_len)^atoi(key)
要求 crc32(itoa(kxn,radix=16),8)==0x13B88C77

#python描述
name=b'01F845C5B7C52E56'
key=653259165
kxn = zlib.crc32(name)^key
kxn_hex = "{:08x}".format(kxn)
rc = zlib.crc32(kxn_hex.encode())
rc == 0x13B88C77

#由于rc固定,假设crc32映射唯一,则kxn_hex固定,则kxn值固定;
#由已知的name&key可得到kxn=0x52a1ed5a
#要求name=b'KCTF'时的key,有key=zlib.crc32(name)^kxn,则
"{:010}".format(zlib.crc32(b'KCTF')^(zlib.crc32(b'01F845C5B7C52E56')^653259165))
0205824534

#当然,写本文时,发现key最长是10,所以也可以是key=205824534

第2节 攻击展示

    上述1.3中已经展示了设计者预想的攻击模式。

    另一种利用CPU或GPU算力暴力破解的方式,因为【要求 crc32(itoa(kxn,radix=16),8)==0x13B88C77】,

    即,我们要找到由8个十六进制字符集[0-9a-f]的组成组合,其crc32为0x13B88C77,这里我们通过hashcat进行算力攻击,如下攻击命令;

    -a 3选择暴力攻击,-m 11500 为 crc32算法 ?h表示[0-9a-f]字符集,12秒我们得到,kxn=0x6eb5dd36

hashcat -a 3 -m 11500  --hex-charset 13B88C77:00000000 ?h?h?h?h?h?h?h?h

    通过下述python,我们得到对应kxn的KCTF的key为0810586746或810586746。

"{:010}".format(zlib.crc32(b'KCTF')^(0x6eb5dd36))    
#0810586746

图1-5 hashcat利用CPU&GPU爆破crc32

第3节 总结思考

    (1)hashcat利用了CPU尤其是GPU的算力,网络新闻摘要,最近几天,【我国量子计算研究获重要进展,中国科学技术大学潘建伟团队在论文中介绍,经过一系列改进,光量子计算机“九章二号”处理特定问题的速度比超级计算机要快上亿亿亿倍,超导量子计算机“祖冲之二号”在量子随机线路采样问题上的计算速度,也比目前最快的超级计算机快一千万倍】,也许某天,2048的RSA也可以秒爆。

    (2)提供name&key的CTF,可以首先考虑以中间量为入口。




[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2021-11-17 18:45 被HHHso编辑 ,原因:
上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//