Смысл квеста "ломать" замкИ, которые работают на микроконтроллере MSP430. Все работает в браузере - парни из Matasano Security постарались и написали онлайн отладчик/дизассемблер для MSP430. Всего 19 уровней с возрастающей сложностью. Над последними двумя уровнями придется "поморщить мозг". Очень зачетный квест.
Отладчик в браузере - это очень удобно с одной стороны. Можно проходить квест лежа на диване с планшетом. В то же время отладчик имеет весьма ограниченный набор команд. Через 10 минут неактивности сессия отваливается и все выставленные брейкпоинты исчезают - нужно их заново ставить, что раздражает. К тому же последние уровни содержат много ассемблерного кода. Поэтому браузерный отладчик не очень удобен и хочется полноценного gdb.
Фанат микропроцессора MSP430 и Matasano Microcorruption CTF написал эмулятор - https://github.com/cemeyer/msp430-emu-uctf. На гитхабе написано подробно как ставить этот эмулятор и коннектить к нему GDB. В качестве аргумента эмулятору передается romfile.
Выкладываю питон-скрипт который конвертит live memory dump из браузерного отладчика в romfile. Может кому пригодится.
import binascii, sys def main(): fINname = sys.argv[1] fOUTname = sys.argv[2] fIN = open(fINname,"rb") fOUT = open(fOUTname,"wb") bytesWritten = 0 while True: line = fIN.readline() if line == "": break l = line.split(" ") a0 = int(l[0][:-1],16) if l[-1] == "*\r\n": line = fIN.readline() l = line.split(" ") a1 = int(l[0][:-1],16) for i in range(a1-a0): fOUT.write("\x00") bytesWritten += 1 s = binascii.unhexlify("".join(l[3:-3])) fOUT.write(s) bytesWritten += len(s) print "[+] Bytes written",bytesWritten fIN.close() fOUT.close() if __name__ == "__main__": main()