首页
论坛
课程
招聘
[原创]第三题 crackMe
2017-10-28 20:40 1521

[原创]第三题 crackMe

2017-10-28 20:40
1521

1. 输入注册码后,会首先调用0x434990对注册码进行两次处理,分析代码可以知道这是一个base64解码函数。


2. 接下来,调用0x435DE0对第一步得到的结果进一步处理,下面是这个函数的主要处理流程,如果输入字符是斜杠,则转换为空格输出,如果是空格,则将空格前面的字符串通过三个函数转换为一个字符。


3.分析这三个函数所转换的结果可知,分别是转换为字符,数字和本身。三个函数所匹配使用的字符数组很像摩斯密码,于是网上找到摩斯转换的C++代码,发现流程一模一样,所以0x435DE0应该就是将第一步的结果使用摩斯解密输出。


4. 接下来调用0x42DA78处理第一步得到的结果的前三个字节 ,分析该函数所调用的一个函数0x436700,可以看到很多常量,网上搜索这些常量,可知这应该是一个SM3加密算法


5.接下来使用SM3算法得到一个32字节hash值后,转换为十六进制字符串,然后和输入的注册码后64个字符串比较,一样才继续往下执行


6.最后调用0x42D9AB对摩斯解密的结果进行检查,该函数类似正则匹配字符串,但是有个缺点,就是没有对输入的字符串长度进行判断,遇到空格即返回TURE。


7.根据第5步我们可以知道,注册码为Base64encode(Base64encode(a))+SM3(a), 调试发现,注册码为 SM3 (00 00 00)的时候两个base64的结果是一个空数组(base64算法判断为不符合base64的字符时直接返回了,而输出数组事先清0过),导致SM3的输入也是00 00 00,造成了第一个条件成立,而第二个条 件的成立是随机的,因为摩斯解密出来的结果也是一个空数组, 匹配字符串的函数读取数值时会溢出 ,所以不一定每次都会成功,刚开始还以为注册码是错的,结果提交发现是正确的,所以没有继续研究了。 其注册码为 183920f00e15a0433ee3a8fc90dd9ac164c4142ccf63ca189a8f645ec96ff8de


 8.另外这个程序有很多反调试的地方,直接patch即可。





[培训]12月3日2020京麒网络安全大会《物联网安全攻防实战》训练营,正在火热报名中!地点:北京 · 新云南皇冠假日酒店

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回