buuctf xxor

题目给了一个文件,直接在IDA中反编译,找到main函数,F5大法查看伪代码

 

 连续输六个内容。。其实都要正确吧。输入保存在v6中,下面的for循环对v6做了一些操作,先看最后应达成的条件,应该是要让sub_400770这个函数返回非零值,跟进查看

 

 这里给出了v11应满足的条件,根据这些条件是可以列方程求出v11的值的,一开始让我感觉疑惑的是每个数组元素都是这么长一串数字。。回去看这里定义的v11是int64类型的,可以存放8个字节。

最后得到的v11为0xDF48EF7E,0x20CAACF4,0xE0F30FD5,0x5C50D8D6,0x9E1BDE2D,0x84F30420(一共六位),然后追溯v11的赋值,

在main函数的for循环里

 

 将v6做了一系列操作后赋值给v11,跟进查看sub_400686函数

 

 这里做了很多的异或操作,其实看起来和tea加密差不多。。但是不太一样,可以参照一下tea的加密原理

https://blog.csdn.net/gsls200808/article/details/48243019

其实就是把tea的delta改变了,然后在加密操作的时候稍微更改了一下,把tea的解密脚本改改也能用

这里的key对应的是unk_601060,查看数据得到值为2234,解密脚本如下(直接按tea解密脚本改的)

 

 解密后得到一个十六进制数据,在在线网站上十六进制转文本即可得到flag

 

 

 

 

最后的flag为flag{re_is_great!}

posted @ 2020-08-12 11:35  Th1r7een  阅读(165)  评论(0)    收藏  举报