Saya telah mempelajari materi terkait DotNet baru-baru ini, dan sscli benar-benar bagus :P.
Sambil belajar, saya mensintesis ilmu dan membuat alat kecil ini.
Prinsip perlindungannya mirip dengan remotesoft dan maxtocode Cina. Program terenkripsi juga perlu disertai dengan perpustakaan runtime saat dirilis.
Namun, tidak seperti keduanya, pustaka runtime yang disertakan bukanlah dll asli murni, melainkan rakitan hibrid C++/CLI.
Alat ini telah terbentuk dan kerangka kernel secara keseluruhan telah selesai. Digunakan untuk mengenkripsi sampel dan berjalan normal.
Beberapa aspek bahkan melebihi maxtocode.
1. Tidak bergantung pada program ildasm dan ilasm Microsoft.
Pembongkaran IL dan perakitan IL diimplementasikan secara terprogram.
Rakitan yang berisi kode asli dapat dienkripsi.
2. Alat anti dekompilasi, rakitan terenkripsi maxtocode tidak dapat dilihat langsung dengan reflektor, tetapi setelah menjalankan program, gunakan pedumper, dan setelah dumping, Anda dapat menggunakan reflektor untuk melihat strukturnya.
Rakitan yang dienkripsi oleh dnguard lebih baik dari yang saya harapkan. Rakitan terenkripsi tidak dapat dilihat dengan reflektor, dan rakitan yang dibuang tidak dapat dilihat dengan plug-in reflektor.
Saya merasa reflektornya masih agak lemah. Perangkat lunak serupa, Disa# dan Xenocode fox, dapat langsung membuka dan melihat rakitan terenkripsi maxtocode dan dnguard.
Untuk tujuan ini, saya mencoba menambahkan kebingungan struktural ke rakitan terenkripsi dnguard. Ini memiliki efek, yaitu ketika melihat struktur di Disa# dan fox, akan ada beberapa kebingungan, yaitu fungsi kelas A mungkin ditampilkan. di kelas B. Efeknya kurang bagus, hanya ada beberapa fungsi di setiap kelas yang akan menimbulkan masalah.
3. Fitur baru Anti .Net 2.0 tidak terlalu kuat. Kekuatannya mirip dengan maxtocode 3.13 (versi internal). Saya dengar maxtocode telah merilis 3.14 pada balasan di blog Jason, sepertinya sama dengan 3.13). Max 3.12 dapat digunakan dengan menambal beberapa byte saja, dan refleksi yang dapat digunakan 3.13 tidak jauh berbeda, dan jumlah byte yang perlu ditambal bahkan lebih sedikit dari 3.12.
Sekarang ada solusi yang lebih baik dalam hal ini, yang dapat meningkatkan intensitas secara signifikan tanpa mempengaruhi efisiensi. Namun hal ini tidak dapat sepenuhnya mencegah pembuangan sampah.
Ada juga solusi anti-dump yang relatif sempurna, yang perlu diterapkan bersama dengan teknologi perlindungan lainnya.
Kami tidak berencana untuk membahas aspek ini secara mendalam. Setelah shell enkripsi DNGuard selesai, kami akan memulai teknologi perlindungan lain dan akhirnya menggabungkan kedua perlindungan tersebut.
4. Gunakan ildasm dan ilasm untuk memulihkan perakitan setelah Anti dump. Selain fitur anti-dump baru anti .net 2.0, DNGuard juga menambahkan anti dumper yang saya buat di awal-awal. Selain itu, fitur perakitan hybrid C++/CLI juga digunakan untuk mencegah ildasm setelah dump. Namun, ini tidak terlalu kuat, dan perakitan kecil dapat dengan mudah diperbaiki untuk menerapkan perakitan IL.
Masih banyak pekerjaan yang perlu dilakukan. Algoritme enkripsi belum berhasil, dan perlindungan perpustakaan runtime itu sendiri belum selesai. Saya menemukan bahwa Anda dapat menemukan alat perlindungan siap pakai untuk DLL asli murni, seperti thmida, yang sangat bagus. Pustaka runtime maxtocode menggunakan shell ini, tetapi saya tidak pernah dapat menemukan metode yang baik untuk C++/CLI DLL. . Tampaknya kami hanya dapat menambahkan lapisan perlindungan secara manual, dan kami sudah mulai mengujinya. Sekarang kita akan menambahkan shell enkripsi sederhana. Setelah ini selesai, kita akan memasang demo DNGuard di dalamnya.
Setelah DNGuard mengenkripsi rakitan, gunakan reflektor untuk melihat:
Gunakan reflektor untuk melihat dump perakitan terenkripsi DNGuard:
Majelis yang dienkripsi oleh Maxtocode dilihat dengan Reflektor:
Setelah Membuang rakitan terenkripsi Maxtocode, lihat dengan Reflektor: