Reverse Engineering

Challenge
Link

WHOMEGALUL (663 pts)

WeirdChamp (691 pts)

WHOMEGALUL (663 pts)

Description

-

Solution

Diberikan file ELF 64 bit , disini kami langsung coba melakukan decompile

__int64 main__main()
{
  __int64 v0; // rdx
  char *v2; // [rsp+0h] [rbp-60h]
  int v3; // [rsp+8h] [rbp-58h]
  int v4; // [rsp+Ch] [rbp-54h]
  __int64 v5; // [rsp+10h] [rbp-50h]
  __int64 v6; // [rsp+18h] [rbp-48h]
  char v7; // [rsp+20h] [rbp-40h]
  char v8; // [rsp+30h] [rbp-30h]
  char v9; // [rsp+40h] [rbp-20h]
  __int64 v10; // [rsp+50h] [rbp-10h]
  __int64 v11; // [rsp+58h] [rbp-8h]

  v5 = os__hostname();
  v6 = v0;
  memmove_plt(&v7, &v5, 16LL);
  v2 = L_1261;
  v3 = 53;
  v4 = 1;
  memmove_plt(&v8, &v2, 16LL);
  memmove_plt(&v9, &v7, 32LL);
  main__Credential_validate(&v9);
  return println(v10, v11);
}

Terlihat dari fungsi main__main , bahwa hostname dari komputer kita digunakan sebagai argument dari fungsi main__Credential_validate.

Pada fungi main__Credential_validate dilakukan pengecekan panjang hostname kita, kemudian dilakukan hash dengan algoritma crc32 untuk per 4 byte nya

Selanjutnya dilakukan penambahan untuk nilai index yang tidak sama ( i!=j ) dan dilakukan pengecekan dengan hardcode value pada binary. Jadi disini kami lakukan extract terhadap hardcode tersebut lalu gunakan z3 untuk mendapatkan nilai dari crc32 flag per 4 byte , untuk mendapatkan plaintext lakukan bruteforce.

Selanjutnya bruteforce, disini kami menggunakan pypy untuk mempercepat proses bruteforce

Untuk mendapatkan flag disini kami lakukan write saja ke memory

Flag : MDT4.0{700fc9fb1e75a6e9af24041d0ca0e205f4719a4f}

WeirdChamp (691 pts)

Description

-

Solution

Diberikan file exe yang cukup berat, dibuat dengan F# . Disini kami menggunakan dnspy untuk melakukan decompile terhadap file exe tersebut

Tentunya setelah menunggu cukup lama akhirnya kami mendapatkan full source codenya , berikut untuk full source codenya

Disini kami kesulitan karena tidak dapat menjalankan filenya namun setelah kami analisis ternyata pada setiap function yang didefinisikan terdapat pemanggilan fungsi print , yang melakukan print β€œL” . Karena saat kami lihat terdapat tail head , seperti 2 mata koin , dan ada print huruf β€œL” maka kami simpulkan bahwa L bermakna LOSE , dan ada fungsi yang melakukan print β€œW” yang bermakna WIN . Jadi kami coba cari fungsi yang melakukan print β€œW” , dan ternyata ADA.

Karena diawal terlihat bahwa fungsi ini melakukan pemanggilan fungsi lain secara rekursif maka disini kami sama saja dengan melakukan rekursif secara reverse ( dari child ke parent ). Disini kami mendapatkan keseluruhan flagnya secara manual :) . Tinggal search search aja untuk nama fungsinya

Kemudian tinggal gabungkan dari bawah ke atas atau atas ke bawah lalu reverse dan diapatkan flagnya.

Flag : MDT4.0{W_R3vers3r_0n_g0d}

Last updated