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


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: 1 ... 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 [175] 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 ... 235
1741  Media / Diseño Gráfico / Re: Esta es una foto embrujada, o que? en: 15 Abril 2016, 21:58 pm
Cuando vi que publico que el mismo windows le pone la miniatura me imagine que podría tenerla ya agregada en la metadata de la imagen. por lo visto es una forma de trolearse a las personas.

:https://blogs.msdn.microsoft.com/oldnewthing/20110517-00/?p=10653

eso me dio una idea, pero imagino que ya a algunos se les a ocurrido, puedes llevar tu ejcutable acompañado de una foto y despues extraerle la miniatura que seria algun codigo cifrado.

Saludos!
1742  Media / Diseño Gráfico / Re: Esta es una foto embrujada, o que? en: 15 Abril 2016, 13:08 pm
Este cuento parece crepypasta. No me lo creo, ni siquiera dices que programa usas.
1743  Programación / Programación C/C++ / Re: Ayuda con este programa en: 15 Abril 2016, 05:02 am
Código
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int eval(char c);
  5. int evalPassword(char *pwd);
  6.  
  7. int main() {
  8. if(evalPassword("abCD120%()#/")) {
  9. printf("Cumple con los requisitos\n");
  10. }
  11. else {
  12. printf("No cumple con los requisitos\n");
  13. }
  14. if(evalPassword("AAAAAAAAA")) {
  15. printf("No cumple con los requisitos\n");
  16. }
  17. else {
  18. printf("No cumple con los requisitos\n");
  19. }
  20. }
  21.  
  22. int evalPassword(char *pwd) {
  23. int len = strlen(pwd);
  24. int letras = 0,minusculas = 0,mayusculas = 0,simbolos = 0,r = 0, i = 0,continua = 0;
  25. if(len >= 8 || len <= 12 ) {
  26. i = 0;
  27. while(i < len) {
  28. switch(eval(pwd[i])) {
  29. case 0:
  30. minusculas++;
  31. break;
  32. case 1:
  33. mayusculas++;
  34. break;
  35. case 2:
  36. letras++;
  37. break;
  38. case 3:
  39. simbolos++;
  40. break;
  41. }
  42. i++;
  43. if(i+1 < len) {
  44. if(pwd[i] == pwd[i+1]) {
  45. continua = 1;
  46. }
  47. }
  48. }
  49. if(!continua && minusculas && letras &&letras && simbolos) {
  50. r = 1;
  51. }
  52. }
  53. return r;
  54. }
  55.  
  56. int eval(char c) {
  57. if( ( c>='a' && c<='z' ) ) {
  58. return 0;
  59. }
  60. else {
  61. if( c>= 'A' && c <= 'Z' ){
  62. return 1;
  63. }
  64. else {
  65. if( c>='0' && c<='9') {
  66. return 2;
  67. }
  68. else { //Todos los demas simbolos
  69. return 3;
  70. }
  71. }
  72. }
  73.  
  74. }
  75.  
1744  Seguridad Informática / Análisis y Diseño de Malware / Qbot: ¿Mas informacion, ejemplos? en: 14 Abril 2016, 14:42 pm
Estoy leyendo un reporte sobre Qbot suena bastante interesante, ¿alguien tiene mas info sobre las tecnicas utilizadas?

https://threatpost.com/qbot-malware-morphs-quickly-to-evade-detection/117377/
1745  Programación / Desarrollo Web / Re: Estoy desarrollando un sitio web que trata de rellenar un test... en: 14 Abril 2016, 01:14 am
Pues conocimiento basico de javascript, seria deceable trabajar con jquery, yo recien estoy aprindiendo a usarlo.

si checas esta pagina muestra como hacer una peticion POST o GET al servidor usando jquery

http://www.w3schools.com/jquery/ajax_post.asp

