Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Azav

#1
Probablemente el FBI explota alguna vulnerabilidad que descubrieron en TOR para llegar a las IPs de los usuarios. Existen numerosos estudios sobre este tema y son de conocimiento público las No tienes permitido ver los links. Registrarse o Entrar a mi cuenta existentes que eventualmente podrían permitir lograrlo.

Lo que llama más la atención son las leyes legislativas de EEUU, obviamente si el FBI es una institución que se dedica a investigar y hallar criminales, entonces deberían tener una especie de fuero que les permita no revelar información acerca de sus métodos, así se evitarían estos problemas, y podrían seguir encontrando a muchos más.

Hace unas semanas vi en Netflix un documental llamado Deep Web, que cuenta la historia de Silk Road (uno de los mercados ilegales más grandes que hubo en la deep web) y de la captura de su creador. El abogado del acusado apelaba a lo mismo que se menciona en esta noticia, es decir, que el FBI explicara cómo lo había encontrado, pero la defensa cambiaba los cargos o explicaba muy a rasgos generales la técnica empleada. Es muy interesante, lo recomiendo.
#2
Hola, no puedo probar tu código ahora mismo porque no tengo ni Python 2 ni las librarías instaladas, pero parece que tu error está en los niveles de indentación.

Si estoy pensando bien en lo que quieres hacer, entonces tu función crackPass debería quedar indentada de la siguiente manera:
Código: python

def crackPass():
    c=raw_input("\nIntroduce caracteres como 12abcjfi@ que se van a usar en el diccionario :")
    e=raw_input("\nIntroduce la longitud maxima de la contraseña= ")
    for dirpath, dirnames, files in os.walk("meta"):
        for name in files:
            ext = name.lower().rsplit('.', 1)[-1]
            if ext in ['pdf']:
                pdf = PyPDF2.PdfFileReader(file(dirpath+os.path.sep+name, 'rb'))
                if not pdf.isEncrypted:
                    print'No hay contraseña'
                else:
                    b = 1 + int(e)
                    r=range(int(b))
                    for x in r:
                        res = itertools.product(c, repeat=int(x))
                        for i in res:
                            print'[+] Intentando contraseña',i
                            password =""+''.join(i)
                            if pdf.decrypt(password):
                                print '[+] password :',i
                                sys.exit()
                            print '[-] Contraseña no encontrada'


El código que estabas usando tenías varios problemas. Primero no revisabas todos los archivos de la carpeta meta, sino que iterabas sobre todos los archivos pero al final solo revisabas el último. Lo mismo con las combinaciones de contraseñas, iterabas sobre todas ellas pero al final solo verificabas la última.

El código tiene varios detalles que podrían mejorarse pero no afectan la funcionalidad.

Saludos y cuéntanos cómo te va.
#3
Python / Re:Cifrado Compresor [Archivos]
Enero 30, 2015, 03:32:54 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola brother,

El interprete de Python es muy permisivo en ciertos aspectos, por eso está la PEP8 (No tienes permitido ver los links. Registrarse o Entrar a mi cuenta) no digo que hay que seguirla al pie de la letra, pero está hecha para intentar estandarizar todos los códigos y así no hayan problemas en especial cuando se programa en equipo (lo digo por experiencia propia). El tema con las identaciones es que todos los IDES las pueden tomar distinto, lo que ves en tu IDE configurado para usar tabuladores no es lo mismo que ve alguien con el IDE configurado para usar espacios. Así veo yo parte de un método de tu código de un post anterior.


Pero el verdadero problema empieza cuando quieres editar el código porque a veces las identaciones no coinciden y tienes que eliminarlas por completo y arreglarlas a mano (imagínate el trabajo para un script de 500 líneas).

Identar con cuatro espacios no cuesta mucho y creéme que los que leémos los códigos y a veces los editamos agradecemos infinitamente que lo hagan.

Si todos identaran con cuatro espacios el mundo sería un lugar mejor.

Saludos!

Vale, la verdad es que había escuchado harto lo de indentar con cuatro espacios, pero en los IDE que uso (son dos distintos) siempre se me ha visto bien así. Python 3 no permite que el código esté indentado de las dos formas, o TAB's o espacios, con ambos lanza error. Cuando partí programando y supe de las dos opciones me quedé con los TAB's pues se me hacía más cómodo pero tienes tu punto. De ahora en más haré el esfuerzo de cambiarme  :).
#4
Python / Re:Cifrado Compresor [Archivos]
Enero 29, 2015, 08:43:23 PM
Muchas gracias a todos por sus comentarios.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
HOLA!!!

Osea, en definitiva quita los 00 del archivo original los cuenta y los coloca como 00 [cantidad de 00].

Esta interesante :D

GRACIAS POR LEER!!!
Exactamente eso 79137913.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Excelente brother, gracias por traerlo. Esto es Python 3 verdad?

PD: No quiero sonar muy pesado, pero intenta usar cuatro espacios para identar; sino a veces se vuelve un poco tedioso seguir el código.

Saludos!
Sí, es python 3.4. Con respecto a la indentación, puedo cambiarlo pero.. no entiendo el problema de hacerlo con TAB. ¿Qué ventaja tiene usar los 4 espacios?¿Porqué se hace tedioso seguir el código?

Aprovecho de aclarar, ya que me preguntaron, que el código que está abajo hace exactamente lo mismo que el de arriba pero es bastante más lento. Lo publiqué igual porque se hace más fácil entender el código. Lo otro es que en la linea 94 del primer código había un error (salía print en vez de return) pero ya lo arreglé.

¡Saludos!
#5
Python / Cifrado Compresor [Archivos]
Enero 29, 2015, 12:33:42 AM
Buenas a todos, hace tiempo que he estado adentrándome en el manejo de archivos con python. Lo primero que creé fue una calculadora para hacer cambios de binarios, decimales, octales y hexadecimales (No tienes permitido ver los links. Registrarse o Entrar a mi cuenta), bastante simple a decir verdad. Esta vez traigo algo un poco más elaborado.  Se trata de un algoritmo para cifrar archivos, pero que además comprime el archivo al cifrarlo. Para comprimirlo reduce la cantidad de bytes 0x00 en el archivo. Podría ilustrarse así si lo vemos como en un editor hexadecimal:
Código: text
Caso 1: A1 00 00 00 00 B2 01 7C > A1 00 03 B2 01 7C          (aquí nos ahorramos dos bytes)
Caso 2: B1 FB 00 CC A2 72 A1 2D > B1 FB 00 00 CC A2 72 A1 2D (aquí aumentamos en un byte)
Caso 3: B1 FB 00 00 A2 72 A1 2D > B1 FB 00 01 A2 72 A1 2D    (aquí no ganamos ni perdimos )

Teóricamente podría suceder que el archivo aumente su tamaño (si el caso 2 se repite mucho y el caso 1 no), pero en la práctica es sumamente extraño que pase, casi siempre el archivo va a reducir al menos unos miles de bytes. No estoy seguro si esta forma de compresión ya existía pero hago el aporte igualmente.

Luego de realizar la compresión viene el cifrado, que vendría siendo un algoritmo simple que cifra byte a byte con un contraseña. El algoritmo fue una invención mía, no es XOR aunque se parece un poco.  Luego para decodificar es el proceso inverso, creo que no es necesario explicarlo.

