Theseus

2020/05/15-RCTF2019
Babyre1考点:xxtea加解密算法、RCR16校验第一个函数的作用是将我们输入的16位数据变成对应的hex值...
扫描右侧二维码阅读全文
15
2020/05

2020/05/15-RCTF2019

Babyre1

考点:xxtea加解密算法、RCR16校验
babyre1.png
第一个函数的作用是将我们输入的16位数据变成对应的hex值

动态调试结果如下:

我们输入1234567890123456
babyre12.png
返回值为8

第二个函数里面有xxtea解密操作
babyre13.png
v8是密文,v7是秘钥,中间的数为负数表示是解密操作,正数即为加密操作

跟进去看看为什么是xxTEA算法
babyre14.png
在我们对比了xxtea源码的时候,我们就可以看出这是个xxtea解密操作

在第二个函数中还有一个关键的点
babyre15.png
这里表示最后一位应该是小于4

第三个函数就是CRC16校验,但是只对前6位做了校验,并没有对后两位做校验,所以hint中又加入了一个md5值来限定多解问题
babyre16.png
如果我们的答案正确,我们将的到Bingo!,这个是我们输入异或上0x17的结果。

这样我们前6位可以找到,后面的两位暂时不确定

因为有md5值,我们可以选着爆破后面两位

最后一位是小于4的,爆破可以选着在0到4中考虑,再上一张图中我们可以确定最后一位是2

现在只需要爆破一位就可以达到我们的目的

xxtea的秘钥是这样的:
babyre17.png
直接写脚本爆破

import xxtea
import hashlib;
def decrypt(text,key):
    return xxtea.decrypt(text, key,padding=False);
def encrypt(text,key):
    return xxtea.encrypt(text, key,padding=False);

key = [0xc7,0xe0,0xc7,0xe0,0xd7,0xd3,0xf1,0xc6,0xd3,0xc6,0xd3,0xc6,0xce,0xd2,0xd0,0xc4]

key = ''.join( [ chr(i) for i in key ] );
cipher = [0x55,0x7e,0x79,0x70,0x78,0x36,0,0];
for i in range(0xff):
    print i;
    for j in range(4):
        cipher[6]=i;
        cipher[7]=j;
        t = encrypt( ''.join( [ chr(k) for k in cipher ] ) , key);
        t = t.encode('hex');
        t = "rctf{" + t + "}"
        # print i,j,t;
        # print hashlib.md5(t).hexdigest()
        if (  hashlib.md5(t).hexdigest()=="5f8243a662cf71bf31d2b2602638dc1d" ):
            print 'get!!!!!!!!!!!!!!!!!!!';
            print t;

babyre2

同样是64位的ELF文件
babyre20.png
因为出题人使用异或手段将关键字符串给隐藏起来,不过直接动态调试就可以看到各个关键字符串

结合动态分析,一个一个函数的看

sub_55f806c0691a这个函数是对用户名进行输入:
babyre21.png
可以看到输入的用户长度为8到16,并没有对输入有具体的要求

第二个函数就是输入密码:
babyre22.png
密码的输入长度也是在8到16之间,同时对输入的内容作出了限制,ascii码在9到99之间

再输入data前有一个函数对输入的用户名进行了处理
babyre23.png
这里是用我们输入的用户名作为xxTEA加密的秘钥,对v8进行加密,得到一个字符串s1

然后看我们输入data,data的数据长度为1到1024,对输入也是做了限制的,只能是0~9a~fA~F
baby24.png
总体的逻辑就是用户作为xxtea的秘钥对字符串加密生成字符串s1

输入的密码作为索引在我们输入的data中寻找字符作为s2,然后又使用xxtea进行加密,指套最后一位小于4就可以得到flag

但是这个题目是放在服务器上进行验证的,后面的就不是那么会分析。(5555555)

ps后面还有几个要复现,这个月底2020RCTF就要开始了,加油

最后修改:2020 年 07 月 10 日 09 : 15 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论