[OSCCTF Final 2022] – Need Codes

Diberikan sebuah file PE32 Windows Executable yang meminta beberapa inputan code, yang jika benar semua maka flag akan diberikan.

Langsung saja kita buka IDA32 dan mendecompilenya. Mainnya ada pada sub_401460.

signed int sub_401460()
{
  unsigned int index; // eax
  unsigned int index_1; // eax
  signed int result; // eax
  int inputan; // [esp+3Ch] [ebp-50h]
  int arrayinput[7]; // [esp+40h] [ebp-4Ch]
  int arrsesuatu; // [esp+5Ch] [ebp-30h]
  int v6; // [esp+60h] [ebp-2Ch]
  int v7; // [esp+64h] [ebp-28h]
  int v8; // [esp+68h] [ebp-24h]
  int v9; // [esp+6Ch] [ebp-20h]
  int v10; // [esp+70h] [ebp-1Ch]
  int v11; // [esp+74h] [ebp-18h]
  int target; // [esp+78h] [ebp-14h]
  int i; // [esp+7Ch] [ebp-10h]

  sub_401B40();
  target = 14584570;
  index = 0;
  do
  {
    *(int *)((char *)&arrsesuatu + index) = 0;
    index += 4;
  }
  while ( index < 28 );
  index_1 = 0;
  do
  {
    arrayinput[index_1] = 0;
    ++index_1;
  }
  while ( index_1 < 7 );                        // diisi dengan 0
  inputan = 0;
  puts(“Generating hidden codes.”);
  sub_403BA0(5);
  for ( i = 0; i <= 6; ++i )
  {
    printf(“Enter code#%d: “, i + 1);
    scanf(“%d”, &inputan);
    arrayinput[i] = inputan;
    if ( i )
    {
      if ( arrayinput[i – 1] > inputan )        // jika arr sebelum lebih besar dari inputan
                                                // same as code nya mengecil
                                                //
      {
        puts(“Hacking attempt detected!”);
        return -1;
      }
      *(&arrsesuatu + i) = inputan * *(&arrsesuatu + i – 1);
    }
    else
    {
      arrsesuatu = inputan;
    }
  }
  if ( v11 == target )
  {
    puts(“Success!”);
    printf(“Your flag is OSC2022{%d_%d_%d_%d_%d_%d_%d}\n”, arrsesuatu, v6, v7, v8, v9, v10, v11);
    result = 0;
  }
  else
  {
    puts(“Try harder!”);
    result = -1;
  }
  return result;
}

Poin yang bisa kami ambil ketika menganalisisnya adalah:

  • Akan ada 7 pengambilan inputan
  • Array A akan dipakai untuk menampung hasil inputan, setiap tampungan akan dikalikan dengan inputan selanjutnya
  • Elemen terakhir array harus bernilai 14584570
  • Jika ketujuh elemen benar, maka flag yang terkalkulasi berdasarkan inputan akan diprint.

Jika dipikirkan lagi, berarti kita harus mencari angka-angka yang jika saling dikalikan hasilnya adalah 14584570. Ini sama dengan melakukan faktorisasi sebuah bilangan. Oleh karena itu, langsung saja kita buka http://factordb.com/ dan memasukkan 14584570.

Hasilnya = 

Nah, dari sini kita masukkan angka-angka tersebut ke dalam program dan lihat hasilnya:

Nice.

FLAG = OSC2022{2_10_70_770_10010_310310_14584570}

Leave a Reply

Your email address will not be published. Required fields are marked *