podrias implementar del lado del cliente un contador y cuando pase a la siguiente pregunta. el jquery solicite la siguiente pregunta ( contador + 1  al servidor y una vez recibida la respuesta, mostrarla en pantalla.
1746  Programación / Desarrollo Web / Re: Estoy desarrollando un sitio web que trata de rellenar un test... en: 13 Abril 2016, 22:34 pm
La solución dinámica y del lado del cliente es por supuesto javascript.

Aun asi si quieres implementarlo del lado del servidor tendría que ser mediante muchos archivos separados. o Uno solo que busca una variable Numero en el post o get y muestre la pregunta adecuada a ese numero.

Lo mejor es javascrip para que del lado del cliente no parezca que esta refrescando la pagina.
1747  Programación / Programación C/C++ / Re: Punteros dobles / Punteros a puntero. en: 13 Abril 2016, 14:45 pm
Buen dia.

Entiendo lo que dices, en su momento yo tambien no entendia los apuntadores pero como lo mencione es una de las mejores caracteristicas del lenguaje.

Asumi erroneamente por tu pregunta (Dobles apuntadores) que ya sabias lo que es un apunador.

Un apuntador independientemente del tipo de variable que sea, es una variable que apunta a una direccion de memoria.
1748  Programación / Programación C/C++ / Re: Punteros dobles / Punteros a puntero. en: 13 Abril 2016, 07:10 am
Un beneficio de utilizar dobles puntero dependiendo de lo que vallas a hacer con tu programa es hacer mejor uso de memoria dinamica.

Hace unos dias participe en el siguiente tema    
Re: Sistema de cifrado por lote de texto plano


Deje el codigo y utliza dobles punteros para almacenar unas listas de longitud dinámica cada lista.

El detalle que si los usas mal y/o no asginas y/o liberas memoria incorrectamente terminaras haciendo un completo desmadre y posiblemente el programa termine colgándose.

Imaginate esto, quieres hacer un programa que almacene las calificaciones de todos los alumnos de una escuela para despues hacer cualquier otro proceso con ellos.

Código
  1. int **calificaciones;

Estamos de acuerdo que la instrucción anterior solo "reserva" en la pila un espacio para guardar un apuntador.

Código
  1. int i,j;
  2. int *alumnosXsalon;
  3. int **calificaciones;

Mientras tanto en la pila se muestra asi (Uso 4 bytes para los int, y para los apuntadores asumo que estamos en un sistema x86):

Pila:
Código:
[4 bytes variable calificaciones] << === Un apuntador doble
[4 bytes variable alumnosXsalon] <<=== Un apuntador
[4 bytes variable j]
[4 bytes variable i]


Asignamos memoria para nuestra variable calificaciones Asumimos que son 30 salones, incluso se podria ser variable menos salones o mas salones incluso mil o un millon suponiendo que hay memoria suficiente no sera problema reservarla.

Código
  1. calificaciones = calloc(30,sizeof(int*));
  2.  

Como mencione si el apuntador es de 4 bytes, se nos devolvera una direccion de memoria de longitud 30x4 bytes y como es la funcion calloc la memoria esta limpia esto es los 120 bytes estaran en 0 cada uno.

calificaciones => [Bloque de 120 continuos]

ahora bien la variable calificaciones apunta a un espacio en memoria de 120 bytes donde podemos guardar lo que queramos, pero siguiendo con el ejemplo de apuntadores damos por hecho que cada 4 bytes es un apuntador a otra direccion de memoria (Actualmente no apuntan a ningun lugar ya que no hemos inicializado esos 30 apuntadores).

Como es un ejemplo didactico supondre que alumnosXsalon ya esta inicializado y es un arreglo 30 de enteros y cada uno indica la cantidad de alumnos en cada salon por ejemplo

alumnosXsalon = {20, 30, 10 , 24, 12, 3, 8, 18 , .....}

Ahora vamos a inicializar esos 30 apuntadores:

Código
  1. i = 0
  2. while(i < 30) {
  3. calificaicones[i] = calloc(alumnosXsalon[i],sizeof(int));
  4. i++;
  5. }
  6.  

Con esto logramos reservamos la memoria para todas las calificaciones.

calificaciones ==>> [120 bytes, cada 4 bytes es un apuntador a otra segmento de memoria]

o ma claro aun

calificaciones => [[1ros apuntador => 20 enteros],[2do apuntador => 30 enteros], .... ]

Y ahora solo queria escribir las cientos de calificaciones en sus respectivos espacios asignados

Para entenderlo mejor ha que aprender a depurar un poco el código y mostrar las direcciones de memoria sus valores antes y depues asi como a donde estan apuntando.

Si dominas esto entenderas muy bien los apuntadores lo cual es una de las mejores caracteristicas del lenguaje C

Ejemplo comentado:
Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int main() {
  5. int i,j;
  6. int alumnosXsalon[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};
  7. int **calificacion;
  8. printf("i esta en 0x%.8x: [%i]\n",&i,i);
  9. printf("j esta en 0x%.8x: [%i]\n",&j,j);
  10. printf("alumnosXsalon esta en 0x%.8x: => %X\n",&alumnosXsalon,alumnosXsalon);
  11. printf("calificacion esta en 0x%.8x: => %X aun no se reserva memori\n",&calificacion,calificacion);
  12. calificacion = calloc(30,sizeof(int*));
  13. printf("calificacion esta en 0x%.8x: => %X ya se reservo la memoria\n",&calificacion,calificacion);
  14. i=0;
  15. while(i < 30) {
  16. printf("Reservado %i bytes\n",(alumnosXsalon[i]*sizeof(int)));
  17. calificacion[i] = calloc(alumnosXsalon[i],sizeof(int));
  18. printf("calificacion[%i] esta en 0x%.8x: => %X un segmento de %i bytes \n",i,calificacion + i,calificacion[i],(alumnosXsalon[i]*sizeof(int)));
  19. i++;
  20. }
  21. }
  22.  

Salida

Código:
i esta en 0xbfbfe834: [0]
j esta en 0xbfbfe830: [0]
alumnosXsalon esta en 0xbfbfe7b8: => BFBFE7B8
calificacion esta en 0xbfbfe7b4: => 1 aun no se reserva memori
calificacion esta en 0xbfbfe7b4: => 2880B080 ya se reservo la memoria
Reservado 4 bytes
calificacion[0] esta en 0x2880b080: => 2880D050 un segmento de 4 bytes
Reservado 8 bytes
calificacion[1] esta en 0x2880b084: => 2880D058 un segmento de 8 bytes
Reservado 12 bytes
calificacion[2] esta en 0x2880b088: => 2880E030 un segmento de 12 bytes
Reservado 16 bytes
calificacion[3] esta en 0x2880b08c: => 2880E040 un segmento de 16 bytes
Reservado 20 bytes
calificacion[4] esta en 0x2880b090: => 2880F020 un segmento de 20 bytes
Reservado 24 bytes
calificacion[5] esta en 0x2880b094: => 2880F040 un segmento de 24 bytes
Reservado 28 bytes
calificacion[6] esta en 0x2880b098: => 2880F060 un segmento de 28 bytes
Reservado 32 bytes
calificacion[7] esta en 0x2880b09c: => 2880F080 un segmento de 32 bytes
Reservado 36 bytes
calificacion[8] esta en 0x2880b0a0: => 28810040 un segmento de 36 bytes
Reservado 40 bytes
calificacion[9] esta en 0x2880b0a4: => 28810070 un segmento de 40 bytes
Reservado 44 bytes
calificacion[10] esta en 0x2880b0a8: => 288100A0 un segmento de 44 bytes
Reservado 48 bytes
calificacion[11] esta en 0x2880b0ac: => 288100D0 un segmento de 48 bytes
Reservado 52 bytes
calificacion[12] esta en 0x2880b0b0: => 28811040 un segmento de 52 bytes
Reservado 56 bytes
calificacion[13] esta en 0x2880b0b4: => 28811080 un segmento de 56 bytes
Reservado 60 bytes
calificacion[14] esta en 0x2880b0b8: => 288110C0 un segmento de 60 bytes
Reservado 64 bytes
calificacion[15] esta en 0x2880b0bc: => 28811100 un segmento de 64 bytes
Reservado 68 bytes
calificacion[16] esta en 0x2880b0c0: => 28812060 un segmento de 68 bytes
Reservado 72 bytes
calificacion[17] esta en 0x2880b0c4: => 288120B0 un segmento de 72 bytes
Reservado 76 bytes
calificacion[18] esta en 0x2880b0c8: => 28812100 un segmento de 76 bytes
Reservado 80 bytes
calificacion[19] esta en 0x2880b0cc: => 28812150 un segmento de 80 bytes
Reservado 84 bytes
calificacion[20] esta en 0x2880b0d0: => 28813040 un segmento de 84 bytes
Reservado 88 bytes
calificacion[21] esta en 0x2880b0d4: => 288130A0 un segmento de 88 bytes
Reservado 92 bytes
calificacion[22] esta en 0x2880b0d8: => 28813100 un segmento de 92 bytes
Reservado 96 bytes
calificacion[23] esta en 0x2880b0dc: => 28813160 un segmento de 96 bytes
Reservado 100 bytes
calificacion[24] esta en 0x2880b0e0: => 28814080 un segmento de 100 bytes
Reservado 104 bytes
calificacion[25] esta en 0x2880b0e4: => 288140F0 un segmento de 104 bytes
Reservado 108 bytes
calificacion[26] esta en 0x2880b0e8: => 28814160 un segmento de 108 bytes
Reservado 112 bytes
calificacion[27] esta en 0x2880b0ec: => 288141D0 un segmento de 112 bytes
Reservado 116 bytes
calificacion[28] esta en 0x2880b0f0: => 2880B100 un segmento de 116 bytes
Reservado 120 bytes
calificacion[29] esta en 0x2880b0f4: => 2880B180 un segmento de 120 bytes

Respondiendo tus preguntas:

Por ahí leí que los punteros dobles se asemejan a los array de 2 dimensiones, es esto cierto y porque?.

No del todo, depende de como se usen.
Si declaras un array de 2 dimenciones por ejemplo 15x10 es y sera siempre de 15x10.
En cambio si apuntador lo declaras de 15 x 10 es en ese momento de 15x10 y se podria quedar asi o modificarse, liberar la memoria asginar algunos elementos (digamos los primeros 5) a una longitud de solo 7 por ejemplo. Si se asemejan paro para fines didacticos pero los apuntadores son mejores. Ve el ejemplo anterior tengo un apuntador dinamico de 30 apuntadores apuntado a 1, 2, 3, 4, .. respectivamente,
1749  Seguridad Informática / Análisis y Diseño de Malware / Decrypter vs Ransomware en: 12 Abril 2016, 02:43 am
Cifrar y descifrar la eterna lucha.

Lista de Decrypter:
  • Petya


Si bien la llegada al Internet de un nuevo malware de la clase de los ransomware no es nada nuevo.

Lo que es motivo de celebrar es que cada vez mas se escucha sobre herramientaa que decrifran los archivos sin nececidad de pagar a los ciber-extorcionadores.

Leyendo hoy las noticias salta que ya hay metodo conocido para recuperar el MBR infectado por PETYA esta.

¿Falla de Petya?
Dejar las llaves de decifrado en el disco duro.

Petya se caracteriza por dejar intactos los archivos pero inhabilitar el acceso a la computadora pidiendo pago a cambio de la clave.

Si bien este tipo de tecnica (alterar el MBR) era mas conocida hace una o dos decadas debido al gran flujo de uso de diskttes ya que eran mas propensos a infectarse de ese tipo de virus de arranque. Pues la tecnica volvio con PETYA, si bien ya sea por flojera de utilizar alguna libreria para el cifrado o facilidad de implementar codigo en ensamblador para modificar el MBR

Se cometio la pereza de dejar la llave en el disco.

¿Como se puede mejorar PETYA?
Implementar algunas rutinas critograficas en ensamblador.
Creo que para este tipo de ransomware no es vital utilizar llaves RSA de gran cantidad de bits asi que implementar algo utilizando una menor cantidad de bits no parace mala idea.

La otra y mas importante es No dejar las llaves en el disco duros si bien este ha sido el talon de Aquiles de muchos ransomwares mal diseñados, parece ser que dada la vida tan corta que tienen los servidores de control dejar las llaves en el disco a sido necesario.
1750  Seguridad Informática / Criptografía / Generacion de ID de llave publica en: 10 Abril 2016, 16:01 pm
Buen dia.

¿Cual es la mejor forma de generar un ID?

Les dejo mi metodo y si ustedes tienen otro podria ser muy didactivo explicarlo por aqui

En el proyecto en el que estoy trabajando necesita generar un ID por usuario que instale la aplicacion.

-Muiltiplataforma
-Comunicacion cifrada end-to-end (Lo que esta de moda)

En fin el programa genera  un unico par de claves RSA para la criptografia asimetrica y genero llaves aleatorias para la criptografia simetrica en fin...

Genero un sha512 iterativo N cantidad de veces (mas de 4000) del archivo de la clave publica y este devuelve 64 bytes. Esta es mi ID del usuario y en teoria  no deberia de repetirse nuca...  :rolleyes: :rolleyes: :rolleyes: :rolleyes:

Tal como lei en el documento de whatsapp ellos hacen una conversion solo de los ultimos 30 bytes de la clave y luego pasan cada 5 bytes a un entero sin signo y a ese entero le sacan modulo 100000.

Yo por mi parte copio de 8 en 8 bytes al entero sin signo:

Código
  1. int main() {
  2. int j;
  3. unsigned char *temp;
  4. unsigned long long t;
  5. temp = md_file(GCRY_MD_SHA512,"llavePublica");
  6. j = 0;
  7. printf("ID: ");
  8. while(j < 64) {
  9. printf("%.2x",temp[j++]);
  10. }
  11. printf("\n");
  12. printf("long long :%i\n",sizeof(unsigned long long));
  13. j = 0;
  14. t = 0;
  15. while(j < 8) {
  16. memcpy(&t,temp + (j*8),8);
  17. printf("%llu\n",t);
  18. t = 0;
  19. j++;
  20. }
  21. free(temp);
  22. }
  23.  

Salida:

Código:
ID: d97a302e486bd15f55d4a2e6f7eba511042b0ee4ae118596584393e002103dd65e9d1c822963d945e17d4c24d9b7b6ad0fd54a7a03acea32bf899e22c7c0576b
long long :8
6904417661492427481
1271681919760913493
10846094720439823108
15437512702239654744
5033163088490962270
12517394357567651297
3668933977383294223
7734862846543956415
Páginas: 1 ... 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 [175] 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 ... 235
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines