BUUCTF之[GWCTF 2019]xxor~~

老样子,无壳64位。

然后丢ida继续分析.

在函数列表中找到Main函数,继续分析

一开始是让你输入6个int类型的数,并存入到v6数组中

在外层的循环中,出现了LODWORD和HIDWORD,这里就是指的高位字节,和地位字节。

而为什么上面的dword_601078不用LODWORD呢?这里我是将数据类型改为了int,也就是传入一个字节,这里原来的数据类型是__int64,也就是8个字节,我强制转了int.

然后在第二个for循环中,有一个关键的函数sub_400686,继续跟进

发现是对传入的数据进行一个整体的加密,而传入的参数也是我们输入的数据。

这里要注意一个点,外层是三次循环,对每次传入的第a[i],a[i+1]的数据进行加密,也就是一共加密了3次,每次加密2组数据

而内层循环也应证了这一点,每次对a[i],a[i+1]进行加密

 

最后在main函数的末尾中,有一个sub_400770函数,发现里面是将加密后的数据进行比对.

这里就可以作为密文了。

这里我们可以通过z3解出来这几个密文的数据

tips:这里的负数,在计算机中是以补码的形式存在的,不能直接转Hex,而是要按位取反+1,在计算器直接用not也行

下面直接用z3爆出这几个密文的数据就行:

知道了密文后,直接根据加密的算法,写解密脚本即可

posted @ 2022-12-03 12:21  Qsons  阅读(220)  评论(0编辑  收藏  举报