Pendahuluan
Publikasi ini bertujuan mempelajari beberapa teknik rekayasa terbalik. Semua materi disajikan hanya untuk tujuan informasi dan tidak dimaksudkan untuk digunakan untuk keuntungan pribadi apa pun.
Subjek penelitian
Sebagai contoh, kita akan mempelajari kode Dokumentasi Atomineer Pro (selanjutnya disebut APD). Ini adalah plug-in untuk Visual Studio yang dirancang untuk secara otomatis menghasilkan komentar dalam kode sumber. Pertama, instal plugin ini dan periksa operasinya. Versi gratis memiliki masa percobaan dan sejumlah batasan penggunaan selama waktu ini. Jadi ketika menambahkan komentar ke file, pengguna diberi pesan yang menyatakan bahwa pada siang hari Anda hanya dapat memproses 10 file
Ketika Anda mencoba memproses seluruh proyek, utilitas menampilkan peringatan dialog bahwa perintah ini tidak tersedia.
Mari kita mulai
Pertama, lihat di direktori ekstensi yang diinstal dan temukan hanya ada satu perpustakaan dinamis. Kami membutuhkannya. Hal pertama yang akan kita lakukan adalah mengunggahnya ke dekompiler dotPeek dari JetBrains.
Seperti yang dapat Anda lihat di layar, perpustakaan melewati obfuscator, variabel dan metode diubah namanya dan memiliki nama seperti a, b, c, d ... inilah yang kami butuhkan. Kami hanya mencari itu. Mari kita lihat apa yang bisa dilakukan.
Bagian 1
Hal pertama yang terlintas dalam pikiran adalah menemukan garis, tetapi karena fungsi pencarian tidak di dotPeek, mari kita pergi dengan cara yang berbeda. Kami mendekompilasi pustaka dengan
ildasm.exe standar dari Microsoft SDKs. Output hanya akan menerima satu file teks. Di dalamnya, dan cari teks pesan "
Mode Percobaan. Harap perhatikan bahwa ... "
Menemukan metode
.method family hidebysig bool statis e () cil dikelola
Yang termasuk ke dalam kelas CmdDocThisScope. Sekarang kembali ke dotPeek.
Jadi apa yang kita miliki. Kami menemukan metode yang menampilkan pesan percobaan APD dan, tergantung pada kondisinya, mengembalikan benar atau salah. Kami menemukan semua tempat dari mana metode ini dipanggil
Hanya 2 titik panggilan ditemukan dan ini adalah metode CmdDocThisFile :: c dan CmdDocThisScope :: c.
Dengan nama kelas dan kode konstruktor, jelas bahwa kelas bertanggung jawab atas item menu, dan virtualitas dari metode "c" menunjukkan bahwa ini adalah pengendali event untuk memilih item menu yang sesuai oleh pengguna (Informasi ini akan berguna bagi kita lebih lanjut). Sangat mudah untuk menebak bahwa jika metode ini mengembalikan true, maka perintah akan dieksekusi meskipun akan menampilkan dialog dengan peringatan.
Pada awal metode CmdDocThisScope :: e, variabel f ββbertambah. Buka jendela "Tampilan IL" dan temukan kode perintah:
Wikipedia memiliki artikel yang
menjelaskan instruksi ini .
Selanjutnya, cari metode ini di file library APD. Kami akan melakukan ini menggunakan alat IDA. Di jendela dengan fungsi kita akan menemukan metode kita, dan kita akan melihat kode yang sudah akrab.
Setelah memilih instruksi ldsfld, kami menemukan representasi binernya di jendela Hex View
Deskripsi tim mengonfirmasi bahwa kami telah menemukan tempat yang tepat.
Analisis lebih lanjut dari kode untuk metode ini dan langkah-langkah selanjutnya berada di luar cakupan artikel ini.
Bagian 2
Sekarang, sebagaimana peneliti yang sudah berpengalaman, kami menemukan panggilan untuk dialog dengan pesan "
Perintah 'Dokumen semua dalam Proyek' hanya tersedia dalam versi lengkap ... ". Metode ini adalah CmdDocThisProject :: c
Kelas CmdDocThisProject bertanggung jawab atas perintah "Project Project", metode "c" adalah virtual. Dan itu hanya berisi satu hal - itu adalah panggilan untuk dialog dengan pesan. Tidak ada kondisi, tidak ada pemeriksaan. Mencari kode sumber membawa kita ke metode CmdDocThisProject :: i, yang memiliki apa yang kita harapkan di CmdDocThisProject :: c. Sekarang di IDA kita dapat dengan mudah menemukan metode yang diperlukan dan dapat mempelajari instruksi CIL
Kesimpulan
Tetap mengatakan bahwa artikel itu sengaja meninggalkan bercak putih untuk studi independen mereka.