首页
社区
课程
招聘
[原创] CTF2017 第七题不问少年 CrackMe 详细破解分析过程
发表于: 2017-6-14 14:07 11365

[原创] CTF2017 第七题不问少年 CrackMe 详细破解分析过程

2017-6-14 14:07
11365

序言:


本题采用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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 1
支持
分享
最新回复 (3)
雪    币: 112
活跃值: (27)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
好详细
2017-6-15 13:07
0
雪    币: 425
活跃值: (530)
能力值: ( LV4,RANK:48 )
在线值:
发帖
回帖
粉丝
yyp
4
我什么我在“二、分析主体流程”对 GetDlgItemTextA下断点后进行验证就跑飞了????
2019-12-18 17:29
0
雪    币: 690
活跃值: (1586)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
5
我卡在反调试上面了,看了wp 之后,茅塞顿开,感谢师傅
2020-9-7 21:37
0
游客
登录 | 注册 方可回帖
返回
//