Fireeye FLARE Challenge - C1 [SPOILER ALERT!]

RightsBox › IT

http://www.flare-on.com/

Fireeye Labs 高级逆向工程 (FLARE) 团队是一支由技术精英组成的队伍,其中有恶意软件分析师、研究人员、黑客。我们正招揽对逆向工程感兴趣的人才。我们将以这一系列的挑战来测试你的技能。同时,秉着寓教于乐的目的,我们也鼓励任何人的参与。

任务很简单:分析所给的样本,并找出答案。
每个答案都是一个邮箱地址,只需给这个地址发送邮件就能进入下一关。
完成最终关后,你将得到一份奖品,并接到来自 FLARE 团队的联系。

Here we go!

首先下载到的是一个名为 Flare_On_Challenge.EXE 的自解压包,内含 Challenge1.exe,这才是主角。

试着运行一下,是个典型的 .NET 程序。不废话了,直接说如何找到答案。用 CFF Explorer 打开,发现有 .NET 资源,其中一个名为 rev_challenge_1.dat_secret.encode,看名字就知道一定有奥秘。欲知如何解密,用 ILSpy 进行反编译,在代码中看到了一段似乎是解密例程的函数:

private void btnDecode_Click(object sender, EventArgs e)
{
    this.pbRoge.Image = Resources.bob_roge;
    byte[] dat_secret = Resources.dat_secret;
    string text = "";
    for (int i = 0; i < dat_secret.Length; i++)
    {
        byte b = dat_secret[i];
        text += (char)((b >> 4 | ((int)b << 4 & 240)) ^ 41);
    }
    text += "\0";
    string text2 = "";
    for (int j = 0; j < text.Length; j += 2)
    {
        text2 += text[j + 1];
        text2 += text[j];
    }
    string text3 = "";
    for (int k = 0; k < text2.Length; k++)
    {
        char arg_B6_0 = text2[k];
        text3 += (char)((byte)text2[k] ^ 102);
    }
    this.lbl_title.Text = text3;
}

显然只有 text3 被显示了出来,text 和 text2 不知道干啥去了。再一看 text 进行了奇怪的运算,是典型的加密/解密过程。试将其“翻译”为 C 代码:

#include <stdio.h>

int main()
{
    unsigned char data[32] = {
        0xA1, 0xB5, 0x44, 0x84, 0x14, 0xE4, 0xA1, 0xB5, 0xD4, 0x70, 0xB4, 0x91, 0xB4, 0x70, 0xD4, 0x91,
        0xE4, 0xC4, 0x96, 0xF4, 0x54, 0x84, 0xB5, 0xC4, 0x40, 0x64, 0x74, 0x70, 0xA4, 0x64, 0x44, 0x00
    };

    char foo[32] = {0};

    for(int i = 0; i < 31; i++)
        foo[i] = (char)((data[i] >> 4 | ((int)data[i] << 4 & 240)) ^ 41);

    printf("%s\n", foo);

    return 0;
}

编译运行,得到答案:
[email protected]
(Ermahgerd.bob.doge)

RightsBox › IT

2014-07-30  ·  298 次查看  ·  V2EX