-
-
[原创] 看雪CTF2018-第四题-密界寻踪writeup
-
发表于:
2018-6-23 19:57
4760
-
[原创] 看雪CTF2018-第四题-密界寻踪writeup
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的源码:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!