Bantuan

Deobfuscator JS online: ubah kode terobfuskasi jadi mudah dibaca

Sebuah JavaScript deobfuscator membalik trik yang membuat kode sulit dibaca. Alat ini mengurai array string sederhana, menghitung ekspresi konstan, mendekode escape hex dan Unicode, serta mengganti nama bergaya _0x, lalu mencetak hasilnya dengan indentasi 2 spasi. Semua itu dilakukan dengan membaca kode, bukan menjalankannya: JavaScript Anda tidak pernah dijalankan dan tidak pernah diunggah, dan sebagian obfuskasi, yang dirinci di bawah, dibiarkan apa adanya.


Cara memakai deobfuscator JS online

  1. Tempel kode ke kolom JavaScript terobfuskasi. Sebelum itu, kolom menampilkan "Tempel JavaScript terobfuskasi di sini…". Batasnya 5.000.000 karakter.
  2. Pilih Opsi deobfuskasi untuk membuka empat kotak centang, semuanya aktif secara bawaan: Urai array string, Hitung konstanta, Dekode escape hex dan Unicode, dan Ganti nama variabel hex. Hapus centang pada langkah yang tidak Anda inginkan.
  3. Tekan Deobfuskasi. Layar Kode hasil deobfuskasi menampilkan hasilnya sebagai kode berwarna yang hanya bisa dibaca.
  4. Baca label di atas kode. Label itu menyebutkan apa yang berubah, misalnya "3 pencarian array diganti", "5 ekspresi disederhanakan", "2 literal didekode" atau "4 variabel diganti namanya". Jika tidak ada yang berlaku, labelnya berbunyi "Tidak ada yang perlu diurai atau disederhanakan, jadi kode hanya diformat ulang."
  5. Tekan Salin (berubah menjadi Tersalin) atau Unduh .js untuk menyimpan kode sebagai hasil-deobfuskasi.js.
  6. Pilih Edit kode untuk kembali ke teks Anda dan menjalankannya lagi dengan opsi lain.

Jika teks bukan JavaScript yang valid, Anda akan melihat "Ini bukan JavaScript yang valid: kesalahan sintaks di baris N, kolom M." dengan baris dan kolom yang sebenarnya, dan tidak ada yang diubah.

Fungsi tiap opsi

Langkah-langkah berjalan dalam urutan itu, sehingga pencarian array bisa diurai lebih dulu lalu digabung dengan tetangganya oleh langkah hitung konstanta. Nama properti, label, serta nama import dan export tidak pernah diganti, dan baris shebang di awal skrip tetap dipertahankan.

Contoh yang dikerjakan langkah demi langkah

Masukan ini berisi array string, nama bergaya hex, properti dalam tanda kutip, dan sebuah penjumlahan:

var _0x1a2b = ['hello', 'world', '\x68\x69']; function _0x3c(_0x4d) { console['log'](_0x1a2b[0] + ' ' + _0x1a2b[1], _0x4d, _0x1a2b[2]); } _0x3c(1 + 2 * 3);

Hasilnya:

function func1(arg1) { console.log("hello world", arg1, "hi"); } func1(7);

Labelnya berbunyi "3 pencarian array diganti", "5 ekspresi disederhanakan", "1 literal didekode", dan "2 variabel diganti namanya". Keluaran aslinya tersusun dalam beberapa baris dengan indentasi 2 spasi.

Decode JavaScript obfuscated: apa yang bisa dan tidak bisa dibalik

Alat ini tidak pernah menjalankan kode Anda, jadi hanya bisa membalik apa yang terlihat di dalam teks. Apa pun yang menuntut program berjalan lebih dulu dibiarkan, bukan ditebak.

Ini alat bantu baca, bukan pemindai keamanan. Alat ini tidak memeriksa apakah kode berbahaya dan tidak bisa membuat kode asing menjadi aman. Jika sebuah skrip berasal dari sumber yang tidak Anda percaya, jangan menjalankannya hanya karena keluarannya terlihat rapi.

Mengapa array string yang diputar tetap di tempat

Banyak obfuscator menggeser isi array string dengan perulangan singkat sebelum pembacaan pertama, sehingga list[0] bukan item pertama yang Anda lihat di sumbernya. Mengganti dengan item yang terlihat akan memasukkan teks yang salah ke kode Anda.

Karena itu alat ini hanya mengurai array bila setiap penggunaannya berupa list[3] dengan angka dalam rentang, atau list.length. Jika array diteruskan ke fungsi, ditambah dengan push, ditetapkan ulang, atau dibaca dengan indeks yang tidak bisa dihitung, array itu tetap persis seperti yang tertulis.

Unminify JavaScript online dan berkas besar

Kode yang diminifikasi tetapi tidak diobfuskasi kembali dalam format ulang dengan indentasi 2 spasi, dan label menyebutkan bahwa hanya tata letak yang berubah. Nama pendek seperti a dan b tidak diganti, karena bukan bergaya hex dan nama aslinya sudah hilang. Untuk memformat kode yang sudah terbaca, atau merapikan JSON, HTML, dan CSS juga, gunakan Formatir Kode. Untuk memperkecil lagi stylesheet ada Minifier CSS, dan untuk mendekode string Base64 yang Anda temukan di dalam skrip, ada Konverter Base64.

