Halo semuanya! Saya memutuskan untuk berbagi dengan komunitas informasi tentang analisis kecil satu utilitas kecil (dengan kode yang dikaburkan), yang dikenal di kalangan sempit julukan 1s. Ini adalah artikel pertama saya tentang Habr, saya meminta Anda untuk tidak terlalu banyak menendang, tetapi layak untuk dikritik.
PenafianSegala sesuatu yang Anda lihat di sini dapat memengaruhi kemampuan mental Anda, jangan gunakan untuk diri sendiri apa yang dijelaskan dalam artikel, karena ini dapat membahayakan Anda. Penulis tidak bertanggung jawab atas keakuratan, kelengkapan, atau kualitas informasi yang diberikan.
Apa iniTurboConf adalah program "shareware" yang memperluas kemampuan konfigurator 1s,
bukan kata-kata lebih lanjut tentang 1s , yang tidak memerlukan instalasi. Anda dapat mengunduhnya di situs web dengan nama Runet yang sama. Semua studi dilakukan pada versi 5.9.7209.21363 tanggal 27 September 2019.
Analisis awalSetelah mengunduh, kami mendapatkan arsip zip. Buka kemasan. Kami melihat beberapa file exe. Mari kita lihat aplikasi utama dengan ikon perusahaan. Jika Anda membukanya di editor HEX sederhana, misalnya, HxD, Anda dapat dengan mudah memahami bahwa itu adalah kumpulan di bawah .Net Framework, karena nama kelas dari pustaka .Net standar terlihat:
Selanjutnya, kita ambil dekompiler DotPeek dan lihat perakitan ini di dalamnya. Bytecode tidak dikaburkan, sehingga dekompiler menghasilkan sumber yang hampir asli:
Kode Metode yang Dipulihkan Sangat mudah untuk memahami di sini bahwa lebih lanjut pekerjaan utilitas berpindah ke aplikasi "TurboConf.Application.exe". Buka di DotPeek. Ini juga merupakan perakitan dengan kode IL. Tetapi tidak seperti perakitan sebelumnya, beberapa metode di sini dikaburkan, kemungkinan besar menggunakan Confuser. Mempelajari kode, menjadi jelas bahwa logika utama pekerjaan adalah di "TurboConf.Service.dll" - dan ini juga merupakan perakitan untuk. Net, dan juga beberapa metode dikaburkan. Hebat, ini bahkan lebih menarik!
Penelitian PertahananSaat melihat struktur perakitan, di namespace "TurboConf.Service.Utils" kita menemukan kelas "Crypto", dan di dalamnya ada metode dengan nama berbicara "DecryptStringAES":
Meskipun dikaburkan, tidaklah sulit untuk mengembalikan logika kerja darinya di masa depan. Temukan penggunaan metode ini (Shift + F12):
Dan segera sukses! Metode ini disebut 2 kali dalam konstruktor kelas yang bertanggung jawab untuk perizinan!
Pemulihan sumberObfuscator mengenkripsi semua baris dan menempatkannya dalam satu file sumber daya. Anda bisa mendapatkan file ini menggunakan dekompiler Microsoft ildasm.exe yang termasuk dalam Windows SDK (dan tidak hanya):
Mengambil File Sumber Daya Dan alih-alih baris asli, obfuscator menggantikan konstruksi berikut dalam kode: "<Module> .c (random_arithmic_operation)", di mana hasil dari operasi aritmatika adalah angka tertentu berdasarkan di mana offset untuk file sumber daya dihitung, dari mana data yang dienkripsi kemudian diekstraksi dan string asli dikembalikan. Untuk memfasilitasi tugas mendekripsi string, kami akan membuat proyek baru di Visual Studio, mentransfer, dengan sedikit perbaikan, kelas "<Module>" dan file sumber daya "resource". Dengan demikian, kita dapat memahami bahwa di jendela DotPeek kode berikut
<Module>.c(sizeof (float) - 47, sizeof (int) + 6429, (int) ((uint) k >> 16) >= 0 ? sizeof (int) + 200 : System.Type.EmptyTypes.Length - 1805516213)
ini adalah baris "Pengguna:"
Kembalikan seluruh logika kelas lisensi secara perlahan. Kita bisa berhenti pada ini, yaitu, membuat sedikit peretasan sederhana di file "TurboConf.Service.dll" yang sedang diselidiki, mengganti cek kesetaraan untuk keberadaan lisensi dengan ketidaksetaraan, tetapi ini tidak menarik. Lebih jauh ...
Prinsip perlindunganUntuk mendapatkan lisensi, Anda memerlukan pengidentifikasi unik untuk peralatan tempat program dijalankan. HardwareID ini dihasilkan berdasarkan pengidentifikasi prosesor dan nomor seri volume drive "Ts". Untuk mendapatkan lisensi uji coba, program membuat permintaan GET dengan pengenal peralatan untuk domain "netlenka1c.ru". Dan sebagai tanggapan datang kunci yang menunjukkan tanggal akhir periode uji coba, ditandatangani ... secara digital. Program ini didasarkan pada algoritma RSA asimetris dengan kunci 1024-bit. Pada tahap ini, saya menyadari bahwa tidak mungkin dilakukan tanpa memodifikasi file asli, karena hampir tidak mungkin untuk mendapatkan kunci privat (tidak ada dalam file utilitas).
Pusat Lisensi MiniSetelah memahami cara kerja perlindungan, saya memutuskan untuk menjadikan diri saya dewa kecil untuk program ini, sehingga saya sendiri dapat menghasilkan kunci. Untuk melakukan ini, sebuah patcher dikembangkan, yang pertama kali mengganti kunci publik dari tanda tangan digital dalam perakitan dengan kunci publik yang dihasilkan itu sendiri:
Dan kemudian utilitas yang dikembangkan untuk menghasilkan kunci (baik sementara untuk periode validitas tertentu dan abadi), menambahkan tanda tangan digital ke kunci berdasarkan kunci pribadi yang dihasilkan itu sendiri:
Sebagai hasilnya, kami memiliki program terdaftar yang bisa diterapkan dengan fungsionalitas penuh:
AkhlakKebingungan adalah metode yang cukup bagus untuk membingungkan yang sebaliknya, tetapi itu hanya masalah waktu.
PSArtikel ini secara khusus memiliki celah dalam narasi, sehingga tidak menggantikan penulis program. Tidak ada kode sumber dan program kerja yang dilampirkan dan tidak akan. Hormati karya orang lain, terutama kolega di "toko"!
Terima kasih kepada semua orang yang membaca pos!