DevToolPal
ไทย

JavaScript Obfuscator

ทำให้ JavaScript อ่านยากด้วยการเปลี่ยนชื่อตัวแปร ซ่อนสตริง และทำให้ลอจิกแบนราบ โดยยังทำงานเหมือนเดิม

ทำงานในเครื่อง ไม่มีการอัปโหลด

ตัวเลือก

ความเข้มข้น

ความเข้มข้นสูงซ่อนได้มากกว่า แต่ทำให้โค้ดใหญ่ขึ้นและช้าลง

อินพุต

0 ตัวอักษร · 0 B

เอาต์พุต

0 ตัวอักษร · 0 B

ทำอะไรได้

JavaScript obfuscator เขียนสคริปต์ใหม่ให้ยังทำงานเหมือนเดิมทุกประการ แต่คนอ่านและคัดลอกได้ยากขึ้นมาก ชื่อตัวแปรและฟังก์ชันจะกลายเป็น identifier ไร้ความหมายอย่าง _0x3f2a string literal ถูกย้ายไปอยู่ในตารางค้นหาที่เข้ารหัส และในระดับที่สูงขึ้น control flow จะถูกสลับและมีการผสม dead code เข้าไป

มีประโยชน์สำหรับเกมบนเบราว์เซอร์ เดโม วิดเจ็ต และการตรวจสอบไลเซนส์ที่คุณส่งเป็น JavaScript ธรรมดาและไม่อยากให้ถูกคัดลอกไปทั้งดุ้น

วิธีใช้งาน

  1. วาง JavaScript ของคุณหรือเปิดไฟล์ .js
  2. เลือก ความเข้มข้น:
    • ต่ำ เปลี่ยนชื่อภายในและย้ายสตริงไปไว้ในอาร์เรย์ค้นหา เอาต์พุตยังเร็วและค่อนข้างเล็ก
    • กลาง เพิ่มการเข้ารหัสสตริง control-flow flattening และ dead code บางส่วน
    • สูง ใช้ทุกอย่างเต็มกำลัง ผลลัพธ์อาจใหญ่ขึ้นหลายเท่าและช้าลงอย่างเห็นได้ชัด
  3. เปิด เปลี่ยนชื่อ global เฉพาะเมื่อไม่มีอะไรภายนอกสคริปต์อ้างถึงฟังก์ชันหรือตัวแปรระดับบนสุดของมัน
  4. ปิด เอาต์พุตบรรทัดเดียว หากต้องการให้ผลลัพธ์กระจายหลายบรรทัด
  5. คัดลอกหรือดาวน์โหลดโค้ดที่ obfuscate แล้ว และทดสอบก่อน deploy

ตัวอย่าง

ตัวอย่างนิยามฟังก์ชัน greet และตัวนับการเข้าชม หลัง obfuscate ที่ความเข้มข้นต่ำ โค้ดจะเป็นบรรทัดเดียวที่เต็มไปด้วยชื่อเลขฐานสิบหก แต่เมื่อรันก็ยังพิมพ์ Hello, Ada! You have visited 1 time(s).

Obfuscation กับ minification

Minification อย่างที่ตัวย่อ JavaScript และ CSS ทำ จะลบช่องว่างและย่อชื่อเพื่อให้ไฟล์เล็กลงและดาวน์โหลดเร็วขึ้น ส่วน obfuscation ไปทางตรงข้ามในเรื่องขนาด: จงใจเพิ่มความซับซ้อนเพื่อให้โค้ดเข้าใจยากขึ้น หลายโปรเจกต์ minify ทุกไฟล์ และ obfuscate เฉพาะไม่กี่ไฟล์ที่มีลอจิกที่ควรปกป้อง

ข้อจำกัด

การ obfuscate ปกป้องความลับไม่ได้ ทุกอย่างที่เบราว์เซอร์รันได้ ผู้ใช้ก็ตรวจดูได้ในที่สุด จึงควรเก็บ API key และกฎทางธุรกิจที่ต้องเป็นความลับไว้บนเซิร์ฟเวอร์ การตั้งค่าที่หนักยังทำให้โค้ดช้าลง จึงควรหลีกเลี่ยงใน loop ที่ทำงานบ่อยและหน้าที่ต้องการประสิทธิภาพสูง

คำถามที่พบบ่อย

› การ obfuscate เปลี่ยนการทำงานของโค้ดหรือไม่?

ไม่ สคริปต์ที่ obfuscate แล้วทำงานเหมือนต้นฉบับ เปลี่ยนแค่รูปแบบเท่านั้น ควรรันเทสต์กับ build ที่ obfuscate แล้วเสมอ เพราะโค้ดที่ตรวจซอร์สหรือชื่อฟังก์ชันของตัวเองอาจทำงานต่างไป

› โค้ดที่ obfuscate แล้วย้อนกลับได้หรือไม่?

ไม่ได้ทั้งหมด แต่คนที่ตั้งใจและมีเวลาก็ยังหาได้ว่ามันทำอะไร ให้ถือว่าการ obfuscate เป็นแค่เนินชะลอความเร็วสำหรับการคัดลอกแบบผ่าน ๆ ไม่ใช่ที่ซ่อนความลับอย่าง API key

› ควรเปิด เปลี่ยนชื่อ global เมื่อไร?

เฉพาะเมื่อสคริปต์สมบูรณ์ในตัวเอง การเปลี่ยนชื่อ global จะทำให้ attribute ของ HTML สคริปต์อื่น หรือเทสต์ที่เรียกฟังก์ชันระดับบนสุดของคุณตามชื่อพัง

› โค้ดของฉันถูกอัปโหลดหรือไม่?

ไม่ การ obfuscate ทำงานในเบราว์เซอร์ของคุณด้วยไลบรารีโอเพนซอร์ส javascript-obfuscator