Semuanya berjalan di Web Worker, sehingga halaman tetap responsif untuk berkas besar. Ekspresi yang sangat panjang atau sangat dalam bersarang bisa terlalu berat bagi halaman, dan saat itu muncul pesan bahwa kode terlalu besar atau terlalu dalam bersarang untuk diproses di sini.


Pertanyaan yang sering diajukan

Bagaimana cara deobfuscate JavaScript code?

Tempel kode ke "JavaScript terobfuskasi" lalu tekan "Deobfuskasi". Kode diubah menjadi pohon sintaks, array string diurai, konstanta dihitung, escape didekode, nama _0x diganti namanya, lalu pohon dicetak ulang sebagai kode berindentasi. Salin hasilnya atau tekan "Unduh .js" untuk menyimpan hasil-deobfuskasi.js.

Apakah ada tool deobfuscate JavaScript yang berjalan online?

Ada, halaman ini salah satunya. Alat ini berjalan di tab browser Anda: kode dianalisis di Web Worker dan tidak pernah diunggah maupun dijalankan. Alat ini menangani array string sederhana, ekspresi konstan, escape hex dan Unicode, serta nama bergaya _0x. Tidak semua jenis obfuskasi bisa dibalik, dan daftar yang dibiarkan apa adanya ada di halaman ini.

Bisakah decode JavaScript obfuscated dari obfuscator.io?

Hanya bagian yang tidak perlu menjalankan kode. Escape hex dan Unicode didekode, konstanta dihitung, dan nama _0x diganti menjadi var1, func1, dan arg1. Array string yang diputar obfuscator.io saat awal dengan push(shift()), serta string yang diambil lewat fungsi dekoder, dibiarkan apa adanya, karena membaliknya berarti menjalankan kode.

Bagaimana cara decode hex JavaScript di kode yang terobfuskasi?

Biarkan "Dekode escape hex dan Unicode" tercentang di bawah "Opsi deobfuskasi". String seperti \x68\u0069 menjadi hi, dan angka hex seperti 0x1f menjadi 31. Hanya escape yang ada di dalam kode yang didekode; string hex yang dibuat program saat berjalan tidak.

Apakah alat ini juga bisa unminify JavaScript?

Bisa, keluarannya selalu dicetak ulang dengan indentasi 2 spasi, sehingga kode yang diminifikasi menjadi terbaca meski tidak ada yang perlu diurai. Dalam kasus itu hasilnya menampilkan "Tidak ada yang perlu diurai atau disederhanakan, jadi kode hanya diformat ulang." Komentar pada masukan dihapus. Nama hasil minifikasi seperti a dan b tidak bisa dipulihkan.

Apakah alat ini menjalankan JavaScript saya?

Tidak. Kode hanya dibaca dan ditulis ulang sebagai teks. Tidak ada eval, tidak ada pemanggilan Function, dan tidak ada eksekusi di halaman maupun di Web Worker, itulah sebabnya array yang diputar dan fungsi dekoder dibiarkan. Ini juga bukan pemeriksaan keamanan: keluarannya lebih mudah dibaca, tetapi pemindai atau vonis malware adalah pekerjaan lain.

Mengapa array string tetap ada di keluaran?

Array hanya diurai bila setiap penggunaannya berupa indeks konstan seperti list[3] atau list.length. Jika kode juga memutarnya, meneruskannya ke fungsi, menambahkan isi dengan push, atau membacanya dengan indeks hasil hitungan, array dibiarkan sepenuhnya, karena mengganti pembacaan di sana bisa menghasilkan string yang salah.

Apa fungsi "Ganti nama variabel hex"?

Opsi ini memberi nama yang terbaca pada nama seperti _0x1a2b: var1 untuk variabel, func1 untuk fungsi, dan arg1 untuk parameter. Setiap penggunaan diganti bersamaan, tidak ada nama yang sudah ada di program yang dipakai ulang, dan nama properti serta label tidak pernah disentuh. Nama aslinya tidak bisa dipulihkan, karena tidak ada di dalam berkas.

Seberapa besar kode yang boleh dimasukkan, dan bagaimana jika ada kesalahan?

Hingga 5.000.000 karakter. Jika kode bukan JavaScript yang valid, Anda akan melihat "Ini bukan JavaScript yang valid: kesalahan sintaks di baris N, kolom M." dengan angka yang sebenarnya, dan tidak ada yang diubah; teks Anda tetap di kolom sehingga Anda bisa memperbaiki bagian itu.

Apakah kode saya diunggah ke suatu tempat?

Tidak. Penguraian, penulisan ulang, dan pencetakan semuanya terjadi di dalam browser Anda, di Web Worker, dan tidak ada yang dikirim ke server. Kode juga tidak pernah dijalankan.