Diberikan file exe yang cukup besar , kemudian kami lakukan static analysis pada file exe tersebut.
Terlihat pada fungsi main terdapat mapping terhadap file dengan nama “winrarsfxmappingfile.tmp” , kemudian kami coba lakukan pencarian terhadap string tersebut dan ternyata pada kasus njRat terdapat algoritma yang sama dan melakukan write file untuk second stage executable ke Local\Temp\RarSFX1 ( https://menshaway.blogspot.com/2021/03/njrat-malware.html ). Jadi saat kami menjalankan file kami coba cek direktori tersebut dan didapatkan file exe . Disaat yang bersamaan kami juga melakukan dynamic analysis cuman pas cek direktori tersebut ternyata ada file 5head.exe yang dibuat dengan electronjs , jadi kami lanjut analisis file pada direktori tersebut.
Sayangnya saat mencari informasi kami tidak mendapatkan sesuatu yang penting, yang kami ketahui pasti disini saat menjalankan file terdapat tombol authenticate dan pada direktori resources/app terdapat index.html dengan tombol serupa.
Kemudian kami lakukan view page source dan terdapat obfuscated javascript , lakukan deobfuscate secara otomatis + manual.
Intinya kode tersebut melakukan pengambilan gambar melalui kamera ( grabframe ) lalu dilakukan encoding pada fungsi _0x576184 dan dilakukan pembandingan dengan variable_0x583cf8 . Selanjutnya kami lakukan analisis pada fungsi _0x576184 .
Fungsi tersebut intinya melakukan perkalian banyaknya nilai yang sama dengan 2**8 lalu menambahkan nilai tersebut ke hasil perkalian sebelumnya. Jadi untuk mendapatkan nilai dan banyaknya nilai tersebut bisa dengan melakukan bruteforce pengurangan terhadap data kemudian di modulo dengan 2**8 , jika hasilnya nilai pengurangannya adalah nilai yang kita cari. Untuk mendapatkan banyaknya bilangan tinggal membagi hasil pengurangan tersebut dengan 2**8. Berikut script helper yang kami gunakan untuk melakukan generate value tiap pixelnya
arr = [array_0x583cf8]f =open("pix.txt","w")for i in arr:for j inrange(0xff+1):if((i-j)%2**8==0): length = (i-j)/2**8 val =str(j) f.write((val+",")*length)f.close()
Selanjutnya kami melakukan write ke image menggunakan javascript ( write pada canvas ), dan menebak nilai width dan height , setelah mencoba coba sampai ke tahap mencoba widthxheight dari common monitor resolution kami mendapatkan gambar yang dapat dilihat string flagnya
<!DOCTYPEhtml><html><body><canvasid="myCanvas"width="1000"height="4000"style="border:1px solid #d3d3d3;">Your browser does not support the HTML5 canvas tag.</canvas><script>var c =document.getElementById("myCanvas");var ctx =c.getContext("2d");var z =710;constimageData=ctx.createImageData(1280,1024);constarrData= [value_pix_txt];for (let i =0; i <imageData.data.length; i +=4) {imageData.data[i +0] = arrData[i]; // R valueimageData.data[i +1] = arrData[i+1]; // G valueimageData.data[i +2] = arrData[i+2]; // B valueimageData.data[i +3] = arrData[i+3]; // A value}ctx.putImageData(imageData,20,20);</script></body></html>
Flag : MDT4.0{bypassed_face_recognition_wannabe_app_with_my_5Head}