Ciao, in questo thread metterò le soluzioni alle Flare-On 2014.
Qui si può trovare l’archivio
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 ditext
dal debugger, che mostrerà la mailflare-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