首页
社区
课程
招聘
[原创] CTF2017 第8题 loudy Crackme 破解过程(迟来的成功)
发表于: 2017-6-18 16:44 7448

[原创] CTF2017 第8题 loudy Crackme 破解过程(迟来的成功)

2017-6-18 16:44
7448

序言:


        这几天有点感冒,看反汇编代码就头晕,看不下去了休息、休息浪费了一天比赛时间。算法在比赛结束前已经搞得清清楚楚,只可惜没来得及用python写个高效率穷举的程序。在群里发誓要把它破出来,所以现在补上破文,以免浪费了时间和精力。对第三段注册码的穷举我使用了彩虹表(索引)的办法,弥补了python执行效率低的问题,脑洞大开,代码都贴上了,希望思路可以供今后借鉴。

        本题作者构思全面,涵盖了TLS、虚拟机、内存校验、SMC、多线程、密码学算法(RSA)、大数运算等反调试、反分析手段。难度算高的了,也许作者是奔着防御组冠军去的,如果对算法第三段部分再进行严谨构思,应该算很棒的作品了。

        按以往惯例,文章末尾都会总结一下,本文破例,就写在前面了,需要建议各位新手的是对付这样的算法很复杂、流程很乱的作品,应合理使用OD的RUN跟踪功能,记录执行过的每条重要指令和跳转,动态记录注释信息和寄存器内容,随时重放函数和执行流程,助你准确调试分析,动态图演示一下:



一、查壳、PE格式,了解作品(套路了)


//查壳 Microsoft Visual C/C++(2005)[msvcrt]
//算法侦查:Big number:406490  Referenced at 40213C-->提示了作品可能包含大数运算
//PE格式检查:TLS 3 FUNC:402D00 402D20 402D30 -->提示了作品可能利用TLS反调试

//双击运行查看界面,命令行模式,输入错误注册码,弹出对话框,运行时间略久,怀疑计算量不少


二、TLS反调试


//OD载入,断TLS,勾选隐藏OD插件配置,TLS跟踪一遍发现对开了插件的OD没有影响,开了很多线程,比较卡。


三、主流程、VM分析


粗略翻一下代码,找到402D40关键函数,在402D40下断

很快就能跟到虚拟机部分:

//ECX指向了下表Array1

//ESI指向了下表Array2,[ESI+0x14]指向了EIP,EIP包含操作数同时又指向了函数入口

//Array2表整理如下:

//Array1表整理如下:

//还原VM程序如下:

//断点403571就可以跟踪到虚拟机每次调用的函数入口


四、算法流程一:根据第三节VM,搞清楚 CALL 402700 才可完成破解


//现在重新开始,断点 402700 的末尾附近貌似死循环的位置,等待全局变量赋值

//赋值了全局变量[0x99B6EC]为1,改变了线程1的流程,线程1将此处末尾代码进行SMC,
//断点会出问题,必须跟踪线程1,待线程1修改完代码后再来此处断点继续跟踪算法流程。
//线程1,修改主算法流程末尾代码

//现在SMC之后,流程才能显现出来

//线程1将全局变量重新置0,主流程算法可以继续

//子算法程序,为了避免RDTSC反调试,可以断点在00401EFE

//密文与表A异或20字节,变成密文2:(假设输入“12345678”)

//1549780652036258484424751705102781884386113 / 98765432109876543210123 = 15691529100101820131
//也就是说倒过来要求密文1前20字节为:(21、22、62、63字节密文已经在上文推理出)
//“PWU]TSUQXZ[]]_WBAC@E”
//进行穷举注册码明文前28位:(结果已剔除特殊符号)

//即注册码前28位:UFdVXVRTVVFYWltdXV9XQkFDQEUt


五、算法流程二


//也就是作者希望我们能够求解这个大数的开根号结果
//13095069099216326605010245808779535277211541324456558063162414338128147458401^0.5 =
//114433688655117320765854989491151409201
//算出密文23-61字节:(21、22、62、63字节密文已经在上文推理出)
//PSWPVUQPQ\^Y\_XCCBDB@NBL@BXVZUTSV\YSY\\
//穷举注册码第29-84位穷举:(已剔除特殊符号)

//即注册码前84位:UFdVXVRTVVFYWltdXV9XQkFDQEUtLVBTV1BWVVFQUVxeWVxfWENDQkRCQE5CTEBCWFZaVVRTVlxZU1lcXC0t


六、算法流程三(本题最难的部分)


//断4022C5

//中间有些格式转换

//最后CALL 401A90出来在4023C7处比较密文是否如下:

//跟到如下关键算法


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

上传的附件:
收藏
免费 1
支持
分享
最新回复 (12)
雪    币: 2548
活跃值: (965)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
2
真666
2017-6-18 18:53
0
雪    币: 47147
活跃值: (20455)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
赞,文章写的很详细!
2017-6-18 20:47
0
雪    币: 1355
活跃值: (339)
能力值: ( LV13,RANK:920 )
在线值:
发帖
回帖
粉丝
4
kanxue 赞,文章写的很详细!
段老大您过奖了,高手懒得看,新手没耐心看,详细是我的毛病,呵呵
2017-6-18 20:52
0
雪    币: 415
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
文章写的很详细!学习了。谢谢。
2017-6-18 21:16
0
雪    币: 45
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
膜拜樓主,相當感謝分享!
2017-6-18 22:29
0
雪    币: 112
活跃值: (27)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
7
感谢分享
2017-6-18 22:58
0
雪    币: 4441
活跃值: (805)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
我只能说:老鸟牛!
2017-6-19 08:31
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
kankana
2017-6-19 10:15
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
kankan
2017-6-19 10:15
0
雪    币: 1
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
666,很详细,那段跑的代码不算VM吧?感觉像是个虚表?
2017-6-19 11:03
0
雪    币: 327
活跃值: (173)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
12
大赞如此用心之作
2017-6-19 12:21
0
雪    币: 13713
活跃值: (2851)
能力值: ( LV15,RANK:2663 )
在线值:
发帖
回帖
粉丝
13
太详细了。OD的RUN跟踪功能,从来没用过,新姿势get。
2017-6-19 12:50
0
游客
登录 | 注册 方可回帖
返回
//