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 @   Qsons  阅读(266)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示