Saya telah mempelajari kebingungan nama dan baru-baru ini membaca beberapa hal tentang enkripsi string.
Ada fungsi perlindungan enkripsi string dalam perlindungan kebingungan dan shell enkripsi.
Secara umum, enkripsi string dapat dibagi menjadi dua kategori:
Kategori pertama adalah teknologi enkripsi string dalam perlindungan kebingungan. Fitur utamanya adalah mengubah jalur eksekusi kode.
Enkripsi string yang digunakan oleh sebagian besar alat perlindungan kebingungan termasuk dalam kategori ini.
Kategori kedua adalah teknologi enkripsi string dalam shell enkripsi. Metode ini secara langsung mengenkripsi string dalam metadata tanpa mengubah kode IL.
Kategori ini diwakili oleh remotesoft dan maxtocode.
Mari kita lihat kategori pertama terlebih dahulu. Implementasi enkripsinya kira-kira sebagai berikut.
Sebelum enkripsi:
MessageBox.Show("Halo Dunia!");
Setelah enkripsi:
MessageBox.Show(Helper.Decode("A34579dfbbeyu346563345/=="));
Sederhananya, di mana string awalnya digunakan, penggunaan string secara langsung diubah menjadi penggunaan string secara tidak langsung.
Di sini, perangkat lunak perlindungan mengenkripsi string "Hellow World!" dan memperoleh hasil "A34579dfbbeyu346563345/==".
Helper.Decode adalah fungsi dekripsi yang disediakan oleh perangkat lunak perlindungan, yang mengembalikan "A34579dfbbeyu346563345/==" menjadi "Hellow World!".
Karena ini adalah perlindungan kebingungan, kita dapat menganalisis dan mendapatkan kode yang Didekodekan. Kemudian langsung gunakan kode fungsi ini untuk menulis alat kecil guna memulihkan semua string terenkripsi di rakitan. Hasilkan tabel korespondensi string. Untuk memfasilitasi pembacaan kode dan debugging.
Jika Anda masuk lebih dalam, Anda dapat secara otomatis mengembalikan string ke rakitan aslinya.
Mari kita lihat kode IL dari contoh di atas.
Sebelum enkripsi:
ldstr "Halo Dunia!"
panggil MessageBox.Show(string)
setelah enkripsi:
ldstr "A34579dfbbeyu346563345/=="
string panggilan Helper.Decode(string)
panggilan MessageBox.Show(string)
sebenarnya sangat sederhana. Kita sudah mengetahui kode decode dan sudah bisa mendekripsi string tersebut. Tabel string yang sesuai diperoleh.
Langsung ubah
ldstr "A34579dfbbeyu346563345/=="
string panggilan Helper.Decode(string)
Ganti saja dengan
ldstr "Hellow World"
. Tulis saja alat kecil yang menggunakan ekspresi reguler untuk mencari dan mengganti.
Jenis perlindungan enkripsi string yang kedua:
Implementasinya adalah dengan mengenkripsi aliran String secara langsung di metadata.
Jenis perlindungan ini memiliki kelemahan. Setelah program dijalankan, aliran String dalam metadata akan didekripsi dan dikembalikan sepenuhnya ke dalam memori. Di artikel saya sebelumnya, saya memperkenalkan dump metadata. Saya tidak akan mengulanginya di sini.
Untuk jenis perlindungan enkripsi string yang pertama, ada bentuk lain, misalnya fungsi Helper.Decode dapat berupa fungsi asli.
Atau tercampur dengan prosesnya.