首页
社区
课程
招聘
[原创] 看雪CTF2018-第四题-密界寻踪writeup
发表于: 2018-6-23 19:57 4760

[原创] 看雪CTF2018-第四题-密界寻踪writeup

2018-6-23 19:57
4760

0x00 初步分析程序

0x01 破解第一处验证

0x02 破解第二处验证

0x03 最终脚本


由题目提示,应该是使用了一些加密算法,先使用PEID的一个插件看下有没有常见加密算法特征:

看到程序使用了Miracl大数库和S盒,可能是调用了AES算法,IDA打开,先shift+f5加载miracl大数库和常见加密函数的签名(签名文件放在https://github.com/sherlly/encryption了,需要自取~):


开始分析程序,发现程序中存在不少花指令,用于干扰IDA正常反编译:

通过加入一些无关的call指令,使堆栈不平衡,在IDA中体现为sp-analysis failed,也就是不能F5反编译,可以手动去花,但其实在这道题中,逻辑比较清楚,不能F5的关系也不大(好吧就是懒-。-)

根据字符串搜索,可以确定打印欢迎信息的位置:

xor_enc函数是将输入的字符串进行简单的异或操作得到解密的字符串:

接着定位到主函数中,可以看到输入的地方:

之后进入的应该就是验证逻辑,首先将输入的字符串进行分割,前3位进入验证函数2进行校验,后20位进入验证函数1校验:



具体验证函数的算法见下面分析。

进入第一处验证函数处,首先看到的是一些赋值的操作:

接下来同样调用了xor_enc函数对刚刚赋值的数据进行异或解密,动态调试记录下两个值为208CBB7CD6ECC64516D07D978F5F0681F534EAD235D5C49ADD72D2DB840D5304和7da39de66016477b1afc3dc8e309dc429b5de855f0d616d225b570b68b88a585,后面可以知道是校验用的密文和模数n:


接下来在函数中调用了大数库miracl,一些函数功能可以参考文章https://blog.csdn.net/shuilan0066/article/details/8520337

首先是调用mirvar函数进行赋值的操作,然后调用cinstr函数将大数字符串转换成大数:

看到调用了幂模函数powmod,猜想是使用了RSA算法:


在使用RSA进行加密后,将得到的密文和刚刚初始化的一段密文进行校验,相等则返回1:


尝试恢复下验证函数1的源码:


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

收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 223
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
大佬真的厉害,请教下sig文件需要怎么使用的呢,我把这个文件放在7.0和6.8版本的ida sig目录里,加载文件里都找不到这两个sig
2018-7-3 19:56
0
雪    币: 155
活跃值: (120)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
3
泪落晨曦 大佬真的厉害,请教下sig文件需要怎么使用的呢,我把这个文件放在7.0和6.8版本的ida sig目录里,加载文件里都找不到这两个sig
你放到sig目录下的pc目录试试
2018-7-3 22:08
0
雪    币: 223
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
sherlly 你放到sig目录下的pc目录试试
厉害了,确实放在pc目录下就能识别了,感谢大佬
2018-7-6 14:16
0
雪    币: 1776
活跃值: (1500)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
萌新想问sig怎么生成的QAQ,自己编译的miracl.lib一直没法生成
2018-7-9 22:48
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
factordb输入是不是需要10进制数呀,如何把大数16进制转换成10进制,网上好多工具都溢出了?
2018-7-25 11:20
0
雪    币: 714
活跃值: (82)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
7
之幽灵 factordb输入是不是需要10进制数呀,如何把大数16进制转换成10进制,网上好多工具都溢出了?
直接用python的语法:int('需要转换的数字', 16)
2018-8-1 17:08
0
游客
登录 | 注册 方可回帖
返回
//