Flare-On 2014 - Writeup Challenges

Ciao, in questo thread metterò le soluzioni alle Flare-On 2014.

Qui si può trovare l’archivio

https://flare-on.com/

Ed è possibile scaricarle con wget

wget https://flare-on.com/files/2014_FLAREOn_Challenges.zip

Quindi, SPOILER ALERT per chi vuole farle.


C1.exe - DONE

Summary

Il primo binario è un wrapper solo per accettuare l’EULA che genera il vero e proprio eseguibile della challenge, chiamato Challenge1.exe. Il binario è un .NET binary. Se eseguito mostra il seguente form

Da notare il pulsante DECODE! se lo clicchiamo l’immagine e il testo in alto cambiano e otteniamo

Eseguendo un file sul binario capiamo appunto che è un .NET binary.

$ file Challenge1.exe 
Challenge1.exe: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows, 3 sections

Possiamo utilizzare il tool dnSpy per decompilare. Non è più attivamente sviluppato ma funziona bene e ci permetterà di debuggare il tutto

Releases · dnSpy/dnSpy · GitHub

Una volta aperto il binario possiamo vediamo i vari asset di interesse

Il binario è poca roba. Genera un form, e definisce una funzione per gestire l’evento del click dell’utente. La funzione registrata è la btnDecode_Click, mostrata a seguire

// XXXXXXXXXXXXXXX.Form1
// Token: 0x06000002 RID: 2 RVA: 0x00002060 File Offset: 0x00000260
private void btnDecode_Click(object sender, EventArgs e)
{
    this.pbRoge.Image = Resources.bob_roge;
    byte[] dat_secret = Resources.dat_secret;
    string text = "";
    foreach (byte b in dat_secret)
    {
	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 c = text2[k];
	text3 += (char)((byte)text2[k] ^ 102);
    }
    this.lbl_title.Text = text3;
}

La funzione parte da un array di bytes contenuti nel binario, Resources.dat_secret, ed effettua tre processamenti, uno dopo l’altro. A questo punto per risolvere la challenge ci sono due modi diversi:

  • Il primo è debuggare in live con dnSpy, mettere un breakpoint nella riga string text = "", e vedere il risultato di text dal debugger, che mostrerà la mail flare-on di interesse.

  • L’altro invece è leggere l’array di byte dal binario ed eseguire il seguente codice python

#!/usr/bin/env python3

def main():
    bytes = b'\xA1\xB5\x44\x84\x14\xE4\xA1\xB5\xD4\x70\xB4\x91\xB4\x70\xD4\x91\xE4\xC4\x96\xF4\x54\x84\xB5\xC4\x40\x64\x74\x70\xA4\x64\x44'

    output = ""
    for b in bytes:
        output += chr((b >> 4 | b << 4 & 240) ^ 41)

    print(f"[INFO] Solution: {output}")

if __name__ == "__main__":
    main()

Alla fine si ottiene

3rmahg3rd.b0b.d0ge@flare-on.com

C2.exe - TO WRITE

Summary

C3.exe - TODO

Summary

C4.exe - TODO

Summary

C5.exe - TODO

Summary

C6.exe - TODO

Summary

C7.exe - TODO

Summary

Che figata, non so fare queste cose, ma sembrano divertenti (e anche stressanti immagino) , come al solito grazie leonardo per il lavoro che fai per noi. :pray:t2: