elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 143
21  Foros Generales / Foro Libre / Re: Hasta siempre Papá en: 21 Marzo 2020, 20:30 pm
Mucho ánimo amigo.
Lo siento mucho.
22  Foros Generales / Dudas Generales / Re: [Python] ¿Qué me recomiendan para aprender?. en: 19 Marzo 2020, 21:01 pm
También te recomiendo este enlace de Curso de Python desde cero realizado por Ricardo Narvaja. Aunque el curso tiene años y en algunos capítulos está orientado a ingeniería inversa, el curso te servirá.
http://ricardonarvaja.info/WEB/OTROS/PYTHON%20DESDE%20CERO/
23  Programación / Ingeniería Inversa / Re: Ayuda!!!! en: 9 Enero 2020, 19:31 pm
Al inicio de este foro tienes 5 mensajes fijos con muchísima información y miles de tutoriales para iniciarte en la ingeniería inversa. Para buscar información que te pueda ayudar debes intentar saber con qué ha sido compilado.
¿Qué te dice RDG Packer Detector? ¿Te deja abrirlo con OllyDBG o x64dbg? Pon una captura del código desensamblado en el inicio (Entry Point), igual tenemos una idea...
24  Programación / Ingeniería Inversa / Re: [Reto] Crackme Loki-Mouse Flamer en: 30 Agosto 2019, 00:01 am
Bueno, para que la gente se anime a estudiar el Crackme me he propuesto analizarlo y crear un sencillo Keygen.
Para el keygen, aunque valen muchos caracteres, solo voy a usar números para evitar poner muchas condiciones en el código fuente. Pongo un enlace al final con el código fuente del keygen, el exe del mismo y una copia del crackme por si desapareciera en un futuro.

Carga el crackme en un depurador, yo lo hice con varios, pero para explicarlo lo hago con OllyDBGv2 en W10. Lo primero que llama la atención es que pesa muchísimo para el poco código que lleva, a ver si Flamer nos comenta el porqué.

Encontrar el código es sencillo buscando en las strings: botón dcho > search for > all referenced strings. Así se llega rápido al código.

Explicación del código
Código
  1. 00401700  cmp eax,0A
Nos indica que el serial tiene que tener exactamente 10 caracteres:
XXXXXXXXXX

El primer valor, voy a poner uno cualquiera: "1" = 31h
1XXXXXXXXX

Aquí trabaja con valor1 y valor6:
Código
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. 00401750  |.  83E8 60       sub eax,60
  4. 00401753  |.  8945 DC       mov dword ptr ss:[ebp-24],eax
  5. 00401756  |.  837D DC 08    cmp dword ptr ss:[ebp-24],8
  6. 0040175A  |.  0F8E 62020000 jle 004019C2

En esa parte hace estas operaciones (todo en HEX):
valor6 + valor1 - 60 > 8; valor6 + 31h - 60h > 8h;
valor6 > 37h; Por lo tanto, valor6 = 38h ("8") o 39h.
1XXXX8XXXX

El valor 2 es un número aleatorio entre 0 y 9. Pongo por ej 7:
17XXX8XXXX

Un poco más adelante, empieza a realizar un montón de operaciones con los valores 1, 2, 6 desde 4017E3 hasta 401818. En este ejemplo, poniendo en el depurador el serial anterior, y BP en 401818, el resultado en eax de esas operaciones es: 6

Ahora volvemos a analizar un poco más arriba y verás que resta 30h al valor5 en 4017D7 y la comparación en 401821 compara el 6 del párrafo anterior con esto último:
valor5 = 6 + 30;
valor5 = 36h = "6"
17XX68XXXX

valor3 tiene que ser menor que 33h, mira en:
Código
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. 00401861  |.  837D CC 32    cmp dword ptr ss:[ebp-34],32
  4. 00401865  |.  7F 73         jg short 004018DA
valor3 puede ser 32h("2"), 31h("1") o 30h("0")
172X68XXXX

valor4 tiene que ser mayor que 35h, mira en:
Código
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. 00401867  |.  837D C8 35    cmp dword ptr ss:[ebp-38],35
  4. 0040186B  |.  7E 6D         jle short 004018DA
valor4 puede ser 36h, 37h, 38h o 39h.
172668XXXX

Y los 4 últimos caracteres pueden ser cualquier valor:
172668FORO

Dejo el código fuente que he realizado para el keygen, en Visual C++ 2019:
Código
  1. // Keygen Loki-Mouse.cpp
  2. //
  3.  
  4. #include <iostream>
  5. #include<time.h>
  6. #include <sstream>
  7.  
  8. using namespace std;
  9.  
  10. int codigo_asm(int num1, int num2)
  11. {
  12. int resultado;
  13. _asm
  14. {
  15. mov eax, num1
  16. mov edx, num2
  17. imul edx
  18. sar edx, 2
  19. mov eax, num1
  20. sar eax, 0x1F
  21. sub edx, eax
  22. mov num2, edx
  23. shl edx, 2
  24. add edx, num2
  25. add edx, edx
  26. mov eax, num1
  27. sub eax, edx
  28. add eax, 0x30
  29.  
  30. mov resultado, eax
  31. }
  32.        return resultado;
  33. }
  34.  
  35. int main()
  36. {
  37. int numHex = 0x00;
  38. int hexCaracter[11] = {};
  39. string caracter[11] = {};
  40.  
  41. srand(time(NULL)); //Inicializa números aleatorios
  42.  
  43. cout << "Keygen Crackme Loki-Mouse\n==========================\n\n";
  44.  
  45. cin.clear();
  46. cout << "Para generar autom\240ticamente un serial v\240lido, pulsa una tecla...";
  47. cin.ignore();
  48.  
  49. // El serial tiene que tener exactamente 10 caracteres
  50.  
  51. // ----------------
  52. // Caracteres 1 y 6
  53. // ----------------
  54.  
  55. // El carácter 1 va a ser un número aleatorio entre el 0(30hex) y 9(39hex):
  56. hexCaracter[1] = 0x30 + rand() % (10);
  57.  
  58. // El carácter 6 responde a esta fórmula: c6 + c1 - 60 > 8; c6 > 68 - c1;
  59. hexCaracter[6] = 0x69 - hexCaracter[1]; // Este es el primer valor válido
  60. hexCaracter[0] = 0x39 - hexCaracter[6]; //Número de valores también válidos hasta el 9 (39h)
  61. if (hexCaracter[0] != 0)
  62. {
  63. hexCaracter[6] = hexCaracter[6] + rand() % hexCaracter[0]; //Calcula aleatoriamente un valor válido entre todos los posibles.
  64. }
  65.  
  66. // ----------
  67. // Caracter 2
  68. // ----------
  69. // Un número aleatorio entre 0 y 9
  70. hexCaracter[2] = 0x30 + rand() % (10);
  71.  
  72. // -----------------------------------------
  73. // Realiza operaciones en ASM con C1, C2, C6
  74. // -----------------------------------------
  75. hexCaracter[0] = hexCaracter[2] + hexCaracter[1] + hexCaracter[6] - 0x90;
  76.  
  77.  
  78. // ----------
  79. // Caracter 5
  80. // ----------
  81. hexCaracter[5] = codigo_asm(hexCaracter[0], 0x66666667);
  82.  
  83. // ----------
  84. // Caracter 3
  85. // ----------
  86. // Tiene que ser < 33h
  87. hexCaracter[3] = 0x30 + rand() % (2);
  88.  
  89. // ----------
  90. // Caracter 4
  91. // ----------
  92. // Tiene que ser > 35h
  93. hexCaracter[4] = 0x36 + rand() % (3);
  94.  
  95. // --------------------
  96. // Caracter 7, 8, 9, 10
  97. // --------------------
  98. // Cualquiera, yo voy a usar solo números, pero vale cualquier otro carácter
  99. for (int i = 7; i < 11; i++)
  100. {
  101. hexCaracter[i] = 0x30 + rand() % (10);
  102. }
  103.  
  104.        // Convertir números en cadena de texto y mostrarlos en pantalla
  105. for (int i = 1; i < 11; i++)
  106. {
  107. caracter[i] = hexCaracter[i];
  108.        cout << caracter[i];
  109. }
  110.  
  111. cout << "\n";
  112. system("pause");
  113. return 0;
  114. }
  115.  

Y aquí la descarga:
Descargar Keygen desde Mega

Muchas gracias Flamer por el reto
25  Programación / Ingeniería Inversa / Re: Se Puede Sacar Codigo 2 .exe en: 7 Junio 2019, 15:18 pm
Como dice .:UND3R:. tienes que mostrarnos tus avances, tus archivos hacen saltar muchos antivirus y un/a usuario/a ha reportado este hilo.
Si no muestras tus avances, en un tiempo tendremos que eliminar tus descargas por posible malware.
26  Programación / Ingeniería Inversa / Re: KeyGenME fary - v1.0 en: 13 Enero 2019, 22:43 pm
¡¡Excelente trabajo Geovane!!
Tu punto de vista ha sido muy instructivo e interesante.

Gracias a tu idea se me ha ocurrido lo siguiente que no se si se podrá generalizar para otros caracteres o tamaños de serial.

Partimos del último carácter que me invento: 8 que es 38hex
Inicio: F6C53333

Código
  1. F6C53333 - 38   = F6C532FB; //38hex es el carácter 8
  2. ROL F6C532FB, D = A65F7ED8
  3.  
  4. Y ahora voy restanto 7/8 bits como tu mencionas:
  5. A65F7ED8 - 58   = A65F7E80; //58hex es el caracter X
  6. ROL A65F7E80, D = EFD014CB
  7. EFD014CB - 4B   = EFD01480; //4Bhex es el caracter K
  8. ROL EFD01480, D = 02901DFA
  9. 02901DFA - 7A   = 02901D80; //7Ahex es el caracter z
  10. ROL 02901D80, D = 03B00052
  11. 03B00052 - 52   = 03B00000; // 52hex es el caracter R
  12. ROL 00000076, D = 00000076
  13. 00000076 - 76   = 00000000; //76hex es el caracter v

Por lo tanto, el serial válido es vRzKX8

Un saludo
Good work!
27  Programación / Ingeniería Inversa / Re: KeyGenME fary - v1.0 en: 13 Enero 2019, 11:45 am
Bueno, he creado este simple generador de claves para 6 caracteres, usando solo la zona 4B. Unicamente el usuario debe escribir el primer carácter de (20hex hasta 7Fhex) y el resto lo calcula el programa.
Para no usar registros EDI ni nada por el estilo, he escrito la fórmula en un Excel. Os lo pongo en descarga.


Descarga del Excel:
https://mega.nz/#!i5YwSYLI!koy5ybfMZG1Op0v7-Ui8c3NdNIsvjU5R2tQW_4pOfuQ

Un saludo.
No puedo dedicar nada más de tiempo a este keygen. Espero el keygen de Geovane, que es muy interesante lo que explicó.
28  Programación / Ingeniería Inversa / Re: KeyGenME fary - v1.0 en: 13 Enero 2019, 00:16 am
La verdad que esta clase de retos te distrae de la tareas cotidianas, así que he decidido distraerme un poco y hacer un keygen (generador de claves) para todos los seriales SOLO de 6 caracteres. Este keygen no lo he querido programar (sería muy sencillo) y lo voy a hacer escrito para que todo el mundo sin conocimientos de programación pueda usarlo.

Solo he utilizado caracteres imprimibles desde el valor 20hex hasta el 7Fhex, los demás los he obviado.
¿Cómo lo he resuelto? Pues hice directamente en OllyDBG fuerza bruta, me fui a cenar y después de cenar estudié los resultados que el script me dejó en memoria, así que es un keygen post-estudio.

Empecemos.
1º CARÁCTER
El que el usuario quiera. Voy a poner, por ejemplo, la letra v que equivale a 76hex. Los guiones siguientes, aunque puedan valer, en este caso no sirven y los pongo únicamente para mostrar los caracteres pendientes.
v-----

Antes de continuar con los siguientes caracteres, es necesario saber que según el valor hex de este primer caracter, existen 3 zonas.
PRIMERA ZONA. ZONA 4A. Del valor 68h al 7Fh (a.i.)
SEGUNDA ZONA. ZONA 4B. Del valor 1Fh al 7Fh (a.i.)
TERCERA ZONA. ZONA 4C. Del valor 1Fh al 27h (a.i.)

Para que sea sencillo de entender, pongo el ejemplo de la letra v=76h. El valor 76h puede estar:
-En la zona 4A (Del 68h al 7Fh) y
-En la zona 4B (Del 1Fh al 7Fh) pero no puede estar en la zona 4C.

2º y 5º CARACTERES
Estos caracteres son siempre fijos y corresponden a las letras R y X. Por lo tanto, ya tenemos:
vR--X-

