HackIt! 2014 _ Level 4

«Bitcode. Esta vez te toca investigar lo profundo de Python.» Para ello, nos pasan un fichero tar.gz que contiene un archivo main.py (texto plano) y otro routines.pyc (binario).

# main.py
from routines import chk_serial
 
_in = raw_input("Do you feel lucky?: ")
print chk_serial(_in)

Así que lo que queda por hacer es entender la función chk_serial… que está en el binario. Hay que descompilar el routines.pyc y analizar… Vamos allá. Lo primero es bajarse e instalar la aplicación uncompyle:

git clone https://github.com/gstarnberger/uncompyle.git
cd uncompyle/
sudo ./setup.py install

descompilar:

uncompyler.py routines.pyc > routines.py

y analizar:

import base64
import re
F = 'TWVB2Xut3bfdmQ0l2Qk91Mo9HNwggc=='
 
def a(b):
    _tmp = b[:-2]
    return base64.b64decode(''.join([ e[::-1] for e in re.findall('..', _tmp) ]) + b[-2:])
 
 
 
def b(c):
    try:
        c = int(c)
        if c < 9999999999:
            return False
        else:
            if c <= 3:
                if c <= 1:
                    return False
                return True
            if not c % 2 or not c % 3:
                return False
            for i in xrange(5, int(c ** 0.5) + 1, 6):
                if not c % i or not c % (i + 2):
                    return False
 
            return True
    except:
        return False
 
 
 
def chk_serial(s):
    if b(s):
        return a(F)
    return 'Fail'
 
 
 
def main():
    a(F)
    print 'Nothing to do'
 
 
if __name__ == '__main__':
    main()

Bueno, no parece difícil 🙂

/tmp/uncompyle$ python
>>> F = 'TWVB2Xut3bfdmQ0l2Qk91Mo9HNwggc=='
>>> _tmp = F[:-2]
>>> _tmp
'TWVB2Xut3bfdmQ0l2Qk91Mo9HNwggc'
>>> F[-2:]
'=='
>>> b = F
>>> import base64
>>> import re
>>> base64.b64decode(''.join([ e[::-1] for e in re.findall('..', _tmp) ]) + b[-2:])
'Y0U_know_BitCod3_h4x0r'
>>>

Done!

Un comentario en «HackIt! 2014 _ Level 4»

  1. Aunque obviamente no es necesario, el chequeo del serial simplemente comprueba que sea un número primo mayor que 9999999999, así que por ejemplo con 119218851371 nos daría el flag.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.