El código puede ser fácilmente traducido a otros lenguajes (tal vez me animo a pasarlo a VB6) y no vendría mal para quienes hacen crypters. Inicialmente el código resultaba ser un poco lento, por eso no lo había publicado, pero optimicé el código y mejoró muchísimo. Sin más, les dejo el source:
Código: python
def CheckReducement(data, byte):
    amount_list = []
    pos = data.find(byte)
    while pos != -1:
        i = 1
        while True:
            if (pos + i) < len(data):
                if data[pos + i:pos + i + 1] == byte:
                    i += 1
                else:
                    amount_list.append(i)
                    pos = data.find(byte, pos + i)
                    break
                else:
                    amount_list.append(i)
                    pos = -1
                    break
    bytes_reducidos = 0
    for amount in amount_list:
        if amount == 1:
            bytes_reducidos -= 1
        elif amount >= 3 and amount <= 256:
            ahorro = amount - 2
            bytes_reducidos += ahorro
        elif amount > 256:
            ahorro = (((amount // 256) * 254) + ((amount % 256) - 2))
            bytes_reducidos += ahorro
    return bytes_reducidos

def DoReducement(inputfile, outputfile, password):
    f = open(inputfile, "br")
    data = f.read()
    f.close()       
    reduccion = CheckReducement(data, b"\x00")
    porcentaje = (reduccion * 100) / len(data)
    byte_list = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
    pos = data.find(b"\x00")
    pos2 = 0
    nueva_data = b""
    while pos != -1:
        i = 1
        while True:
            if (pos + i) < len(data):
                if data[pos + i:pos + i + 1] == b"\x00":
                    i += 1
                else:
                    if i <= 256:
                        nueva_data += data[pos2:pos + 1] + byte_list[i - 1:i]
                        pos2 = pos + i
                        pos = data.find(b"\x00", pos2)
                    else:
                        nueva_data += data[pos2:pos + 1] + b"\xFF"
                        pos2 = pos + 256
                        pos = data.find(b"\x00", pos2)
                    break
            else:
                if i <= 256:
                    nueva_data += data[pos2:pos + 1] + byte_list[i - 1:i]
                    pos2 = pos + i
                    pos = data.find(b"\x00", pos2)
                else:
                    nueva_data += data[pos2:pos + 1] + b"\xFF"
                    pos2 = pos + 256
                    pos = data.find(b"\x00", pos2)
                break
    nueva_data += data[pos2:]
    nueva_data = EncodeBytes(nueva_data, password)
    f = open(outputfile, "bw")
    f.write(nueva_data)
    f.close()
    return "El archivo fue cifrado con éxito y su peso se redujo en un " + str(porcentaje)[:4] + "% (" + str(reduccion) + " bytes reducidos)."

       
def DoIncrement(inputfile, outputfile, password):
    f = open(inputfile, "br")
    data = f.read()
    f.close()       
    data = DecodeBytes(data, password)
    byte_list = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
    zero_list = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    pos = data.find(b"\x00")
    pos2 = 0
    nueva_data = b""
    while pos != -1:
        amount = byte_list.find(data[pos + 1:pos + 2])
        zero_bytes = zero_list[:amount]
        nueva_data += data[pos2:pos + 1] + zero_bytes
        pos2 = pos + 2
        pos = data.find(b"\x00", pos2)
    nueva_data += data[pos2:]
    f = open(outputfile, "bw")
    f.write(nueva_data)
    f.close()       
    return "El archivo fue decifrado con éxito."

def EncodeBytes(bytes_data, password): 
    return b''.join(chr((bytes_data[i] + ord(password[i % len(password)])) % 256).encode('iso8859-1') for i in range(len(bytes_data)))
               
def DecodeBytes(bytes_data, password):
    return b''.join(chr((bytes_data[i] - ord(password[i % len(password)])) % 256).encode('iso8859-1') for i in range(len(bytes_data)))
       
print(DoReducement("archivo.exe", "cifrado.exe", "contraseña"))
print(DoIncrement("cifrado.exe", "archivo_original.exe", "contraseña"))

Para quienes quieran estudiar mejor el algoritmo les dejo el source no optimizado, que hace exactamente lo mismo que el código de arriba pero es más fácil de entender.

Código: python
def CheckReducement(data, byte):
    amount_list = []
    pos = data.find(byte)
    while pos != -1:
        i = 1
        while True:
            if (pos + i) < len(data):
                if data[pos + i:pos + i + 1] == byte:
                    i += 1
                else:
                    amount_list.append(i)
                    pos = data.find(byte, pos + i)
                    break
            else:
                amount_list.append(i)
                pos = -1
                break
    bytes_reducidos = 0
    for amount in amount_list:
        if amount == 1:
            bytes_reducidos -= 1
        elif amount >= 3 and amount <= 256:
            ahorro = amount - 2
            bytes_reducidos += ahorro
        elif amount > 256:
            ahorro = (((amount // 256) * 254) + ((amount % 256) - 2))
            bytes_reducidos += ahorro
    return bytes_reducidos

def DoReducement(inputfile, outputfile, password):
    f = open(inputfile, "br")
    data = f.read()
    f.close()       
    reduccion = CheckReducement(data, b"\x00")
    porcentaje = (reduccion * 100) / len(data)
    byte_list = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
    pos = data.find(b"\x00")
    while pos != -1:
        i = 1
        while True:
            if (pos + i) < len(data):
                if data[pos + i:pos + i + 1] == b"\x00":
                   i += 1
                else:
                    if i <= 256:
                        data = data[:pos + 1] + byte_list[i - 1:i] + data[pos + i:]
                    else:
                        data = data[:pos + 1] + byte_list[255:] + data[pos + 256:]
                    pos = data.find(b"\x00", pos + 2)
                    break
            else:
                    if i <= 256:
                        data = data[:pos + 1] + byte_list[i - 1:i] + data[pos + i:]
                    else:
                        data = data[:pos + 1] + byte_list[255:] + data[pos + 256:]
                    pos = data.find(b"\x00", pos + 2)
                    break
    data = EncodeBytes(data, password)
    f = open(outputfile, "bw")
    f.write(data)
    f.close()       
    return "El archivo fue cifrado con éxito y su peso se redujo en un " + str(porcentaje)[:4] + "% (" + str(reduccion) + " bytes reducidos)."

       
def DoIncrement(inputfile, outputfile, password):
    f = open(inputfile, "br")
    data = f.read()
    f.close()       
    data = DecodeBytes(data, password)
    byte_list = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
    zero_list = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    pos = data.find(b"\x00")
    while pos != -1:
        amount = byte_list.find(data[pos + 1:pos + 2])
        zero_bytes = zero_list[:amount]
        data = data[:pos + 1] + zero_bytes + data[pos + 2:]
        pos = data.find(b"\x00", pos + len(zero_bytes) + 1)
    f = open(outputfile, "bw")
    f.write(data)
    f.close()       
    return "El archivo fue decifrado con éxito."

def EncodeBytes(bytes_data, password):
    byte_list = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
    i = 0
    nueva_data = b''
    while i < len(bytes_data):
        j = i % len(password)
        suma = bytes_data[i] + ord(password[j])
        if suma > 255:
            suma = suma % 256
        nueva_data += byte_list[suma:suma + 1] 
        i += 1
    return nueva_data
               
def DecodeBytes(bytes_data, password):
    byte_list = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
    nueva_data = b''
    i = 0
    while i < len(bytes_data):
        j = i % len(password)
        resta = bytes_data[i] - ord(password[j])
        if resta < 0:
            resta = resta % 256
        nueva_data += byte_list[resta:resta + 1]       
        i += 1
    return nueva_data
       
print(DoReducement("archivo.exe", "cifrado.exe", "contraseña"))
print(DoIncrement("cifrado.exe", "archivo_original.exe", "contraseña"))


Espero alguien pueda darle buen uso, saludos a todos.
#6
Nunca he usado un payload, digamos que es un área que no me llama mucho la atención, pero todo lo que se habla en este artículo es muy similar a algo que estoy programando. Justamente lo que estoy programando ahora es un encoder/decoder de archivos, que primero comprime el archivo todo lo posible y luego cifra su contenido byte a byte, usando algo parecido a XOR, una modificación que inventé. Lo voy a publicar hoy o mañana.

Lo que no me queda claro es que el hecho de xorear toda la payload no va a evitar que aparezca un bad char, por ejemplo:
payload_original                          =  "\x12\x41\x23\x34\x21\x00\xA0\x98\x83\xBC"
payload_xored (con byte 0x98)    = "\x86\x57\x75\x64\x77\x98\x08\x00\x15\x24"

¿O estoy confundido?  ???
#7
Python / NumSys Calculator by Azav
Enero 23, 2015, 04:16:23 AM
Numbering System Calculator by Azav

La semana pasada estuve investigando las representaciones ASCII de los caracteres, para las cuales se usan distintos sistemas numéricos (varían en su base). Los cuatro sistemas numéricos más usados son el binario, el octal, el decimal y el hexadecimal. Por ejemplo: la letra 'a' tiene por valor ASCII el numero 97 en el sistema decimal, o bien 1100001 en binario, o bien 141 en octal o bien 61 en hexadecimal (este último es que se usa en los editores de archivos ejecutables). Resulta que para entender mejor cómo se llevan a cabo las transformaciones de un sistema a otro creé esta herramienta , que también permite realizar operaciones (suma y resta) en los diversos sistemas numéricos. No es nada del otro mundo pero a mi me sirvió para entender mejor cómo funcionan estos sistemas.

La herramienta la programé en Python 3.4 y usé tkinter para la interfaz gráfica. Convertí el archivo .py a ejecutable usando py2exe. Captura (se ve un poco mal):


Source code:
Código: python
from tkinter import *
from tkinter import messagebox, ttk

def cambio_de_base(base, valorbase10):
caracteres = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
lista = [valorbase10]
while True:
division = valorbase10 // base
if division == 0:
break
else:
lista.append(division)
valorbase10 = division
lista.reverse()
valorbase2 = ''
for i in lista:
resto = i % base
valorbase2 += caracteres[resto:resto + 1]
return valorbase2

def cambio_a_decimal(base, valorbase):
caracteres = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for char in valorbase:
if caracteres[:base].find(char) == -1:
return "ERROR"
j = len(valorbase)
k = -1
sumatoria = 0
for i in range(j):
valor_parcial = caracteres.find(valorbase[k:j]) * (base ** i)
sumatoria = sumatoria + valor_parcial
j = k
k = k - 1
return sumatoria


class Interfaz():
def __init__(self):
#Main Window
self.mainWindow = Tk()
self.mainWindow.geometry("450x250")
self.mainWindow.title("Azav's Numeric Calculator")
self.mainWindow.protocol("WM_DELETE_WINDOW", self.quit)

#ComboBoxs
ComboVar = StringVar()
self.Combo = ttk.Combobox(self.mainWindow, textvariable=ComboVar, width = "2", values=('+', '-'))
self.Combo.place(x=105, y=85)

#Textboxs
self.Sumando1 = Text(self.mainWindow, height = "0.7", width = "30", relief = "flat")
self.Sumando1.place(x=150, y=55)
self.Sumando2 = Text(self.mainWindow, height = "0.7", width = "30", relief = "flat")
self.Sumando2.place(x=150, y=85)
self.Suma = Text(self.mainWindow, height = "0.7", width = "30", relief = "flat")
self.Suma.place(x=150, y=140)

def start(self):
def Operate():
nro1 = self.Sumando1.get('1.0', 'end').strip().upper()
nro2 = self.Sumando2.get('1.0', 'end').strip().upper()
base = OptVar.get()
nro1_dec = cambio_a_decimal(base, nro1)
nro2_dec = cambio_a_decimal(base, nro2)
if nro1_dec == "ERROR":
messagebox.showwarning("Azav's Numeric Calculator", nro1 + " is not a valid value for base " + str(base) + ".")
return
if nro2_dec == "ERROR":
messagebox.showwarning("Azav's Numeric Calculator", nro2 + " is not a valid value for base " + str(base) + ".")
return
if self.Combo.get().strip() == '+':
resultado = nro1_dec + nro2_dec
else:
resultado = nro1_dec - nro2_dec
if resultado < 0:
messagebox.showwarning("Azav's Numeric Calculator", "Negative numbers are not supported.")
return
resultado_base = cambio_de_base(base, resultado)
self.Suma.delete('1.0', 'end')
self.Suma.insert('1.0', str(resultado_base))
info_list = []
if base != 2:
info_list.append("Binary result: " + str(cambio_de_base(2, resultado)))
if base != 8:
info_list.append("Octal result: " + str(cambio_de_base(8, resultado)))
if base != 10:
info_list.append("Decimal result: " + str(resultado))
if base != 16:
info_list.append("Hexdecimal result: " + str(cambio_de_base(16, resultado)))
info = ""
for i in info_list:
info = info + i + "\n"
lbInfo['text'] = info

def BaseConverter():
base = OptVar.get()
suma = self.Suma.get('1.0', 'end').strip().upper()
NewGUI = BaseConverterGUI()
NewGUI.txtBase.delete('1.0', 'end')
NewGUI.txtBase.insert('1.0', str(base))
exec("NewGUI.txt" + str(base) + ".delete('1.0', 'end')")
exec("NewGUI.txt" + str(base) + ".insert('1.0', suma)")
NewGUI.ConvertBases()
NewGUI.start()

#Combo Config
self.Combo.set('+')

#OptionButton
OptVar = IntVar()
opt1 = Radiobutton(self.mainWindow, text="Binary", width = "10", variable=OptVar, indicatoron=0, value=2).place(x=15, y=15)
opt2 = Radiobutton(self.mainWindow, text="Octal", width = "10", variable=OptVar, indicatoron=0, value=8).place(x=115, y=15)
opt3 = Radiobutton(self.mainWindow, text="Decimal", width = "10", variable=OptVar, indicatoron=0, value=10).place(x=215, y=15)
opt4 = Radiobutton(self.mainWindow, text="Hexdecimal", width = "10", variable=OptVar, indicatoron=0, value=16)
opt4.place(x=315, y=15)
opt4.select()

#Buttons
cmdCalcular = Button(self.mainWindow,  text = "Calculate", width = "10", height = "4", command = lambda:Operate()).place(x=15, y=55)
cmdBaseConverter = Button(self.mainWindow,  text = "Base Convert", width = "10", height = "1", command = lambda:BaseConverter()).place(x=15, y=140)

#Labels
lbLine = Label(self.mainWindow, text="__________________________________", font=("Courier New", 8)).place(x=150, y=110)
lbInfo = Label(self.mainWindow, text="", font=("Courier New", 10), justify="left")
lbInfo.place(x=15, y=180)

#Start
self.mainWindow.mainloop()

def quit(self):
if messagebox.askyesno("Azav's Numeric Calculator", "Are you sure you want to quit?"):
self.mainWindow.destroy()
self.mainWindow.quit()
quit()


class BaseConverterGUI():
def __init__(self):
#Main Window
self.mainWindow = Tk()
self.mainWindow.geometry("1100x500")
self.mainWindow.title("Azav's Numeric Calculator")

#TextBoxs
for i in range(2, 14):
exec('self.txt' + str(i) + ' = Text(self.mainWindow, height = "0.6", width = "30", relief = "flat")')
exec('self.txt' + str(i) + '.place(x=90, y=' + str(30 * i) + ')')
for i in range(14, 26):
exec('self.txt' + str(i) + ' = Text(self.mainWindow, height = "0.6", width = "30", relief = "flat")')
exec('self.txt' + str(i) + '.place(x=460, y=' + str(30 * (i - 12)) + ')')
for i in range(26, 37):
exec('self.txt' + str(i) + ' = Text(self.mainWindow, height = "0.6", width = "30", relief = "flat")')
exec('self.txt' + str(i) + '.place(x=830, y=' + str(30 * (i - 24)) + ')')

self.txtBase = Text(self.mainWindow, height = "0.6", width = "10", relief = "flat")
self.txtBase.place(x=575, y=470)
self.txtBase.insert('1.0', '10')

def start(self):
def DoConversion():
self.ConvertBases()

#Labels
for i in range(2, 14):
if i == 2 or i == 8 or i == 10:
color = ', fg = "red"'
else:
color = ''
exec('lb' + str(i) + ' = Label(self.mainWindow' + color + ', text="Base ' + str(i) + ':", font=("Courier New", 10)).place(x=20, y=' + str(30 * i) + ')')
for i in range(14, 26):
if i == 16:
color = ', fg = "red"'
else:
color = ''
exec('lb' + str(i) + ' = Label(self.mainWindow' + color + ', text="Base ' + str(i) + ':", font=("Courier New", 10)).place(x=390, y=' + str(30 * (i - 12)) + ')')
for i in range(26, 37):
exec('lb' + str(i) + ' = Label(self.mainWindow, text="Base ' + str(i) + ':", font=("Courier New", 10)).place(x=760, y=' + str(30 * (i - 24)) + ')')
lbBase = Label(self.mainWindow, text="Base:", font=("Courier New", 10)).place(x=520, y=470)

#Buttons
cmdCalcular = Button(self.mainWindow,  text = "Calculate", width = "25", command = lambda:DoConversion()).place(x=500, y=440)

#Start
self.mainWindow.mainloop()

def ConvertBases(self):
local_var = locals()
BaseGuia = self.txtBase.get('1.0', 'end').strip()
try:
int(BaseGuia)
except:
messagebox.showwarning("Azav's Numeric Calculator", "Base must be a number.")
return
if int(BaseGuia) < 2 or int(BaseGuia) > 36:
messagebox.showwarning("Azav's Numeric Calculator", "Base must be a value beetween 2 and 36.")
return
exec("valor = self.txt" + BaseGuia + ".get('1.0', 'end').strip().upper()", globals(), local_var)
base_decimal = cambio_a_decimal(int(BaseGuia), local_var['valor'])
if base_decimal == "ERROR":
messagebox.showwarning("Azav's Numeric Calculator", local_var['valor'] + " is not valid value for base " + BaseGuia + ".")
return
else:
for i in range(2, 37):
exec("self.txt" + str(i) + ".delete('1.0', 'end')")
exec("self.txt" + str(i) + ".insert('1.0', cambio_de_base(i, base_decimal))")


GUI = Interfaz()
GUI.start()

Lo importante son las dos funciones del inicio, el resto es pura interfaz.

¡Espero le sirva a alguien!
#8
Pese a los comentarios, yo no encuentro que sea tan disparatado lo que está diciendo el tipo. Creo que este post podría resumirse así y tal vez suene más sensato:

CitarTítulo: Tip para mejorar la seguridad de tu contraseña
Cuerpo: Agrega un espacio al final de tu contraseña.

La explicación es simple, cualquiera sea el keylogger empleado (de un RAT, de un phishing, o de un keylogger mismo) un espacio al final siempre pasará más desapercibido y aunque muchos digan "lo primero que pruebo al tener un error de contraseña es agregarle un espacio" creo que no lo hubieran dicho antes de leer este post. Si bien no es un método infalible puede servir en muchos casos.

Esa es mi opinión y creo que es lo que intentaba decir el autor. ¡Saludos!
#9
Hacía tiempo que quería esto. Cuando me instalo en el computador detesto tener que estar mirando el celular y anhelaba poder ver whatsapp desde mi silla. Lo insólito de esto es que para Android ya existían cientos de emuladores y aplicaciones que permitían hacer ver whatapp, pero en iOS era necesario desbloquear el iPhone y todo el royo, luego inventan esto pero no funciona en iOS, todo sigue igual que antes, genial.  >:(
#10
Python / Re:Moviendonos entre archivos con python
Enero 23, 2015, 12:30:11 AM
¡Vaya! No tenía idea de la libreria string. De haberla conocido me hubiera ahorrado bastante tiempo, aunque la verdad nunca se me hubiera ocurrido hacer una lista blanca. Definitivamente era muchísimo más simple así.

Algunos comentarios del código. Los caracteres imprimibles no son sólo letras y dígitos, también son los símbolos, los saltos de linea, etc. Para eso tu librería string cuenta con un atributo más específico aún: string.printable. Lo otro que veo es que en la linea 13 tu buscas un byte en una cadena de strings (osea nunca vas a encontrar un byte en la lista). Usando los métodos .encode() para strings y .decode() para bytes se puede solucionar el asunto. El código modificado y funcional para mí sería:

Código: python
import string

permitidos = string.printable.encode('cp1252')  # Lista blanca DE BYTES

with open("moviendonos.png", "rb") as archivo:
    archivo.seek(1, 2)
    buffer = ""
    for _ in range(27):
        archivo.seek(-2, 1)
        byte = archivo.read(1)
        if byte in permitidos:  # Verificamos si el byte leído está en la lista blanca de bytes.
            buffer += byte.decode('cp1252') #De estarlo, lo transformamos nuevamente a string y lo unimos a buffer.

print(buffer)


Nunca se me hubiera ocurrido hacerlo así, pero claramente era una excelente idea, nos evitamos usar try-except y manejar excepciones que puede ser muy tedioso. ¡Gracias Once!
#11
Python / Re:Moviendonos entre archivos con python
Enero 22, 2015, 05:12:15 PM
Vaya coincidencia que publiques esto porque justo la semana pasada estuve explorando esto en python. Me parece bueno el artículo, bien explicado, sencillo y fácil de entender.

Aprovecho de hacer algunos comentarios. Notar que a diferencia de Once yo uso Python 3.x y él usa 2.x y eso significa que podrían haber varias diferencias.

Primero, en los modos de apertura, cuando uno no escribe la letra b, que significa abrir como binario, automáticamente el archivo se abre como texto (sería lo mismo que escribir una t) y a mi juicio uno no debería abrir nunca un archivo binario en modo texto. Hago este comentario porque en el apartado Leyendo un archivo desde atrás tu abres una imagen .png como texto (ya que no especificaste la letra b) y existen muchos bytes que no pueden leerse como strings, lo que traería como resultado una excepción del tipo UnicodeError. Para ser más claro, si abres el archivo moviendonos.png con un editor hexadecimal y agregas un byte 81 al final del archivo, entonces va a surgir un UnicodeError al intentar leer los últimos bytes en modo texto.

Esto se debe a que existen ciertos bytes (81, 8D, 8F, 90, y 9D) que no tienen un carácter asociado y arrojan un UnicodeDecodeError al intentar transformarlos a string. También hay otro grupo de bytes que si bien tienen caracteres asociados, esos caracteres no son imprimibles (ocurre con casi todos entre el byte 80 y el FF y entre el 00 y el 20) y al intentar imprimirlos van a lanzar un UnicodeEncodeError aunque estos últimos van a depender dónde se quieran imprimir.

La solución es abrir el archivo como binario, leer todos sus bytes y luego intentar pasarlos a string usando el método decode(), publico una parte del código que hice en mi investigación la semana pasada, aplicado al caso:

Código: python
targetfile = open('moviendonos.png', 'rb')
targetfile_data = targetfile.read() #Data como bytes
targetfile.close()
string = targetfile_data.decode('cp1252', 'replace')[-27:] #Data como string.
"""
Me llevo mucho tiempo descubrir que encriptación debia usar para decodificar los bytes. Después de muchas pruebas descubri que era 'cp1252'. Incluso tuve que crear otro programa para descubrirla, en la documentación de python no la encontré.
El modo 'replace' reemplaza los bytes que no tienen caracteres asociados sin embargo quedan los bytes que tienen caracteres asociados no imprimibles.
"""
#Reemplazamos los caracteres no imprimibles por espacios en blanco.
pos_no_imprimibles = []
while True:
try:
print(string)
break
except UnicodeEncodeError as EncError:
PosErr = EncError.args[2] #El error nos dice la posicion del caracter no imprimible
"""
La posicion que nos entrega el UnicodeEncodeError tiene el problema de que en un string considera el '\n' como dos caracteres.
De modo que si el caracter no imprimible es \CNI y tenemos el string "\n\CNI", segun UnicodeEncodeError la posicion de \CNI es 2, mientras que la posicion real es 1.
Este es un error que demoré mucho en descubrir y para repararlo es necesario este codigo.
"""
contador = 0
result = -1
while True:
result = string[:PosErr - contador].find("\n", result + 1)
if result != -1:
contador += 1
else:
break
PosErr = PosErr - contador
"""Fin del codigo reparador"""
string = string[:PosErr] + " " + string[PosErr + 1:] #Reemplazamos el caracter no imprimible por un espacio


Tal vez me excedí en longitud del comentario pero quería aprovechar de compartir mis investigaciones. Fuera de esas sutilizas esta todo perfecto. ¡Gracias Once!
#12
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola muy buwenas a todos alguien me podria decir un buen entornod e programación para python actual por que yo usaba pythong pero no me funcionaba el raw_input y que tenga para creación de interfaz grafica gracias

Tal vez no te funcionaba el raw_input porque lo tenías configurado para Python 3. Recuerda que en Python 3 raw_input() pasó a llamarse input(), y el input() original se obtiene ahora como eval(input()). No tienes permitido ver los links. Registrarse o Entrar a mi cuenta (PEP 3111)

En cuanto a los IDE, existen muchísimos, acá tienes una gran lista en donde clasifican cuáles integran debuggers o gui builders: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Yo he estado usando el IEP (Interactive Editor for Python) y me va bastante bien.

Espero te sirva, ¡saludos!
#13
Me gusta bastante este tipo de artículos, resulta que no se trata de un tutorial ni de una herramienta, sino de una investigación que da muchas luces para quienes están interesados en el tema. Yo también suelo hacer este tipo de pesquisas pero nunca termino publicándolas por el hecho de que a simple vista no se aplican a nada.

Si bien es algo que ya conocía, coincido con el hecho de que hay que empezar a innovar en la forma de indetectar malware. Así como Themida tuvo sus tiempos mozos y luego murió, lo mismo sucederá con los crypters y hay que adelantarse a ese suceso.

¡Saludos!
#14
¡Increíble! Aún así no le veo la forma para aprovecharlo de manera remota :P , pero en fin, está muy bueno.   
#15
He escuchado que en Python el manejo de hilos es un poco enredado y que tampoco se lleva muy bien con tkinter, el problema que tengo es el siguiente: tengo una clase para la interfaz, y otra clase para un proceso cualquiera (es un proceso que se queda en un while infinito). Inicio primero la clase de la interfaz y luego la clase con el proceso infinito. Luego, mi idea es que cuando se cierre la interfaz, también se termine el proceso infinito y el programa termine. El código simplificado sería así:

Código: python
import time, threading
from tkinter import *
from tkinter import messagebox

finalizar = False

class Interfaz(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)

def run(self):
global finalizar
#Main Window
self.mainWindow = Tk()
self.mainWindow.geometry("200x200")
self.mainWindow.title("My GUI Title")
#Label
lbCommand = Label(self.mainWindow, text="Hola mundo", font=("Courier New", 16)).place(x=20, y=20)
#Start
self.mainWindow.mainloop()
#Cuando se cierre la GUI seteamos finalizar a True
finalizar = True

class ClaseDos(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)

def run(self):
global finalizar
while not finalizar:
print("Loop")
time.sleep(3)

GUI = Interfaz()
GUI.start()
Clase = ClaseDos()
Clase.start()


Cuando hago click en el botón cerrar (en la esquina superior derecha de la GUI) me lanza el siguiente error:

CitarTcl_AsyncDelete: async handler deleted by the wrong thread

No logro entender por qué este error, y en Google no encuentro mucha información útil. ¿Alguien sabe a qué se debe?

¡Saludos!
#16
Estaba esperando los resultados, tenía esperanza de ganar pero Once me superó, ¡felicitaciones Once!

Lo que me extrañó bastante es que de 11 participantes sólo 4 hayan enviados códigos válidos, eso quiere decir que tal vez la instrucciones no se entregaron de manera muy clara o detallada. Hay que mejorar eso la próxima vez.

Respecto a los retos, sigan así, la iniciativa es muy buena. Este primer reto fue bastante sencillo, ideal para que todos pudieran participar, seguramente los siguientes irán siendo un poco más complejos pero es importante que no dejen de lado a mucha gente.

¡Saludos!
#17
Vamos a ver.. Primero intenta redactar mejor tus preguntas, tienes serios problemas de puntuación, de redacción y un uso excesivo de comas, también recuerda separar las ideas en párrafos.

Respecto a lo primero, tu script en python. Si entendí bien, hiciste un archivo py para el cliente y otro para el servidor, de modo de poder establecer conexión entre ellos. ¿Lo hiciste mediante sockets (import socket)?. Luego pasaste el No tienes permitido ver los links. Registrarse o Entrar a mi cuenta a .exe usando algún programa, ¿py2exe u otro, cual?. Finalmente al abrir el cliente.exe tu AV se pone a escanearlo por un largo rato pero.. ¿se establece la conexión? ¿cuando termina de escanearlo qué pasa? Da más información porque así es difícil ayudarte.

Respecto a lo segundo. Nuevamente, si entendí bien, estas preguntando si existe alguna forma de ejecutar un programa desde una extensión distinta a .exe y con un método diferente a usar un zip autoextraible o binders (como han dicho algunos). Las opciones que se me ocurren ahora son:
1. Usar otras extensiones que son reconocidas como archivos ejecutables, por ejemplo: .pif, .com, .src, .bat, .cmd, .dll (aunque este último es un poco especial)
2. Renombrar el archivo.exe a la extensión que tú quieras (por ejemplo archivo.jpg o archivo.mp3) y ejecutarlo desde el CMD (o usando un .bat).
3. Usar un .vbs.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Pues se me ocurre una forma que no he probado y por lo tanto no se si funciona. Lo que hace que algo sea una imagen es la terminacion .jpg, podrias editar el registro de tal forma que al abrir un  .jpg se ejecute el script en lugar de abrirlo con un editor de imagenes.

En respuesta a rollth, como él bien dice una cuarta opción es:

4. Modificar el registro en la clave HKEY_CLASSES_ROOT para que reconozca extensiones (que incluso podrías inventar tú) como archivos ejecutables. Un ejemplo que he hecho ahora rápido es este archivo.reg que agregaría la extensión ".sexo" como una extensión ejecutable (también sirve para extensiones que ya existen, como jpeg, mp4, etc). Y tras añadir esto al registro todos los archivos.sexo son ahora como cualquier .exe.
Código: php
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.sexo]
@="sexofile"
"Content Type"="application/x-msdownload"

[HKEY_CLASSES_ROOT\.sexo\PersistentHandler]
@="{098f2470-bae0-11cd-b579-08002b30bfeb}"

[HKEY_CLASSES_ROOT\sexofile]
@="Application"
"EditFlags"=hex:38,07,00,00
"FriendlyTypeName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,\
  00,6f,00,6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,\
  32,00,5c,00,73,00,68,00,65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,\
  00,2c,00,2d,00,31,00,30,00,31,00,35,00,36,00,00,00

[HKEY_CLASSES_ROOT\sexofile\DefaultIcon]
@="%1"

[HKEY_CLASSES_ROOT\sexofile\shell]

[HKEY_CLASSES_ROOT\sexofile\shell\open]
"EditFlags"=hex:00,00,00,00

[HKEY_CLASSES_ROOT\sexofile\shell\open\command]
@="\"%1\" %*"
"IsolatedCommand"="\"%1\" %*"

[HKEY_CLASSES_ROOT\sexofile\shell\runas]
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\sexofile\shell\runas\command]
@="\"%1\" %*"
"IsolatedCommand"="\"%1\" %*"

[HKEY_CLASSES_ROOT\sexofile\shell\runasuser]
@="@shell32.dll,-50944"
"Extended"=""
"SuppressionPolicyEx"="{F211AA05-D4DF-4370-A2A0-9F19C09756A7}"

[HKEY_CLASSES_ROOT\sexofile\shell\runasuser\command]
"DelegateExecute"="{ea72d00e-4960-42fa-ba92-7792a7944c1d}"

[HKEY_CLASSES_ROOT\sexofile\shellex]

[HKEY_CLASSES_ROOT\sexofile\shellex\ContextMenuHandlers]
@="Compatibility"

[HKEY_CLASSES_ROOT\sexofile\shellex\ContextMenuHandlers\Compatibility]
@="{1d27f844-3a1f-4410-85ac-14651078412d}"

[HKEY_CLASSES_ROOT\sexofile\shellex\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

[HKEY_CLASSES_ROOT\sexofile\shellex\PropertySheetHandlers]

[HKEY_CLASSES_ROOT\sexofile\shellex\PropertySheetHandlers\ShimLayer Property Page]
@="{513D916F-2A8E-4F51-AEAB-0CBC76FB1AF8}"

[HKEY_CLASSES_ROOT\sexofile\shellex\PropertySheetHandlers\{B41DB860-64E4-11D2-9906-E49FADC173CA}]
@=""

[HKEY_CLASSES_ROOT\sexofile\shellex\PropertySheetHandlers\{B41DB860-8EE4-11D2-9906-E49FADC173CA}]
@=""


La verdad hay muchas opciones, pero todas implican de una u otra manera, abrir un archivo capaz de ejecutar código o hacer modificaciones que requieren privilegios (y saltará la UAC  :-X)

Por otra parte tu dices que los AV "ignoran" los archivos con extensiones de imagen o de sonido pero la verdad es que ellos no se fijan en la extensión propiamente tal, sino que cada tipo de archivo comienza de una determinada forma en su cabecera (eso puedes comprobarlo en un editor hexadecimal) y eso es lo que ellos "ven" para definir si se escanea a no. Por esto el método 2 no serviría para evitar que el archivo sea escaneado (eso entiendo yo).

Espero haberte ayudado,
Azav,
#18
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Tu no paras Baku, excelente aporte y muy útil. Una duda, ¿cuando un programa intenta modificar uno de los registros, el WinLockLess da una advertencia del tipo "X programa desea modificar el registro. Permitir - Bloquear", o simplemente lo bloquea sin advertir más nada?

¡Saludos!

Directamente lo bloquea y no le permite que se realicen modificaciones en el registro que se bloqueo, es de muy uso y lo mejor es que es GRATIS.

La verdad hubiera sido mejor que diera una advertencia, así podríamos saber cuándo una aplicación está queriendo modificar el registro y permitirlo en caso de que sea legitima, pero de todas formas se puede activar y desactivar así es que sirve mucho.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Esta bien que no permita que se hagan modificaciones en el registro, pero y los backdoors ya instalados?

Vamos, si un programa detectara todos los malwares instalados no existiría el malware  ::)
#19
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
¡Gracias Baku por compartirlo!, se puede hacer muy buenas interfaces con esto.

Yo también tengo un kit de efectos para VB6 guardado por ahí, si mal no recuerdo tenía para forms traslúcidos, títulos en movimiento y efecto agua.  Si les interesa lo subo también.

¡Saludos!

Me gustaría ver ese tipo de aportes de parte tuya bro, cuando tengas tiempo estaría bueno que lo subas!
Saludos!

Claro, aquí se los dejo. Es un .rar que contiene los siguientes efectos:
+ Efecto agua (muy parecido al que subieron en esta sección hace poco)
+ Imagen como form (me parece que es muy parecido al que subiste tú)
+ Título en movimiento
+ Form traslúcido

Link: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Sin pass  ;)
#20
Tu no paras Baku, excelente aporte y muy útil. Una duda, ¿cuando un programa intenta modificar uno de los registros, el WinLockLess da una advertencia del tipo "X programa desea modificar el registro. Permitir - Bloquear", o simplemente lo bloquea sin advertir más nada?

¡Saludos!