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爆出这几个密文的数据就行:
知道了密文后,直接根据加密的算法,写解密脚本即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了