[Angstrom CTF 2018]: Product Key – Static Analysis

Challenge:

Artemis wants a copy of Windows, but she doesn’t feel like paying for it. She decided to hack Microsoft’s servers to generate a product key, and found their verification software, which runs on Linux for some reason. Can you get her a working product key (form ABCD-EFGH-IIJK-LMNO-PQRS-TUVW, each uppercase letter is a digit) using the emailartemis.tosini@example.com and name Artemis Tosini?

File.

Jadi pertama kita mencoba untuk buka file activate yang telah diberikan di IDA.

 

Terlihat bahwa program melalui function verify_key untuk mengecek product key. Lalu saya mendekompilasi function main dan function verify_key tersebut.

 

Pertama product key yang dimasukkan dipisahkan berdasarkan garis (“-“) dan merubahnya menjadi integer. Selanjutnya, ia melakukan iterasi sepanjang email yang diberikan dan menambahkan padding hingga panjangnya 32 dan melakukan hal yang sama terhadap name yang diberikan. Tetapi padding yang diberikan dari array pad kepada name dilanjutkan dari yang diberikan kepada email, tidak dimulai dari awal array pad.

Setelah memberikan padding, ia melakukan XOR terhadap setiap byte dalam name dengan 15 dan melakukan XOR terhadap setiap byte dalam email dengan 5.

Lalu ia menghitung 6 angka yang didapat dari array email dan name. Setelah itu ia mengkalikan nilai pertama dengan 2, nilai kedua dengan 4, nilai ketiga dengan 6, nilai keempat dengan 8, nilai kelima dengan 7 dan nilai keenam dengan 5. Setelah setiap perkalian, hasilnya juga dimodulus dengan 10000.

Sekarang kita punya 6 angka yang diperoleh dari email dan name. Lalu ia juga melakukan operasi terhadap 6 angka yang didapat dari product key, yaitu menukar (swap) letak 6 angka tersebut dan melakukan pertambahan array menggunakan email dan name. Setelah itu selesai dilakukan, lalu 6 angka tersebut dibandingkan dengan 6 angka sebelumnya. Jika keenam angka tersebut sama, maka product key tersebut benar atau valid.

 

Untuk mendapatkan product key yang benar, pertama kita harus mengkalkulasikan keenam angka yang didapatkan dari email dan name tersebut dengan menggunakan algoritma yang sama. Lalu kita melakukan operasi yang sebaliknya yang dilakukan oleh function verify_key kepada product key kepada keenam angka yang kita dapatkan. Terakhir kita memisahkan keenam angka tersebut dengan “-“. Kita dapat menggunakan script Python dibawah ini:

Lalu mencobanya di program activate

Flag:

3914-6104-4611-1711-1243-4699

Leave a Reply

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