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爆出这几个密文的数据就行:
知道了密文后,直接根据加密的算法,写解密脚本即可