CTF练习-Reverse系列-HighwayHash64

CTF练习-Reverse系列-HighwayHash64

这道题运用highwayhash64算法,需要爆破hash的题目。程序首先对flag的长度进行hash校验,然后对flag里的数字进行校验,所以首先需要爆破flag长度,然后爆破flag内容。这里有两种方法,一种是修改源码进行源码,另外一种是直接修改exe为dll注入来爆破。

解题过程

题目探测

这道题目所用的附件为一个exe文件,结果如下:

显示题目描述为: hxb2018{xxxxx}。需要输入一串数字flag,输入其他字符串时提示退出。

首先判断该程序是否加壳以及程序位数,若经过加壳处理需要通过脱壳处理。

得出该程序为64位未加壳程序

题目分析

将程序通过IDA打开该程序,在左边框中找到main主函数,然后按TAB键反汇编获得函数

我们来分析下这个程序流程。

首先可以得出sub_140001880函数为控制台的输出函数

1
sub_140001880("Please enter flag(Note:hxb2018{digital}:");

然后通过gets_s()函数从标准的输入中读取数据

1
2
gets_s(Buffer, 0x104ui64);
//gets_s(words,STLEN);

这里的长度限制为int(‘0x104’,’16’)=260,当输入行太长时会丢弃输入行的其余字符,剩余的字符留在缓冲区成为下一读取语句的输入

接下来查看sub_1400017A0函数,一个应该为输入的字符串,第二个为输入值的长度16进制

1
if ( sub_1400017A0(v7, 4i64) != 0xD31580A28DD8E6C4ui64 )

下面也调用了该函数

1
if ( sub_1400017A0(&Buffer[8], (unsigned int)v3) != 0xC886BDF39CB4ED72ui64 )

当判断成功时,会输出成功

1
sub_140001880("successful!\nplease entry any key exit...");

大致的意思应该为计算输入字符串进行哈希计算,然后判断是否为0xD31580A28DD8E6C4ui64,经后续判断为HighwayHash64摘要计算。

题目解答

这里想到的解题思路为调用HighwayHash64算法对输入字符串进行爆破,当计算结果为0xD31580A28DD8E6C4ui64时即可

HighwayHash64

这里首先跟进下sub_1400017A0函数,判断是否和HighwayHash64算法一致。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2024 John Doe
  • 访问人数: | 浏览次数:

让我给大家分享喜悦吧!

微信