braille dump is a drop in replacement for hexdump -C
that
uses unicode braille characters to display hex codes 0x81..0xff thereby
improving the readibility of binary.
bd.com
44kb - PE+ELF+MachO+ZIP+SH (VirusTotal)
6334a8a8ad322b269c8e72ec5fb9b74be34d2909c079c675ad534fe386f25108
bd.com.dbg
634kb - ELF debugger data (optional)
2aeb976561255eb20ffdb442622e5dd3892304448c4f8bb9be6364f575287f02
bd.c
source code
Braille Dump will work on Linux 2.6.16+, Windows Vista+, MacOS XNU 15.6+, FreeBSD 12+, OpenBSD 6.4+, or NetBSD 9.1+.
$ curl https://justine.lol/braille/bd.com >bd.com $ chmod +x bd.com $ echo 'hello→world→' | ./bd.com 00000000 68 65 6c 6c 6f e2 86 92 77 6f 72 6c 64 e2 86 92 │hello⢚⢠⢁world⢚⢠⢁│ 00000010 0a │◙│ 00000011
For anything else, the source code is written in ANSI C so you can simply compile it yourself!
Here's a concrete example of why braille dump is better at presenting binary data than the old hexdump command. Let's say we wanted to view the binary header to the bd.com program itself. hexdump will show us:
$ hexdump -C bd.com | head -n10 00000000 4d 5a 71 46 70 44 3d 27 0a 00 00 10 00 f8 00 00 |MZqFpD='........| 00000010 00 00 00 00 00 01 00 08 40 00 00 00 00 00 00 00 |........@.......| 00000020 00 00 00 00 4a 54 00 00 00 00 00 00 00 00 00 00 |....JT..........| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 08 0b 00 00 |................| 00000040 b2 40 eb 00 eb 14 90 90 eb 06 48 83 ec 08 31 d2 |.@........H...1.| 00000050 bd 00 00 eb 05 e9 a6 10 00 00 fc 0f 1f 87 3e e0 |..............>.| 00000060 bf 00 70 31 c9 8e c1 fa 8e d7 89 cc fb 0e 1f e8 |..p1............| 00000070 00 00 5e 81 ee 72 00 b8 00 02 50 50 07 31 ff b9 |..^..r....PP.1..| 00000080 00 02 f3 a4 0f 1f 87 d2 ff ea 8e 20 00 00 8e d9 |........... ....| 00000090 b9 00 1b b8 50 00 8e c0 31 c0 31 ff f3 aa 80 fa |....P...1.1.....|
Whereas braille dump will show us:
Let's say we're reading 64-bit little endian words. This is a good example of how braille dump does a much better job intuitively revealing the structure of the binary. The old hexdump command does this:
$ hexdump -C bd.com | tail -n10 0000a050 ce 9a 00 00 00 00 00 00 ee 9a 00 00 00 00 00 00 |................| 0000a060 fc 9a 00 00 00 00 00 00 18 9b 00 00 00 00 00 00 |................| 0000a070 28 9b 00 00 00 00 00 00 38 9b 00 00 00 00 00 00 |(.......8.......| 0000a080 48 9b 00 00 00 00 00 00 5e 9b 00 00 00 00 00 00 |H.......^.......| 0000a090 6a 9b 00 00 00 00 00 00 7a 9b 00 00 00 00 00 00 |j.......z.......| 0000a0a0 8c 9b 00 00 00 00 00 00 a2 9b 00 00 00 00 00 00 |................| 0000a0b0 bc 9b 00 00 00 00 00 00 ce 9b 00 00 00 00 00 00 |................| 0000a0c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 0000b000
Whereas braille dump does this:
$ ./bd.com bd.com | tail -n10
If you get an error like "unable to find an interpreter" or "err:module:import_dll Library" then your system has likely been tuned to use binfmt-misc. You can safely restore the default Linux behavior for just Actually Portable Executables by running the following command:
sudo sh -c "echo ':APE:M::MZqFpD::/bin/sh:' >/proc/sys/fs/binfmt_misc/register"
If you use zsh or fish then you may need to run:
echo hi | bash ./bd.com
Instead of:
echo hi | ./bd.com
Please note, we successfully upstreamed patches to both months ago!
▁ 0x00
| ☺ 0x01
| ☻ 0x02
| ♥ 0x03
| ♦ 0x04
| ♣ 0x05
| ♠ 0x06
| • 0x07
|
◘ 0x08
| ○ 0x09
| ◙ 0x0A
| ♂ 0x0B
| ♀ 0x0C
| ♪ 0x0D
| ♫ 0x0E
| ☼ 0x0F
|
► 0x10
| ◄ 0x11
| ↕ 0x12
| ‼ 0x13
| ¶ 0x14
| § 0x15
| ▬ 0x16
| ↨ 0x17
|
↑ 0x18
| ↓ 0x19
| → 0x1A
| ← 0x1B
| ∟ 0x1C
| ↔ 0x1D
| ▲ 0x1E
| ▼ 0x1F
|
! 0x21
| " 0x22
| # 0x23
| $ 0x24
| % 0x25
| & 0x26
| ' 0x27
| |
( 0x28
| ) 0x29
| * 0x2A
| + 0x2B
| , 0x2C
| - 0x2D
| . 0x2E
| / 0x2F
|
0 0x30
| 1 0x31
| 2 0x32
| 3 0x33
| 4 0x34
| 5 0x35
| 6 0x36
| 7 0x37
|
8 0x38
| 9 0x39
| : 0x3A
| ; 0x3B
| < 0x3C
| = 0x3D
| > 0x3E
| ? 0x3F
|
@ 0x40
| A 0x41
| B 0x42
| C 0x43
| D 0x44
| E 0x45
| F 0x46
| G 0x47
|
H 0x48
| I 0x49
| J 0x4A
| K 0x4B
| L 0x4C
| M 0x4D
| N 0x4E
| O 0x4F
|
P 0x50
| Q 0x51
| R 0x52
| S 0x53
| T 0x54
| U 0x55
| V 0x56
| W 0x57
|
X 0x58
| Y 0x59
| Z 0x5A
| [ 0x5B
| \ 0x5C
| ] 0x5D
| ^ 0x5E
| _ 0x5F
|
` 0x60
| a 0x61
| b 0x62
| c 0x63
| d 0x64
| e 0x65
| f 0x66
| g 0x67
|
h 0x68
| i 0x69
| j 0x6A
| k 0x6B
| l 0x6C
| m 0x6D
| n 0x6E
| o 0x6F
|
p 0x70
| q 0x71
| r 0x72
| s 0x73
| t 0x74
| u 0x75
| v 0x76
| w 0x77
|
x 0x78
| y 0x79
| z 0x7A
| { 0x7B
| | 0x7C
| } 0x7D
| ~ 0x7E
| ⌂ 0x7F
|
█ 0x80
| ⡀ 0x81
| ⢀ 0x82
| ⣀ 0x83
| ⠠ 0x84
| ⡠ 0x85
| ⢠ 0x86
| ⣠ 0x87
|
⠄ 0x88
| ⡄ 0x89
| ⢄ 0x8A
| ⣄ 0x8B
| ⠤ 0x8C
| ⡤ 0x8D
| ⢤ 0x8E
| ⣤ 0x8F
|
⠁ 0x90
| ⡁ 0x91
| ⢁ 0x92
| ⣁ 0x93
| ⠡ 0x94
| ⡡ 0x95
| ⢡ 0x96
| ⣡ 0x97
|
⠅ 0x98
| ⡅ 0x99
| ⢅ 0x9A
| ⣅ 0x9B
| ⠥ 0x9C
| ⡥ 0x9D
| ⢥ 0x9E
| ⣥ 0x9F
|
⠃ 0xA0
| ⡃ 0xA1
| ⢃ 0xA2
| ⣃ 0xA3
| ⠣ 0xA4
| ⡣ 0xA5
| ⢣ 0xA6
| ⣣ 0xA7
|
⠇ 0xA8
| ⡇ 0xA9
| ⢇ 0xAA
| ⣇ 0xAB
| ⠧ 0xAC
| ⡧ 0xAD
| ⢧ 0xAE
| ⣧ 0xAF
|
⠉ 0xB0
| ⡉ 0xB1
| ⢉ 0xB2
| ⣉ 0xB3
| ⠩ 0xB4
| ⡩ 0xB5
| ⢩ 0xB6
| ⣩ 0xB7
|
⠍ 0xB8
| ⡍ 0xB9
| ⢍ 0xBA
| ⣍ 0xBB
| ⠭ 0xBC
| ⡭ 0xBD
| ⢭ 0xBE
| ⣭ 0xBF
|
⠊ 0xC0
| ⡊ 0xC1
| ⢊ 0xC2
| ⣊ 0xC3
| ⠪ 0xC4
| ⡪ 0xC5
| ⢪ 0xC6
| ⣪ 0xC7
|
⠎ 0xC8
| ⡎ 0xC9
| ⢎ 0xCA
| ⣎ 0xCB
| ⠮ 0xCC
| ⡮ 0xCD
| ⢮ 0xCE
| ⣮ 0xCF
|
⠑ 0xD0
| ⡑ 0xD1
| ⢑ 0xD2
| ⣑ 0xD3
| ⠱ 0xD4
| ⡱ 0xD5
| ⢱ 0xD6
| ⣱ 0xD7
|
⠕ 0xD8
| ⡕ 0xD9
| ⢕ 0xDA
| ⣕ 0xDB
| ⠵ 0xDC
| ⡵ 0xDD
| ⢵ 0xDE
| ⣵ 0xDF
|
⠚ 0xE0
| ⡚ 0xE1
| ⢚ 0xE2
| ⣚ 0xE3
| ⠺ 0xE4
| ⡺ 0xE5
| ⢺ 0xE6
| ⣺ 0xE7
|
⠞ 0xE8
| ⡞ 0xE9
| ⢞ 0xEA
| ⣞ 0xEB
| ⠾ 0xEC
| ⡾ 0xED
| ⢾ 0xEE
| ⣾ 0xEF
|
⠛ 0xF0
| ⡛ 0xF1
| ⢛ 0xF2
| ⣛ 0xF3
| ⠻ 0xF4
| ⡻ 0xF5
| ⢻ 0xF6
| ⣻ 0xF7
|
⠟ 0xF8
| ⡟ 0xF9
| ⢟ 0xFA
| ⣟ 0xFB
| ⠿ 0xFC
| ⡿ 0xFD
| ⢿ 0xFE
| ⣿ 0xFF
|
Braille Dump is authored and maintained by Justine Tunney. The extended braille charmap was designed by Google Information Security Engineer Ange Albertini. The glyphs used to display control codes were designed by IBM back in the early 1980's for the original personal computer, known as Code Page 437. What remains was designed by the American Standards Institute circa 1963 in X3.4.
If you liked braille dump then please become a GitHub sponsor or join Justine's Patreon. PayPal donations are also accepted at jtunney@gmail.com.