2023-GUDOCTF-L!S!(bindiff的使用)

文章讲述了作者在面对两个名为ls的文件时,通过在Linux环境下运行发现它们实际上是ls命令的不同版本。作者使用IDA的Bindiff插件进行二进制差异分析,找出了被加密的函数。通过对函数的分析,确定了简单的异或加密方式,并在遇到反调试机制后,提取数据进行爆破。最终,作者编写脚本解密得到了HZCTF的flag,证明Bindiff是一个有用的工具。
摘要由CSDN通过智能技术生成

L!S!

说实话,起初看到这道题是很懵逼的,莫名其妙的两个文件,刚开始还没有理解到ls指得是linux的命令,以为是两个ELF可执行文件罢了。于是乎,我将其放入linux运行之后发现到一些端倪。

在这里插入图片描述

运行两个文件,发现居然都是执行的ls命名。后来尝试运行将文件运行加上ls的命令,比如ls -help是查看ls命令帮助,我./ls-original -help,也是同样的情况。

两个同样的文件,都是ls,似乎还是源码的感觉。想了很久,有仔细看了看名字,才恍然大悟。原来的将ls修改了,一个是修改后的,一个是源码。正好前些阵子听师傅讲过一个插件。bindiff,IDA插件,用于恢复符号表和对比函数。正好可以做这道题。

这个大佬对于安装写得很详细

BinDiff安装使用教程 - 诸子流 - 博客园 (cnblogs.com)

安装bindiff之后,我们打开IDA分析patch后的文件,然后分析源码文件,然后关闭文件,我们需要的是源码文件的IDB文件。

在这里插入图片描述

打开我们的源码IDB,这个文件进入分析

在这里插入图片描述

我们直接点到这个Matched Function这个窗口,这个窗口就是我们已经匹配的函数

在这里插入图片描述

对于最前面的这个列表,表示的就是函数匹配程度,1代表完全匹配,越接近1匹配程度越高。

在这里插入图片描述

我们翻到后面,发现有一个函数只有0.84,这个就是更改过后的函数了。

在这里插入图片描述

进入函数分析
在这里插入图片描述

通过分析,我们可以知道,是将v19,v20这些数据进行了加密,而加密方式是简单的异或,但是IDA分析得很乱,具体是怎么异或的,或者异或的啥我们都不知道。而且发现有反调试(确切不知道,主要是一调试就会强制退出)。我们先将数据提取出来。

到了这里,我们来想一想我们手上有那些有用的信息,我们知道数据,而且知道了加密方式,知道前六个字符铁定是HZCTF{。根据这些信息我们可以对其异或的值进行爆破,然后再通过观察得到的值来查找规律。不料,直接一发入魂,爆破出来,异或的全是76。然后我们直接写脚本解出flag

#include <stdio.h>

int main()
{
    int i, x = 45;
    char m = 0;
    unsigned char data[46] = {
        0x04, 0x16, 0x0F, 0x18, 0x0A, 0x37, 0x2E, 0x7D, 0x22, 0x28, 0x25, 0x2A, 0x2A, 0x13, 0x7D, 0x3F,
        0x13, 0x2D, 0x13, 0x39, 0x3F, 0x7F, 0x2A, 0x39, 0x20, 0x13, 0x38, 0x7C, 0x7C, 0x20, 0x31, 0x00,
        0x40, 0x20, 0x77, 0x10, 0xB6, 0x55, 0x00, 0x00, 0x5C, 0x18, 0xAA, 0x3A, 0x94, 0x7F};
    for (i = 0; i < 46; i++)
    {
        data[i] ^= 76;
        printf("%c", data[i]);
    }

    return 0;
}

HZCTF{b1ndiff_1s_a_us3ful_t00l}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值