ImHex โปรแกรมแก้ไขเฮกซ์สำหรับวิศวกรย้อนรอย
(github.com/WerWolv)- ImHex คือโปรแกรมแก้ไขเฮกซ์สำหรับวิศวกรย้อนรอย โปรแกรมเมอร์ และคนที่ทำงานดึก โดยรวมความสามารถในการวิเคราะห์ แก้ไข และแสดงผลเนื้อหาไฟล์ไว้ในเครื่องมือเดียว
- ความสามารถหลักคือ ภาษาแพตเทิร์นที่คล้าย C สำหรับนิยามโครงสร้างและชนิดข้อมูล เพื่อนำมาแยกวิเคราะห์และไฮไลต์เนื้อหาไฟล์ พร้อมรองรับการโหลดอัตโนมัติตาม MIME type และค่า magic
- สามารถเปิด แหล่งข้อมูลหลายรูปแบบ ได้ เช่น ไฟล์ภายในเครื่อง, raw disk, GDB Server, แพ็กเก็ต UDP, หน่วยความจำของโปรเซส, ไฟล์ระยะไกลผ่าน SSH/SFTP และยังมี disassembler ที่ใช้ Capstone รวมถึงการสแกน YARA rule มาให้ด้วย
- เงื่อนไขการใช้งานคือโดยพื้นฐานต้องมี GPU ที่รองรับ OpenGL 3.0 ขึ้นไป ส่วนรีลีส
-NoGPUที่เรนเดอร์ด้วยซอฟต์แวร์สามารถใช้งานได้โดยไม่ต้องมี GPU แต่ก็อาจช้ากว่าเวอร์ชันที่ใช้ GPU acceleration มาก - ปลั๊กอินพัฒนาผ่าน
libimhex, ImHex API และ Content Registry โดยซอฟต์แวร์ส่วนใหญ่ใช้สัญญาอนุญาต GPLv2-only แต่/lib/libimhexและ/plugins/uiใช้ LGPLv2.1 ซึ่งเปิดให้พัฒนาปลั๊กอินแบบ proprietary ได้
บทบาทพื้นฐานที่ ImHex มอบให้
- ImHex คือโปรแกรมแก้ไขเฮกซ์สำหรับวิศวกรย้อนรอย โปรแกรมเมอร์ และคนที่ต้องการเครื่องมือที่ล้าตาน้อยลงแม้จะทำงานตอนตี 3
- มีทั้งรีลีสล่าสุด, nightly pre-release, เวอร์ชันเว็บ และเอกสารแยกให้ใช้งาน
มุมมองเฮกซ์และการแก้ไขข้อมูล
- มุมมองเฮกซ์ รองรับ byte patching, patch management และ undo/redo แบบไม่จำกัด
- การคัดลอกไบต์ทำได้หลายรูปแบบ
- bytes
- hex string
- อาร์เรย์สำหรับ C, C++, C#, Rust, Python, Java, JavaScript
- ASCII-Art hex view
- HTML self-contained div
- ความสามารถด้านการค้นหาและการไปยังตำแหน่งประกอบด้วย string/hex search แบบพื้นฐาน และ goto โดยอิงจากจุดเริ่มต้น จุดสิ้นสุด หรือเคอร์เซอร์ปัจจุบัน
- การไฮไลต์รองรับการตั้งกฎสี foreground และการไฮไลต์พื้นหลังตามแพตเทิร์น ผลการค้นหา และบุ๊กมาร์ก
- การแสดงข้อมูลรองรับหลายชนิด
- จำนวนเต็ม hexadecimal 8/16/32/64 บิต
- จำนวนเต็ม signed/unsigned แบบฐานสิบ 8/16/32/64 บิต
- float 16/32/64 บิต
- สี RGBA8, HexII, binary
- การเข้ารหัสรองรับ ASCII และการเข้ารหัสแบบกำหนดเอง โดยมี UTF-8, UTF-16, ShiftJIS และ encoding ของ Windows ส่วนใหญ่ในตัว
- มี paged data view
ภาษาแพตเทิร์นและการตีความโครงสร้างข้อมูล
- Pattern Language คือภาษาโปรแกรมที่ปรับแต่งได้เต็มรูปแบบซึ่งพัฒนาขึ้นสำหรับ ImHex
- ใช้ไวยากรณ์คล้าย C เพื่อกำหนดโครงสร้างและชนิดข้อมูล และนำไปใช้แยกวิเคราะห์พร้อมไฮไลต์เนื้อหาไฟล์ได้
- ภาษาแพตเทิร์นรองรับการโหลดอัตโนมัติตาม MIME type และค่า magic
- องค์ประกอบที่รองรับมีทั้ง arrays, pointers, structs, unions, enums, bitfields, namespaces, little/big endian, conditionals เป็นต้น
- มีข้อความแสดงข้อผิดพลาด, syntax highlighting และ error marking
- การแสดงภาพข้อมูลรองรับ images, audio, 3D models, coordinates, time stamps เป็นต้น
- เอกสารที่เกี่ยวข้อง:
- Pattern Language Source Code
- Pattern Language Documentation
- ImHex-Patterns: คลังเก็บ format patterns, libraries, magic, constant files
การตรวจสอบข้อมูล การประมวลผลล่วงหน้า และการค้นหา
- Data Inspector ใช้ตีความข้อมูลได้หลายชนิด รวมถึง endianness, decimal, hexadecimal, octal และ bit inversion
- unsigned/signed integer: 8/16/24/32/48/64 บิต
- float: 16/32/64 บิต
- signed/unsigned LEB128
- ตัวอักษรและสตริงแบบ ASCII, Wide, UTF-8
time32_t,time64_t, DOS date/time- GUID, สี RGBA8, RGB65
- สามารถคัดลอกและแก้ไขไบต์ผ่าน inspector ได้ และยังเพิ่มชนิดข้อมูลใหม่ด้วยภาษาแพตเทิร์นได้
- node-based data pre-processor สามารถแก้ไข ถอดรหัส หรือถอดรหัสข้อมูลก่อนที่จะแสดงในโปรแกรมแก้ไขเฮกซ์
- แก้ไขข้อมูลได้โดยไม่แตะต้องแหล่งข้อมูลต้นทาง
- รองรับการเพิ่ม custom node
- การค้นหาข้อมูลทำได้ทั้งในไฟล์ทั้งหมดหรือเฉพาะบริเวณที่เลือก
- การดึงสตริงมีตัวเลือกความยาวขั้นต่ำ ชุดอักขระ และ encoding
- sequence search ใช้ค้นหาลำดับไบต์หรือลำดับอักขระ และมีตัวเลือกไม่สนใจตัวพิมพ์เล็กพิมพ์ใหญ่
- รองรับ regex search, binary pattern wildcard search และ numeric value/range search
- numeric search มีตัวเลือกสำหรับขนาด endianness และการไม่สนใจค่า unaligned
แหล่งข้อมูลและความสามารถด้านการวิเคราะห์
- ImHex สามารถโหลดข้อมูลจาก หลายแหล่งข้อมูล
- ไฟล์ภายในเครื่อง: รองรับการโหลดไฟล์ขนาดใหญ่ได้รวดเร็วและมีประสิทธิภาพ
- raw disks: โหลด raw disk และพาร์ทิชัน
- GDB Server: เข้าถึง RAM ของโปรเซสที่กำลังทำงานหรือ embedded device
- Intel Hex, Motorola SREC
- ข้อมูลที่เข้ารหัสแบบ Base64
- แพ็กเก็ต UDP
- process memory: ตรวจสอบ address space ทั้งหมดของโปรเซสที่กำลังทำงาน
- ไฟล์ระยะไกลผ่าน SSH/SFTP
- การวิเคราะห์และแสดงภาพข้อมูล มีทั้ง file parser ตาม file magic และฐานข้อมูล MIME type
- กราฟและสถิติมีทั้งการกระจายประเภทไบต์, กราฟ entropy, entropy สูงสุด/เฉลี่ย, digram และ layered distribution graph
- มีความสามารถในการตรวจจับไฟล์ที่ถูกเข้ารหัสหรือบีบอัด
- diffing ใช้เปรียบเทียบแหล่งข้อมูลต่างกัน พร้อมไฮไลต์ความต่างและมุมมองแบบตาราง
Disassembly, YARA และแฮช
- disassembler ในตัวรองรับทุกสถาปัตยกรรมที่ Capstone รองรับ
- ARM32, ARM64, MIPS, x86 16/32/64-bit, PowerPC, SPARC, IBM SystemZ, xCORE, M68K, TMS320C64X, M680X, Ethereum, RISC-V, WebAssembly, MOS65XX, Berkeley Packet Filter
- รองรับการเขียน custom disassembler สำหรับสถาปัตยกรรมของตัวเองด้วย
- การรองรับ YARA Rule สามารถสแกนไฟล์ด้วย official yara rules, ไฮไลต์ match ในโปรแกรมแก้ไขเฮกซ์, กระโดดไปยัง match และใช้หลาย rule พร้อมกันได้
- การทำแฮชสามารถทำกับช่วงข้อมูลที่กำหนดหรือสตริงตามต้องการ
- แฮชที่รองรับ ได้แก่ CRC8/16/32, MD5, SHA-1/SHA-224/SHA-256/SHA-384/SHA-512, Adler32, Murmur, SipHash, XXHash, Tiger, Blake2B, Blake2S เป็นต้น
UI, ธีม, การนำเข้าและส่งออก
- ธีม มี dark mode เป็นค่าเริ่มต้น และสามารถใช้ light mode ได้เช่นกัน
- สามารถปรับแต่งสีและสไตล์ขององค์ประกอบ UI ทั้งหมดผ่าน theme file ที่แชร์ได้ และรองรับ custom font
- modern interface รองรับ multiple workspaces, custom layouts และ detachable windows
- การนำเข้า/ส่งออกรองรับ Base64 files, IPS/IPS32 patches, Markdown reports และ binary arrays สำหรับหลายภาษาโปรแกรม
- bookmarks รองรับชื่อ/สีแบบกำหนดเอง, การไฮไลต์ region ในโปรแกรมแก้ไขเฮกซ์, การกระโดด, การเปิดเนื้อหาบุ๊กมาร์กในแท็บใหม่ และการเพิ่มคอมเมนต์
- content updater ในตัวสามารถดาวน์โหลดไฟล์จากฐานข้อมูลได้ภายใน ImHex
- pattern files
- pattern language libraries
- magic files
- custom data processor nodes
- custom encodings
- custom themes
- Yara rules
เครื่องมือและการเริ่มต้นใช้งาน
- Helpful tools มี demangler ของ Itanium, MSVC, Rust, D-Lang ที่ใช้ LLVM เป็นพื้นฐาน
- เครื่องมืออื่น ๆ ได้แก่ ASCII table, regex replacer, mathematical expression evaluator, graphing calculator, hexadecimal color picker, base converter, byte swapper, UNIX permissions calculator, ตัวค้นหาคำจำกัดความของคำศัพท์จาก Wikipedia เป็นต้น
- file utilities มี file splitter, file combiner และ file shredder
- ยังมี TCP Client/Server, HTTP Requests, IEEE754 Float visualizer, Euclidean algorithm calculator เป็นต้น
- ความสามารถที่ช่วยเริ่มต้นใช้งานมีทั้งการรองรับหลายภาษา, simplified mode สำหรับผู้เริ่มต้น, เอกสารที่ละเอียด, example files ในฐานข้อมูล, achievements และ interactive tutorials
ความต้องการของระบบและเงื่อนไขการคอมไพล์
- โดยทั่วไป GPU ต้องรองรับ OpenGL 3.0 ขึ้นไป
- รีลีสที่มี suffix
-NoGPUใช้วิธี software rendered จึงรันได้โดยไม่ต้องมี GPU แต่ก็อาจช้ากว่าเวอร์ชันที่ใช้ GPU accelerated มาก - หากเป็นไปได้ แนะนำให้ใช้ dedicated GPU แทน integrated GPU
- มีรายงานว่าไดรเวอร์ Intel HD GPU บางตัวบน Windows ทำให้เกิด graphical artifacts
- รีลีสที่มี suffix
- การรองรับระบบปฏิบัติการ:
- Windows 7 ขึ้นไป โดยแนะนำ Windows 10/11
- macOS 15 Sequoia ขึ้นไป
- เวอร์ชันที่ต่ำกว่านี้อาจทำงานได้หากคอมไพล์เอง แต่เนื่องจากบน GitHub ไม่มี CI runner สำหรับ macOS ต่ำกว่า 15 จึงไม่มีรีลีสไบนารีที่ใช้งานได้
- macOS build ไม่ได้ signed จึงต้องอนุญาตด้วยตนเองใน Security & Privacy settings
- Linux มี official release สำหรับ Ubuntu/Debian, Fedora, RHEL/AlmaLinux, Arch Linux และรองรับดิสโทรอื่นผ่าน AppImage, Flatpak, Snap
- ทดสอบแล้วบน FreeBSD 14.3
- CPU รองรับอย่างเป็นทางการคือ x86, AMD64, ARM64 และควรใช้งานได้กับ CPU แบบ Little Endian
- ต้องใช้ RAM ราว 50MiB และงานวิเคราะห์ที่ซับซ้อนกว่านั้นอาจต้องใช้หน่วยความจำเพิ่ม
- ต้องใช้พื้นที่เก็บข้อมูลราว 100MiB
- การคอมไพล์ต้องใช้ GCC หรือ Clang ที่รองรับ C++23 ขึ้นไป
- รีลีสบน Windows และ Linux สร้างด้วย GCC เวอร์ชันล่าสุดที่มีให้ใช้งาน
- รีลีสบน macOS สร้างด้วย LLVM Clang เวอร์ชันล่าสุดที่มีให้ใช้งาน
- ไม่รองรับ MSVC และ AppleClang
- เอกสารการติดตั้งและการคอมไพล์:
การพัฒนาปลั๊กอินและสัญญาอนุญาต
- การพัฒนาปลั๊กอินเริ่มต้นได้จาก template project โดยเข้าถึง
libimhex, ImHex API และ Content Registry เพื่อโต้ตอบกับ ImHex หรือเพิ่ม content ใหม่ - หากต้องการ build ปลั๊กอินจะต้องมี SDK
- ขั้นตอนการ build SDK ในเครื่อง:
cmake -G Ninja -DIMHEX_BUNDLE_PLUGIN_SDK=ON -B buildcd buildDESTDIR=install ninja install- พาธ SDK จะเป็น
install/usr/local/share/imhex/sdkและต้องตั้งค่าIMHEX_SDK_PATHเป็น absolute path ดังกล่าว
- ใน GitHub Actions CI สามารถดาวน์โหลด SDK อัตโนมัติได้ด้วย action imhex-download-sdk
- มี ImHex Plugin Template ให้ใช้เป็นจุดเริ่มต้นของปลั๊กอิน
- สัญญาอนุญาตส่วนใหญ่เป็น GPLv2-only
/lib/libimhexเป็น LGPLv2.1/plugins/uiเป็น LGPLv2.1- ข้อยกเว้นนี้มีไว้เพื่ออนุญาตให้พัฒนาปลั๊กอินแบบ proprietary
- code signing policy ระบุว่าจะไม่ส่งข้อมูลไปยังระบบเครือข่ายอื่น เว้นแต่ผู้ใช้จะร้องขออย่างชัดเจน หรือเป็นคำขอจากผู้ติดตั้ง/ผู้ดูแลระบบ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ImHex เป็นโปรแกรมแก้ไขเฮกซ์ที่ดีที่สุดเท่าที่เคยใช้มา
มีเหตุผลอยู่หลายข้อ บางตัวแก้ไขอื่นก็มีบางอย่างเหมือนกัน แต่หาได้ยากที่มีครบในตัวเดียว มันไฮไลต์ส่วนต่าง ๆ ของรูปแบบไฟล์ที่รู้จักโดยอัตโนมัติด้วย file template, แปลความหมายไบต์ที่เลือกเป็นชนิดข้อมูลทั่วไปส่วนใหญ่พร้อมกันให้ดู และเร็วกว่าตัวแก้ไขอื่นมากเมื่อจัดการไฟล์ขนาดใหญ่
ข้อเสียคือ imgui UI มีบั๊กบ้างเป็นครั้งคราว แต่สุดท้ายก็มาแทน viewer อื่น ๆ อย่าง HexFiend หรือ hexa สำหรับผม
สงสัยว่าตัวแก้ไขนี้แสดงไบต์ ASCII เป็น glyph ของ CP437 ได้ไหม
โตมากับการอ่านไฟล์ไบนารีบน DOS แบบนั้น เลยอ่าน glyph ได้เร็วกว่าค่าเลขฐานสิบหกของมันมาก ในทางกลับกัน ถ้าแสดงอักขระที่พิมพ์ไม่ได้เป็นจุด ก็ไม่ได้บอกอะไรเท่าไร
ไม่เห็น CP437 ในรายการ แต่รูปแบบไฟล์ encoding ดูเรียบง่าย น่าจะทำ mapping เองได้ไม่ยาก
https://github.com/WerWolv/ImHex-Patterns/tree/master/encodi...
อีกอย่างคือมีอักขระที่กำกวมว่าเป็น sharp S ของเยอรมันหรือเบตา
เคยลอง ImHex แล้ว แต่สำหรับงานส่วนใหญ่ที่ผมจะทำ มันซับซ้อนเกินไป
บน macOS ยังชอบ Hex Fiend อยู่ มันเรียบง่าย เร็ว และทำสิ่งที่ต้องการได้ ส่วนบน Windows ยังหาตัวแก้ไขเฮกซ์แบบ “เรียบง่าย” ที่สมบูรณ์แบบไม่ได้
บน macOS ผมใช้ Hex Fiend แต่ไม่เข้าใจว่าทำไมเมื่อขยายหน้าต่างให้กว้างขึ้น มันต้องจัดบรรทัดใหม่ด้วย ผมอยาก maximize เพื่อลดสิ่งรบกวนทางสายตา แต่ยังคงความยาวบรรทัดไว้ที่ 16 หรือ 32 ไบต์ ไม่อยากได้ขนาดแปลก ๆ ที่ทำให้การจัดแนวพัง
เคยลอง ImHex สั้น ๆ และเคารพโปรเจกต์นี้มาก แต่สำหรับงานของผม มันเหมือนใช้ปืนใหญ่ยิงแมลงวัน
ตอนนี้คงจะใช้ 010 Editor ต่อไปก่อน[1] เป็นโปรแกรมแก้ไขเฮกซ์ที่ยอดเยี่ยมที่สุดเท่าที่เคยใช้มาในชีวิต
ผมไม่ชอบ Dear ImGui ซึ่งเป็น GUI framework ที่โปรเจกต์ใหม่นี้ใช้เลย มันเหมาะกับระบบ embedded ที่มีจอเล็กและไม่มี window manager มากกว่า ไม่ใช่สำหรับสภาพแวดล้อมเดสก์ท็อปเต็มรูปแบบ เพราะองค์ประกอบเล็ก ๆ และการไม่ผสานกับ UI ทำให้ค่อนข้างขัด ๆ
[1] https://www.sweetscape.com/010editor/
มีข้อความว่า “ImHex requires a GPU with OpenGL 3.0 support in general” ทำไมโปรแกรมแก้ไขเฮกซ์ต้องใช้ OpenGL? เลยต้องมี GPU ด้วยเหรอ?
สงสัยว่ามีเหตุผลดี ๆ ที่ต้องใช้ OpenGL หรือแค่ทำให้ดูเท่
โดยเฉพาะวิธีแบบยุคก่อนที่วาดการจัดรูปแบบซับซ้อนระดับพิกเซลจะช้าอย่างเห็นได้ชัด ดูบทความนี้เป็นตัวอย่างได้
[1] https://www.sublimetext.com/blog/articles/hardware-accelerat...
แต่ข้อกำหนด OpenGL ไม่ได้แปลว่าต้องมี GPU เสมอไป มี implementation แบบ software ของ OpenGL ด้วย แต่โดยรวมประสิทธิภาพไม่ค่อยดี อีกอย่างแพลตฟอร์มยุคนี้จำนวนมากถือว่ามี GPU ในรูปแบบใดรูปแบบหนึ่งอยู่แล้ว กรณีที่ต้องใช้เครื่องมือ GUI โดยไม่มี GPU เป็นกรณีเฉพาะมาก และในสภาพแวดล้อมเฉพาะแบบนั้น โอกาสที่จะรันโปรแกรมแก้ไขเฮกซ์และเครื่องมือแบบ local ก็ต่ำด้วย
เป็นโปรเจกต์ที่ยอดเยี่ยมจริง ๆ ผมสนุกกับการแก้ ROM ของนาฬิกาอัจฉริยะ Philips อยู่พอสมควร
มันมี DSL ในตัวที่ดูคล้าย Rust และไม่มีการจัดการหน่วยความจำ จึงเบามาก แต่ใช้มันเพื่อ visualize และ extract ข้อมูลที่มีโครงสร้างจาก binary stream ได้ สนุกและเจ๋งจริง ๆ
มี visual editor สำหรับสร้างการคำนวณง่าย ๆ โดยไม่ต้องเขียนโค้ดด้วย แต่ตอนที่ลองใช้ยังรู้สึกไม่ค่อยขัดเกลา แปลกที่การเขียนโค้ดด้วย DSL กลับ intuitive และง่ายกว่า
บทความที่เกี่ยวข้อง:
ImHex – A Hex Editor - https://news.ycombinator.com/item?id=32287902 - กรกฎาคม 2022, 70 ความคิดเห็น
ImHex – A Hex Editor - https://news.ycombinator.com/item?id=25353965 - ธันวาคม 2020, 78 ความคิดเห็น
ดูน่าสนใจดี การพัฒนา โปรแกรมแก้ไขเฮกซ์ เป็นโปรเจกต์น่าจะเป็นไอเดียที่ดีไหม?
เวอร์ชันง่าย ๆ ดูเหมือนไม่ยากนัก แต่ถ้าจะ parse รูปแบบไฟล์สารพัด ตั้งแต่ executable image ไปจนถึง Doom WAD และรูปแบบไฟล์ proprietary ก็น่าจะมีพื้นที่ให้ฝึกเยอะ และดูมีช่องให้สร้างเครื่องมือช่วย reverse engineering ได้มาก
บอกว่าสามารถฝึกหลายเรื่องพร้อมกันได้ เช่น file handling, GUI, text layout, memory management
ดูดีเลย ปกติยังใช้ 010 Editor ต่อเพราะ wildcard search แต่ ImHex ก็ทำฟีเจอร์นั้นและมากกว่านั้นได้ เลยเริ่มเอนเอียง จะลองทดสอบเพิ่มอีกหน่อย
ชอบวัฒนธรรมคอมพิวเตอร์สายนี้มาก reverse engineering, การเขียน kernel module, การทำความเข้าใจว่าสิ่งต่าง ๆ ทำงานอย่างไร และทำให้มันทำสิ่งที่ไม่ได้ถูกออกแบบมาแต่แรก เป็นเรื่องมีเสน่ห์
แต่เส้นทางที่ทำได้อย่างถูกกฎหมายมีไม่มาก และต้องใช้เวลาอย่างมหาศาลรวมถึงความช่วยเหลือจากเพื่อนร่วมทาง
ส่วนงานอดิเรก ในประเทศที่ผมอยู่ reverse engineering เพื่อทำให้สิ่งที่ตนเป็นเจ้าของทำงานบนระบบของตัวเองนั้นถูกกฎหมายอย่างชัดเจน เช่น การแก้เกม Windows XP ให้รันบน Windows 10 ข้อยกเว้นนี้ค่อนข้างกว้าง ทำให้ reverse engineering ได้ในกรณีส่วนใหญ่ที่ “น่าจะถูกกฎหมาย”
แค่เผยแพร่ด้วย นามแฝง ที่ไม่เชื่อมโยงกับชื่อจริง และใช้ชุมชนเฉพาะทางที่ไม่สนใจคำขอลบตาม DMCA ถ้าไม่ได้คิดจะหาเงินจากสิ่งนี้ กรณีเลวร้ายที่สุดก็คือเป้าหมายรู้ตัวว่าเห็นงานของคุณ แล้วใส่ vmprotect ใน release ถัดไป
พอรู้ว่าเป็น record ความยาวคงที่ ก็เห็นว่า 2 ไบต์ถัดจากชื่อดูเหมือนค่าฐานสิบหกของหมายเลข record ที่แสดงในแอป พอคลิก checkbox ไบต์หนึ่งเปลี่ยนจาก 0x00 เป็น 0x01 และหลังจากทดลองพอสมควร ก็ map โครงสร้างทั้งหมดเป็น struct ในโค้ด แล้วสร้างรายงานที่แอปเดิมไม่รองรับได้
ไม่มีอะไรผิดกฎหมายตรงนั้น ผู้ขายคงอยากให้เราจ่ายค่าทำรายงาน แต่ไม่ได้มีข้อห้ามทางกฎหมาย
การสร้างหรือเรียนรู้อะไรสักอย่างไม่ได้แปลว่าต้องประกาศออกอากาศให้คนรู้เสมอไป การเรียนรู้นั้นเป็นรางวัลในตัวเองได้