BSidesDC Badge
I recently attended my first security conference: BSidesDC. This isn’t a write up of that experience, although it was quite interesting and I learned a lot via some great sessions. One talk I really enjoyed by @grecs was Malware Analysis 101. Very well presented with lots of great getting started material.
Anyways, the badges. Pretty cool badges; bottle openers in fact, with fourteen binary bytes all with leading zeroes around the circumference: ascii encoded binary. The message is trivially found via google, but where’s the fun in that? And wanting to play around with Python some more I decided to write something that could decode the binary. My first stab looks like this.
#!/usr/bin/python
# This was a quick and dirty excercise in Python without googling the answer.
# No error checking, etc... Check out the Python unicode page and the BitManipulation
# page for more info and probably the proper way to do this.
import argparse
def main():
#argparse is overkill for this, but was fun to play around with
parser = argparse.ArgumentParser(description="Convert between ascii and binary "
and vice verse.")
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--to_binary', action="store", dest="ascii", nargs="+")
group.add_argument('--to_ascii', action="store", dest="bin", nargs="+")
args = parser.parse_args()
#Sends user input to the appropriate function
if args.ascii is not None:
to_binary(args.ascii)
elif args.bin is not None:
to_ascii(args.bin)
def to_binary(args):
chars_bin = [bin(ord(each)) for each in [item for sublist in args for item in \
sublist]]
print " ".join([each[2:].zfill(8) for each in chars_bin])
### The Stack Overflow way
### print ''.join('{:08b}'.format(ord(each)) for each in args)
def to_ascii(args):
print "".join([(chr(int(str(each),2))) for each in args])
### The Stack Overflow way
### print "".join(chr(args[i:i+8],2)) for i in xrange(0, len(args), 8))
if __name__ == "__main__": main()
And running this with our badge’s binary:
python binary_ascii.py --to_ascii 01101001 01101110 01100010 01100101 01100101 \
01110010 01110111 01100101 01110100 01101000 01101001 01110010 01110011 01110100
inbeerwethirst
python binary_ascii.py --to_ascii 01100010 01110011 01101001 01100100 01100101 \
01110011 01110011 01100101 01100011 01110101 01110010 01101001 01110100 01111001
bsidessecurity
Much cleverness by the organizers. One side says “BSides Security” and the other “In Beer We Thirst”…