3º CARÁCTER
Solo puede ser o los dos puntos : o la letra zeta minúscula (z).
Solo hay una condición:
Si el primer carácter es par, el 3º carácter es la letra zeta minúscula (z), si no : .
Por lo tanto, el primer carácter es la v que equivale a 76hex y es par, así que el 3º carácter es una z. Ya tenemos:
vRz-X-

4º CARÁCTER
El 4º carácter corresponde con la Zona. Así que podemos tener 2 casos para ZONA 4A (J) y ZONA 4B (K).
vRzJX-
vRzKX-

6º Y ÚLTIMO CARÁCTER
Realizamos las operaciones de cifrado del serial hasta el último carácter, así:
PRIMER SERIAL: vRzJX-
v = 76h
R = 52h
z = 7Ah
J = 4Ah
X = 58h

Código
  1. EDI = 0    ; EDI = 00000000h
  2. ADD EDI, 76; EDI = 00000076h
  3. ROR EDI, D ; EDI = 03B00000h
  4. ADD EDI, 52; EDI = 03B00052h
  5. ROR EDI, D ; EDI = 02901D80h
  6. ADD EDI, 7A; EDI = 02901DFAh
  7. ROR EDI, D ; EDI = EFD01480h
  8. ADD EDI, 4A; EDI = EFD014CAh
  9. ROR EDI, D ; EDI = A6577E80h
  10. ADD EDI, 58; EDI = A6577ED8h
  11. ROR EDI, D ; EDI = F6C532BBh

Y ahora tan sencillo como restar la semilla F6C53333 con ese valor:
F6C53333 - F6C532BB = 78hex
6º carácter = 78h (x), por lo tanto, primera contraseña válida:
vRzJXx

SEGUNDO SERIAL: vRzKX-
v = 76h
R = 52h
z = 7Ah
K = 4Bh
X = 58h

Código
  1. EDI = 0    ; EDI = 00000000h
  2. ADD EDI, 76; EDI = 00000076h
  3. ROR EDI, D ; EDI = 03B00000h
  4. ADD EDI, 52; EDI = 03B00052h
  5. ROR EDI, D ; EDI = 02901D80h
  6. ADD EDI, 7A; EDI = 02901DFAh
  7. ROR EDI, D ; EDI = EFD01480h
  8. ADD EDI, 4A; EDI = EFD014CBh
  9. ROR EDI, D ; EDI = A65F7E80h
  10. ADD EDI, 58; EDI = A65F7ED8h
  11. ROR EDI, D ; EDI = F6C532FBh

F6C53333 - F6C532FB = 38hex = 8
Segundo serial válido: vRzKX8

Otro ejemplo rápido sin tanta explicación:
3-----
solo está en ZONA 4B: 3--K--
2 caracteres fijos: 3R-KX-
impar: 3R:KX-

F6C53333 - F6C532D9 = 5Ah = Z
Serial válido: 3R:KXZ
29  Programación / Ingeniería Inversa / Re: KeyGenME fary - v1.0 en: 10 Enero 2019, 13:39 pm
bruteforce, ¿No?,  yo probé  con 4 caracteres y no me saco ni una válida jajajaja :(


Yo probé ayer un código rápido por fuerza bruta y con 5 caracteres (estuvo un buen rato) tampoco encontró nada válido. No sé si se podrá estudiar bien la rutina e intentar acotar para encontrar seriales válidos. Para los que empiezan es muy entretenido e interesante...
30  Programación / Ingeniería Inversa / Re: Eliminar datos permanentes de disco. (Conceptos básicos) en: 9 Enero 2019, 09:51 am

Si grabo todos los bytes del disco en cero, nada se recupera, ¿verdad?

...

"Hay que saber con qué datos sobreescribimos la información almacenada, no es lo mismo hacerlo todo con 0 o con 1. El 0 no significa que la carga electromagnética desaparezca completamente. Un adversario con los conocimientos y el equipamiento necesario podría llegar a reconstruir parte de la información gracias a técnicas que permiten distinguir entre si el dato era un 0 o un 1 convertido a 0"
"Las aplicaciones de borrado seguro utilizan como mínimo dos pasadas: una con datos semialeatorios y otra alternando bloques de ceros y unos". Esto lo dijo Jorge Soydelbierzo.

Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 143
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines