Dokumentasi
/
Resep
/

Menghindari Tabrakan Pengenal

Menghindari tabrakan pengenal antar berkas hasil obfuskasi

Ketika beberapa berkas hasil obfuskasi VM berakhir di dalam bundel yang sama, keduanya dapat mendeklarasikan pengenal tingkat atas yang sama dan membuat halaman crash saat parsing. Berikut alasannya dan cara memperbaikinya.

Gejalanya

Build Anda berjalan lancar, tetapi peramban melempar error saat parsing, sebelum aplikasi dimulai:

browser console

Error

Pemeriksaan cepat di seluruh bundel memastikan bahwa pengenal yang sama dideklarasikan di lebih dari satu chunk:

terminal

Shell

Mengapa ini terjadi

Secara bawaan, obfuskasi VM menggunakan generator nama pengenal mangled-shuffled. Ia menelusuri alfabet kecil dalam urutan acak yang deterministik, dan menambahkan awalan vm pada variabel global yang diperkenalkan oleh runtime. Kedua berkas mengeluarkan pengenal dari urutan acak yang sama — sehingga global pertama di masing-masing berkas berbagi nama yang sama, global kedua berbagi nama lain, dan seterusnya.

Setiap berkas diobfuskasi secara terpisah dan generator memulai ulang dari awal urutannya untuk setiap berkas. Ketika dua berkas berakhir di dalam bundel yang sama, nama-namanya bertabrakan. Dua deklarasi const vmd = … di tingkat atas berada di scope yang sama dan parser menolak deklarasi yang kedua.

Perbaikan

Pilih salah satu berikut — opsi pertama adalah perbaikan yang direkomendasikan:

  • Aktifkan randomIdentifiersPrefix (direkomendasikan)

    Setiap proses obfuskasi mendapatkan awalan acak yang unik di depan setiap pengenal yang dihasilkan. Nama dari berkas yang berbeda tidak lagi berbagi namespace, sehingga tabrakan hilang tanpa Anda harus mengoordinasikan awalan secara manual.

  • Setel identifiersPrefix yang unik per berkas

    Berikan awalan yang berbeda secara manual saat mengobfuskasi setiap berkas (mis. identifiersPrefix: 'auth_' untuk satu, checkout_ untuk yang lain). Efektif, tetapi rawan kesalahan jika Anda memiliki banyak berkas — lebih baik gunakan opsi acak di atas.

  • Ubah identifierNamesGenerator menjadi hexadecimal

    Nama heksadesimal menggunakan ruang kunci yang jauh lebih besar, sehingga peluang dua berkas menghasilkan pengenal yang sama sangat kecil. Konsekuensinya: pengenal menjadi lebih panjang daripada keluaran mangled-shuffled, sehingga bundel sedikit lebih besar.

  • Gunakan plugin bundler atau UI batch multi-berkas

    Sebagian besar plugin bundler resmi (webpack, Rollup, Vite) menangani keunikan awalan secara otomatis antar berkas dalam satu build. UI obfuscator.io juga menanganinya ketika Anda menggunakan obfuskasi batch multi-berkas. Jika Anda merangkai obfuskasi secara manual dengan API npm, Anda harus mengaktifkan sendiri awalan acaknya.

Opsi terkait