เครื่องถอดรหัส JavaScript
ให้วางโค้ด JavaScript ที่ถูกปิดบังไว้ เช่น สตริงที่เข้ารหัสแบบเฮกซาเดซิมอล ชื่อตัวแปรที่ประกอบด้วยตัวอักษรเพียงตัวเดียว หรือลูปสำหรับถอดรหัสไว้ด้านบนเครื่องมือนี้จะทำการแยกชั้นของโค้ดออกเป็นส่วนๆ ได้ ได้แก่ การถอดรหัสสตริงที่ใช้การแปลงรูปแบบเฉพาะ (unescape), การแทรกอาร์เรย์สำหรับค้นหาไว้ในโค้ดโดยตรง, การเปลี่ยนชื่อตัวแปรเป็นชื่อที่อ่านเข้าใจง่ายแทน, การทำให้โค้ดที่หุ้มข้อมูลซ้ำๆ กลายเป็นรูปแบบเรียบง่าย และการปรับปรุงรูปลักษณ์ผลลัพธ์ให้สวยงาม เหมาะอย่างยิ่งสำหรับการวิเคราะห์ส่วนโค้ดที่น่าสงสัยที่คุณดึงมาจากหน้าเว็บหรือลิงก์จาก Pastebin
วิธีถอดรหัส JavaScript
-
1
วางโค้ดต้นฉบับที่ถูกปิดบังไว้
ข้อมูลที่ถูกลดขนาด บีบอัด หรือส่งออกจากเครื่องมือในรูปแบบ `javascript-obfuscator.io`
-
2
ให้โปรแกรมวิเคราะห์ข้อความดำเนินการตามขั้นตอนที่กำหนด
อาร์เรย์สตริงจะถูกถอดรหัส ลำดับตัวเลขจะถูกประเมินค่า และกิ่งโค้ดที่ไม่จำเป็นจะถูกลบออก
-
3
เปลี่ยนชื่อ
ตัวแปรที่มีตัวอักษรเดียว เช่น `a`/`b`/`c` จะถูกเปลี่ยนชื่อเป็น `var1`, `var2` เป็นต้น, เป็นชื่อแทนที่สามารถอ่านได้ แต่ไม่จำเป็นต้องมีความหมายเฉพาะเจาะจง
-
4
ทำให้สวยงามขึ้น
ให้ทำการระบุตำแหน่งของโค้ด ใส่บรรทัดใหม่ และสร้างโค้ดที่คุณสามารถอ่านและวิเคราะห์ได้อย่างแท้จริง
เทคนิคที่เครื่องถอดรหัสย้อนกลับได้
| การปิดบังข้อมูล | การย้อนกลับข้อมูล |
|---|---|
| ตัวอักษรแบบสตริงที่ถูกหลีกเลี่ยงด้วยเฮกซาเดซิมอล | ถอดรหัส \x48\x69 กลับเป็น "Hi" |
| รหัสระบุที่ถูกเข้ารหัสตามมาตรฐาน Unicode | \u006E\u0061\u006D\u0065 -> name |
| ชุดสตริง + ฟังก์ชันดีโคเดอร์ | จัดเรียงข้อมูลในชุดสตริงให้อยู่ในแนวเดียวกัน และเรียกใช้ฟังก์ชันดีโคเดอร์ขณะประมวลผลข้อมูล |
| การพับค่าคงที่แบบตัวเลข | 0x1F3 + 5 -> 504 |
eval(...) รูปแบบการจัดเรียงข้อมูล |
ย้ายโค้ดส่วนภายในไปอยู่ที่ระดับสูงสุด |
| การปรับรูปแบบการไหลของกระบวนการ (เครื่องจักรสถานะ) | ตรวจจับจุดเปลี่ยนแปลง และสร้างลำดับการดำเนินการใหม่ |
| โค้ดที่ไม่ใช้งานได้ / โครงสร้างตรีภาคที่ไม่มีประโยชน์ | ลบกิจกรรมของสาขาที่ไม่เคยถูกเรียกใช้งานเลย |
ชื่อสไตล์ _0x1a2b3c() |
แทนที่ด้วยชื่อสไตล์ var1 และ var2 ตามลำดับ |
ข้อจำกัด: สิ่งที่เครื่องมือนี้ไม่สามารถทำได้
- ฟื้นคืนชื่อตัวแปรเดิม เมื่อ
userEmailถูกเปลี่ยนชื่อเป็นaแล้ว เครื่องมือใดๆ ก็ไม่สามารถคาดเดาชื่อดั้งเดิมได้อีก คุณจะได้โครงสร้างที่อ่านเข้าใจได้ แต่ไม่ใช่ความหมายเดิมของตัวแปร - ถอดบรรจุภัณฑ์ของเครื่องจำลองเสมือนแบบกำหนดเอง เนื่องจากเครื่องมือปิดบังข้อมูลเชิงพาณิชย์ที่มีขนาดใหญ่และซับซ้อน (เช่น JScrambler หรือเวอร์ชันระดับองค์กรของ Obfuscator.io) จะสร้างเครื่องจำลองเสมือนเฉพาะที่สามารถตีความไบต์โค้ดได้ การแก้ไขปัญหานี้จำเป็นต้องอาศัยการวิเคราะห์ย้อนกลับด้วยตนเอง
- รันโค้ดใดๆ ก็ได้ เครื่องถอดรหัสจะประเมินสูตรที่ไม่มีการแทรกโค้ดลับอย่างเป็นระบบ โดยไม่ดาวน์โหลดทรัพยากรจากระยะไกล สร้างองค์ประกอบ DOM หรือสื่อสารกับเครือข่าย
กรณีการใช้งานทั่วไป
- การวิจัยด้านความปลอดภัย: การตรวจสอบสคริปต์ที่น่าสงสัยซึ่งส่งมาผ่านอีเมล หรือถูกเผยแพร่โดย CDN ที่ถูกโจมตี
- โบราณคดีของโค้ด: การกู้คืนโค้ดเก่าที่เหลืออยู่ โดยสิ่งที่เหลืออย่างเดียวคือไฟล์โค้ดที่ถูกลดขนาดลง
- การเรียนรู้: เข้าใจอย่างแท้จริงว่ากลไกการปิดบังข้อมูลในระดับบทเรียนสอนนั้นทำงานอย่างไรภายในระบบ
ความปลอดภัยและจริยธรรม
ห้ามดำเนินการใช้ JavaScript ที่ไม่ได้รับการเชื่อถือในแท็บเบราว์เซอร์ที่เข้าสู่ระบบของแอปพลิเคชันสำคัญใดๆ เนื่องจากโค้ดดังกล่าวสามารถอ่านคุกกี้ เรียกใช้ API ภายใน และดึงข้อมูลสถานะของระบบออกมาได้ เครื่องมือแยกรหัส (deobfuscator) จะทำงานบนต้นฉบับในรูปแบบข้อความ โดยไม่ได้รันโค้ดที่คุณพิมพ์เข้าไป
ให้ดำเนินการถอดรหัสเฉพาะสำหรับโค้ดที่คุณได้รับอนุญาตให้วิเคราะห์เท่านั้น การวิเคราะห์ซอฟต์แวร์ที่มีใบอนุญาตในลักษณะการวิศวกรรมย้อนกลับอาจถูกจำกัดตามเขตอำนาจของคุณ
คำถามที่พบบ่อย
ไม่ เมื่อโปรแกรมปิดบังชื่อเปลี่ยน userEmail เป็น _0x1a2b3c ชื่อเดิมจะสูญหายไป โปรแกรมถอดรหัสจะให้ชื่อทดแทนที่อ่านได้ (เช่น var1, var2) และโครงสร้างที่ถูกต้อง แต่จะไม่แสดงชื่อตามความหมายเดิม
ไม่ ระบบจะวิเคราะห์โค้ดในรูปแบบของ AST และดำเนินการแปลงข้อมูลแบบสถิติ โดยสูตรที่เป็นลักษณะเฉพาะ (เช่น 0x1F3 + 5) จะถูกรวมเข้าด้วยกัน แต่ไม่มีการเปลี่ยนแปลงใดๆ ต่อโครงสร้างเครือข่าย คุกกี้ หรือ DOM
ใช่ แต่ผลลัพธ์จากโปรแกรม bundler จะถูกลดขนาดลง ไม่ใช่ถูกปิดบังข้อมูลอย่างตั้งใจ ดังนั้นสิ่งที่ได้จึงเป็นโค้ดที่มีรูปลักษณ์ดีขึ้น โดยมีการฟื้นฟูโครงสร้างของโมดูลกลับมาอย่างครบถ้วน ส่วนแผนที่แหล่งที่มา หากมีให้ใช้งานแยกต่างหาก ก็จะช่วยให้คุณกำหนดชื่อไฟล์ได้อย่างเหมาะสมและชัดเจนยิ่งขึ้น
เครื่องมือทางธุรกิจระดับสูง เช่น Enterprise JScrambler หรือเครื่องจำลองเสมือนที่ออกแบบเฉพาะ ล้วนมาพร้อมตัวแปลงบิตโค้ดซึ่งการวิเคราะห์แบบสถิตไม่สามารถถอดรหัสได้ เครื่องมือเหล่านี้สามารถเข้าถึงชั้นข้อมูลภายนอกได้ แต่ตรรกะหลักยังคงไม่โปร่งใส หากไม่มีการถอดรหัสด้วยตนเอง
เครื่องมือที่เกี่ยวข้อง
ตารางอ้างอิง ASCII
ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL
อ้างอิงตัวอักษร HTML
รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ
ตารางอ้างอิงแป้นพิมพ์ลัด
ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux
ตัวตรวจสอบอีเมล
ตรวจสอบที่อยู่อีเมล: ตรวจไวยากรณ์ RFC 5322 ค้นหา MX เรกคอร์ดแบบเรียลไทม์ พร้อมรายละเอียดส่วนท้องถิ่น โดเมน และความยาว ไม่มีการส่งอีเมลใด ๆ
เครื่องมือสร้าง EditorConfig
สร้างไฟล์ .editorconfig ด้วยกฎสไตล์และขนาดการเยื้อง การจบบรรทัด ชุดอักขระ และช่องว่างของคุณ เพื่อให้การจัดรูปแบบสอดคล้องกันในทุก IDE และโปรแกรมแก้ไข
เครื่องสร้างตัวอักษรสุ่ม
สร้างตัวอักษร A-Z แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน
เครื่องมือนี้มีให้บริการในภาษาอื่น
- JavaScript-deobfuscator [SV]
- أداة إزالة التشفير في لغة جافا سكريبت (JavaScript Deobfuscator) [AR]
- JavaScript-Deobfuscator [DE]
- Desofuscador de JavaScript [ES]
- Déobfuscateur JavaScript [FR]
- Deobfuscator JavaScript [ID]
- 자바스크립트 디오프스버커 [KO]
- JavaScript-deobfuscator [NL]
- Deobfuskator JavaScriptu [PL]
- Trình giải mã mã JavaScript (JavaScript Deobfuscator) [VI]
- JavaScriptデオブファスカータ [JA]
- Desofuscador de JavaScript [PT]
- JavaScript Deobfuscator [EN]
- Deobfuscator JavaScript [IT]
- JavaScript-деобфускатор [RU]
- JavaScript Deobfuscator [TR]
- JavaScript反混淆工具 [ZH]