┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─ ┼─┼─┌─┐─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┌─┐─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─ ┼─┼─│ │─┼─┌─┐─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─│ │─┼┌─┐┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─ ┼─┼─│ │─┼─└─┘─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─│ │┌─┼─┘┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─ ┼─┼─│ └──┐┌─┐┌────┐┌────┐─┌────┐┌─┐┌─┐┼─┌────┐┌────┐│ ││ └─┐┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─ ┼─┼─│ ┌┐ ││ ││ ┌┐ ││ ┌┐ │─│ ┌──┘│ ││ │┼─│ ┌┐ ││ ┌┐ ││ ││ ┌─┘┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─ ┼─┼─│ └┘ ││ ││ ││ ││ └┘ └┐│ │─┼─│ └┘ │┼─│ └┘ ││ └┘ ││ ││ │┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─ ┼─┼─└────┘└─┘└─┘└─┘└─────┘└─┘─┼─└──┐ │┼─└──┐ │└────┘└─┘└─┘┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─ ┼─┼─▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄┌──┘ │▀▄┌──┘ │▀▄▀┌─┐▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄┼─┼─ ┼─┼─▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄└────┘▀▄└────┘▀▄▀│ │▀▄▀▄▀▄▀▄▀▄▀▄▀▄┌─┐▄▀▄▀▄▀▄┼─┼─ ┼─┼─▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀│ │▀▄▀▄▀▄▀▄▀▄▀▄▀▄└─┘▄▀▄▀▄▀▄┼─┼─ ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼┌────┐┌────┐┌────┐ ┌────┐┌──┘ │┼─┌────┐┌────┐┌─┐┌─┐ ┌─┐┼─┼─ ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼│ ┌┐ ││ ┌──┘│ ┌┐ │ │ ┌┐ ││ ┌┐ │┼─│ ┌┐ ││ ┌──┘│ │└─┼─┼─┘┼─┼─ ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼│ └┘ ││ │┼─┼│ └┘ └┐│ ││ ││ └┘ │┼─│ └┘ ││ │─┼─│ │┌─┼─┼─┐┼─┼─ ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼└──┐ │└─┘┼─┼└─────┘└─┘└─┘└────┘┼─│ ┌──┘└─┘─┼─└─┘└─┘ └─┘┼─┼─ ┼─┼─╒════════════════┌──┘ │ ══════════════════════════│ │ ═════════════════╕┼─┼─ ┼─┼─│ June 18 '21 ►►►└────┘►►►►►►►►►►►►►►►►►►►►►►►►►►►└─┘►►►► Sept. 17 '21 │┼─┼─ ┼─┼─│ ──────────────────────────────────────────────────────────────────── │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ A N N O U N C E M E N T │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ [ WELCOME ]─────────────────────────────────────────────────────//── │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Strange files are serious business... │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Zero Trust. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Advanced Heuristics. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Anomaly Detection. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Anything that could potentially execute code: personally deleted by │┼─┼─ ┼─┼─│ the CISO herself... │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ What if instead of hiding a file within a file, we made the file │┼─┼─ ┼─┼─│ become whatever the observer was looking for? │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Last year, we challenged you to create the smallest binary that │┼─┼─ ┼─┼─│ could be exec'd the same backwards as forwards: a Binary Palindrome. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ This year, we challenge you to create the smallest executable binary │┼─┼─ ┼─┼─│ that is more than one file at once: a Binary Polyglot. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ This challenge has many different ┌────────────────────────────────┐ │┼─┼─ ┼─┼─│ and interesting ways to approach. │ Polyglot files are files that │ │┼─┼─ ┼─┼─│ A total abandonment of your pre- │ are considered valid in mult- │ │┼─┼─ ┼─┼─│ concieved notions about your fav- │ iple formats. This could be a │ │┼─┼─ ┼─┼─│ orite file formats is necessary. │ GIF that is also a PDF. Or a │ │┼─┼─ ┼─┼─│ │ NES ROM that's also a ZIP file │ │┼─┼─ ┼─┼─│ Because things are slowly coming │ that's also an HTML page. │ │┼─┼─ ┼─┼─│ back to normal around the world, │ │ │┼─┼─ ┼─┼─│ the BGGP will be three months, │ A binary polyglot is a binary │ │┼─┼─ ┼─┼─│ instead of two months like last │ program that is also valid as │ │┼─┼─ ┼─┼─│ year, to encourage people to take │ another file type. │ │┼─┼─ ┼─┼─│ their time and do non-computer └────────────────────────────────┘ │┼─┼─ ┼─┼─│ things too. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ We encourage people who haven't done anything like this before to │┼─┼─ ┼─┼─│ work on this as well. You can work alone or with others to take │┼─┼─ ┼─┼─│ on this task. As much as this is a "competition", anything that │┼─┼─ ┼─┼─│ comes out of this challenge will be interesting no matter what! │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ For more information about polyglot files in general, check out │┼─┼─ ┼─┼─│ the RESOURCES section before proceeding! │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ [ GUIDELINES ]──────────────────────────────────────────────────//── │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Here are the guidelines for this challenge: │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ ► The host file must be a binary executable. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ This is any binary executable that stores either machine code │┼─┼─ ┼─┼─│ (such as ELF, PE etc.) or bytecode (wasm, pyc, etc.) │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ ► Overlap with at least one additional file of any type to create │┼─┼─ ┼─┼─│ a polyglot. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ ► The host binary must return or print the number 2 when executed. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ [ Scoring ] │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ There will be two scoring categories for this challenge, each one │┼─┼─ ┼─┼─│ with it's own set of considerations. Participants can aim for one │┼─┼─ ┼─┼─│ or the other, or both. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Category 1 is the simplest: The smallest binary polyglot that meets │┼─┼─ ┼─┼─│ the above criteria. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Category 2 uses a point system, with scores based on: │┼─┼─ ┼─┼─│ - Number of overlapping bytes │┼─┼─ ┼─┼─│ - Number of bytes in the executable code section of the host file │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ ► 1 point per byte from a guest file overlapping with the host file │┼─┼─ ┼─┼─│ ► 2 points per byte from the guest file overlapping with the │┼─┼─ ┼─┼─│ executable code section of the host file. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Each additional file is scored individually, adding to the total │┼─┼─ ┼─┼─│ number of points. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ These points are then divided by the total number of bytes in the │┼─┼─ ┼─┼─│ host file, giving the final score. See the EXAMPLE section for │┼─┼─ ┼─┼─│ more details. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ [ Other Rules ] │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ ► The host binary must be able to execute as submitted. │┼─┼─ ┼─┼─│ ► Guest files must be parsable as the given file type on at least │┼─┼─ ┼─┼─│ one program that was published before the start of the contest. │┼─┼─ ┼─┼─│ ► File size should not exceed 4096 bytes (4KB) │┼─┼─ ┼─┼─│ ► The size of the executable section will only be counted as what is │┼─┼─ ┼─┼─│ defined by the binary itself, or by the last executed instruction │┼─┼─ ┼─┼─│ for files with ambiguous code sections. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ [ EXAMPLE ]─────────────────────────────────────────────────────//── │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ It helps to look at a visual representation to understand how each │┼─┼─ ┼─┼─│ file overlaps. The following is an example of how a Category 2 │┼─┼─ ┼─┼─│ submission would be scored with two guest files. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ ┌────────┬────────┬───────┬─────────┬─────────┬──────────────────┐ │┼─┼─ ┼─┼─│ │ START │ END │ SIZE │ FILE OL │ EXEC OL │ Description │ │┼─┼─ ┼─┼─│ ├────────┼────────┼───────┼─────────┼─────────┼──────────────────┤ │┼─┼─ ┼─┼─│ │ 0x0000 │ 0x0200 │ 0x200 │ - │ - │ Host Binary │ │┼─┼─ ┼─┼─│ │ 0x0080 │ 0x0150 │ 0xD0 │ - │ - │ Executable Code │ │┼─┼─ ┼─┼─│ │ 0x0100 │ 0x0180 │ 0x80 │ 0x80 │ 0x50 │ File1 │ │┼─┼─ ┼─┼─│ │ 0x0130 │ 0x01D0 │ 0xA0 │ 0xA0 │ 0x20 │ File2 │ │┼─┼─ ┼─┼─│ └────────┴────────┴───────┴─────────┴─────────┴──────────────────┘ │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ host.bin │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ 0000: 0000 0000 0000 0000 0000 0000 0000 0000 ................ │┼─┼─ ┼─┼─│ 0010: 0000 0000 0000 0000 0000 0000 0000 0000 ................ │┼─┼─ ┼─┼─│ 0020: 0000 0000 0000 0000 0000 0000 0000 0000 ................ │┼─┼─ ┼─┼─│ 0030: 0000 0000 0000 0000 0000 0000 0000 0000 ................ │┼─┼─ ┼─┼─│ 0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................ │┼─┼─ ┼─┼─│ 0050: 0000 0000 0000 0000 0000 0000 0000 0000 ................ │┼─┼─ ┼─┼─│ 0060: 0000 0000 0000 0000 0000 0000 0000 0000 ................ │┼─┼─ ┼─┼─│ 0070: 0000 0000 0000 0000 0000 0000 0000 0000 ................ │┼─┼─ ┼─┼─│ ┌───────────────────────────────────────┬─── Code @ 0x80 │┼─┼─ ┼─┼─│ 0080: │0000 0000 0000 0000 0000 0000 0000 0000│ ................ │┼─┼─ ┼─┼─│ 0090: │0000 0000 0000 0000 0000 0000 0000 0000│ ................ │┼─┼─ ┼─┼─│ 00a0: │0000 0000 0000 0000 0000 0000 0000 0000│ ................ │┼─┼─ ┼─┼─│ 00b0: │0000 0000 0000 0000 0000 0000 0000 0000│ ................ │┼─┼─ ┼─┼─│ 00c0: │0000 0000 0000 0000 0000 0000 0000 0000│ ................ │┼─┼─ ┼─┼─│ 00d0: │0000 0000 0000 0000 0000 0000 0000 0000│ ................ │┼─┼─ ┼─┼─│ 00e0: │0000 0000 0000 0000 0000 0000 0000 0000│ ................ │┼─┼─ ┼─┼─│ 00f0: │0000 0000 0000 0000 0000 0000 0000 0000│ ................ │┼─┼─ ┼─┼─│ ┌─────────────────────────────────────────┬── File1 @ 0x100 │┼─┼─ ┼─┼─│ 0100: ││0000 0000 0000 0000 0000 0000 0000 0000││ ................ │┼─┼─ ┼─┼─│ 0110: ││0000 0000 0000 0000 0000 0000 0000 0000││ ................ │┼─┼─ ┼─┼─│ 0120: ││0000 0000 0000 0000 0000 0000 0000 0000││ ................ │┼─┼─ ┼─┼─│ ┌───────────────────────────────────────────┬─ File2 @ 0x130 │┼─┼─ ┼─┼─│ 0130:│││0000 0000 0000 0000 0000 0000 0000 0000│││................ │┼─┼─ ┼─┼─│ 0140:│││0000 0000 0000 0000 0000 0000 0000 0000│││................ │┼─┼─ ┼─┼─│ ││└───────────────────────────────────────┘││ │┼─┼─ ┼─┼─│ 0150:││ 0000 0000 0000 0000 0000 0000 0000 0000 ││................ │┼─┼─ ┼─┼─│ 0160:││ 0000 0000 0000 0000 0000 0000 0000 0000 ││................ │┼─┼─ ┼─┼─│ 0170:││ 0000 0000 0000 0000 0000 0000 0000 0000 ││................ │┼─┼─ ┼─┼─│ │└─────────────────────────────────────────┘│ │┼─┼─ ┼─┼─│ 0180:│ 0000 0000 0000 0000 0000 0000 0000 0000 │................ │┼─┼─ ┼─┼─│ 0190:│ 0000 0000 0000 0000 0000 0000 0000 0000 │................ │┼─┼─ ┼─┼─│ 01a0:│ 0000 0000 0000 0000 0000 0000 0000 0000 │................ │┼─┼─ ┼─┼─│ 01b0:│ 0000 0000 0000 0000 0000 0000 0000 0000 │................ │┼─┼─ ┼─┼─│ 01c0:│ 0000 0000 0000 0000 0000 0000 0000 0000 │................ │┼─┼─ ┼─┼─│ └───────────────────────────────────────────┘ │┼─┼─ ┼─┼─│ 01d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ │┼─┼─ ┼─┼─│ 01e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ │┼─┼─ ┼─┼─│ 01f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ The scoring would break down like so: │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ File1: │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ 0x80 (128.) bytes of File1 overlap the host file │┼─┼─ ┼─┼─│ 0x50 (80.) of those overlap the binary code section │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ File1 Points: │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ 128 + (80*2) = 288 │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ If this was the only file overlapped, the score would be │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ 288 / 512 = 0.5625 │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ For additional files, we score the same way and add to the total. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ File2: │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ 0xA0 (160.) bytes overlap │┼─┼─ ┼─┼─│ 0x20 (32.) are in the binary code section │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ File2 Points: │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ 160 + (32*2) = 224 │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Add to the File1 points: │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ 224 + 288 = 512 │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Divide by the total number of bytes for the final score: │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ 512 / 512 = 1.0 │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ [ TIPS ]────────────────────────────────────────────────────────//── │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ 1. There's a lot of research that has been done into polyglot files │┼─┼─ ┼─┼─│ to explore. Take time to read through some literature (as shared │┼─┼─ ┼─┼─│ below) and play around with weird files to get in the mood! │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ 2. If this is your first time playing with polyglot files: pick a │┼─┼─ ┼─┼─│ few file formats you want to explore and stick with them until │┼─┼─ ┼─┼─│ you feel comfortable. Even if you don't end up making the small- │┼─┼─ ┼─┼─│ est binary polyglot, you'll learn an awful lot about files and │┼─┼─ ┼─┼─│ parsers that will stay with you forever. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ 3. The Binary Golf Association recommends that you set up a VM or │┼─┼─ ┼─┼─│ other dedicated workspace for playing with polyglot executables. │┼─┼─ ┼─┼─│ Be prepared to break certain programs that try to parse your │┼─┼─ ┼─┼─│ files, and possibly corrupt your data. Also, Windows will some- │┼─┼─ ┼─┼─│ times just delete your work because it thinks it's malicious. │┼─┼─ ┼─┼─│ An Ubuntu Linux VM is the safest bet, and has many readily avail- │┼─┼─ ┼─┼─│ able tools! │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ 4. Two of the most common tools for creating polyglots are hex │┼─┼─ ┼─┼─│ editors and assemblers. Anything that allows you to define and │┼─┼─ ┼─┼─│ control individual bytes will work. You could even write a script │┼─┼─ ┼─┼─│ to generate files for you by writing raw bytes, it's up to you :} │┼─┼─ ┼─┼─│ P.S. `nasm -f bin` > all │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ 5. It's really helpful to record your progress in a dedicated notes │┼─┼─ ┼─┼─│ file. Turn these notes into a writeup for extra brownie points │┼─┼─ ┼─┼─│ and show others what you found! │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ [ RESOURCES ]───────────────────────────────────────────────────//── │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ This is one of the best papers regarding the theory and practice of │┼─┼─ ┼─┼─│ polyglot files, and we suggest you start here: │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ PoC||GTFO 7:6 (pg. 18) │┼─┼─ ┼─┼─│ Abusing file formats; or, Corkami, the Novella - Ange Albertini │┼─┼─ ┼─┼─│ https://www.alchemistowl.org/pocorgtfo/pocorgtfo07.pdf │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ [ Videos ] │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ https://youtu.be/VVdmmN0su6E What is a File Format? - LiveOverflow │┼─┼─ ┼─┼─│ https://youtu.be/hdCs6bPM4is Funky File Formats - Ange Albertini │┼─┼─ ┼─┼─│ https://youtu.be/VLmrsfSE-tA Adventures in Binary Golf - netspooky │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ [ Repos ] │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ https://github.com/corkami/pocs Many interesting file PoCs │┼─┼─ ┼─┼─│ https://github.com/corkami/mitra Polyglot Generator │┼─┼─ ┼─┼─│ https://github.com/Polydet/polyglot-database Polyglot file PoCs │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Don't forget to check out the BGGP Repo to see last years entries! │┼─┼─ ┼─┼─│ https://github.com/netspooky/BGGP The BGGP Repo │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ [ SUBMISSIONS ]─────────────────────────────────────────────────//── │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ When submitting your entry, please include the following: │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ - A text file containing a hex dump of your file using xxd, hexdump │┼─┼─ ┼─┼─│ or other similar tool. │┼─┼─ ┼─┼─│ - A second text file containing the SHA256 hash of the binary file │┼─┼─ ┼─┼─│ (not the hex dump), and a list of files in your polyglot and what │┼─┼─ ┼─┼─│ programs to use to open them. │┼─┼─ ┼─┼─│ - If you want to include the source code and/or a write up, please │┼─┼─ ┼─┼─│ feel free! │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ We'd prefer if you put your whole entry into a Github repository, as │┼─┼─ ┼─┼─│ it will be easier to track, thank you! │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ You can DM your submissions to @netspooky on Twitter or send an │┼─┼─ ┼─┼─│ email to bggp@thugcrowd.com │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ ──────────────────────────────────────────────────────────────────── │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ Good luck! We look forward to seeing what you come up with. │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ The BGA would like to thank ThugCrowd, tmp.0ut, and everyone doing │┼─┼─ ┼─┼─│ cursed things with files and/or computers. We love you! │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─│ │┼─┼─ ┼─┼─╘══════════════════════════════════════════════════════════════════════╛┼─┼─ ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─ ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─