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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18
71  Seguridad Informática / Criptografía / I lost my OPENBSD FDE Password en: 31 Agosto 2016, 15:42 pm
Demostracion de como recuperan el block key material para descifrar el Disco Duro


Código
  1. func main() {  
  2.    scmKey := decode(scmKey)
  3.    salt := decode(salt)
  4.  
  5.    maskkey := pbkdf2.Key([]byte("password"), salt, rounds, 32, sha1.New)
  6.  
  7.    // AES-ECB-256_decrypt(k=maskkey, scm_key) = scr_key
  8.    a, err := aes.NewCipher(maskkey)
  9.    if err != nil {
  10.        log.Fatal(err)
  11.    }
  12.    for i := 0; i < len(scmKey); i += a.BlockSize() {
  13.        a.Decrypt(scmKey[i:i+a.BlockSize()], scmKey[i:i+a.BlockSize()])
  14.    }
  15.  
  16.    // HMAC-SHA1(k=maskkey, scm_key) == sch_mac
  17.    h := sha1.Sum(maskkey)
  18.    mac := hmac.New(sha1.New, h[:])
  19.    mac.Write(scmKey)
  20.    expectedMAC := mac.Sum(nil)
  21.  
  22.    fmt.Print(hex.Dump(expectedMAC))
  23. }

El link con la lectura completa en Ingles:

https://blog.filippo.io/so-i-lost-my-openbsd-fde-password/
72  Foros Generales / Foro Libre / ¿Algoritmo? de Sistema de Votación en: 30 Agosto 2016, 16:40 pm
Hola que tal estoy desarrollando una plataforma, donde se requiere cierta moderación de contenido,  asi como el foro, con moderadores de distintos Rangos y privilegios....

El detalle es que esta plataforma es semi-automata, entonces estoy buscando si existe algún sistema de votación o similar para realizar ciertas Acciones.

Por ejemplo si quiero aprobar cierto contenido y/o eliminarlo o lo que fuese, la idea seria que lo moderadores votaran por realizar X acción, pero como NO siempre van a estar todos los moderadores en linea, la idea es que el sistema tenga un ALGORITMO que con determinado numero de votos y variables, determinara si realizar la acción o no.

Puedo realizar mi propio algoritmo con los parámetros que necesito, pero la idea es ver si existe algo parecido.

Es como una especie de Democracia Ateniense

Saludos!
73  Programación / Programación C/C++ / Sorteo/Loteria Simulaciones y cambios de Variable en: 29 Agosto 2016, 18:36 pm
El siguiente codigo simula un Sorteo/Loteria 10 Millones de veces tomando 30 muestras de estas simulaciones obtenemos un Valor de veces que se gano el sorteo.

El jugador elige un numero y en cada ciclo se sortean otro Numero si el numero es igual al del jugador este GANA.


Se realizan 2 Tipos de Sorteos:

  • Uno donde el jugador conserva el MISMO numero todas las simulaciones.
  • El otro donde el jugador CAMBIA el numero en cada simulación

Salida Obtenida en 4 ejecuciones:

Código:
Total de veces ganador CON cambio de Variable 30636/(300000000 Sorteos)
Total de veces ganador SIN cambio de Variable 27675/(300000000 Sorteos)
Total de veces ganador CON cambio de Variable 30396/(300000000 Sorteos)
Total de veces ganador SIN cambio de Variable 36592/(300000000 Sorteos)
Total de veces ganador CON cambio de Variable 30700/(300000000 Sorteos)
Total de veces ganador SIN cambio de Variable 36890/(300000000 Sorteos)
Total de veces ganador CON cambio de Variable 30635/(300000000 Sorteos)
Total de veces ganador SIN cambio de Variable 27460/(300000000 Sorteos)

Si Observamos en total son 300 Millones de simulaciones 2 veces en cada ejecución, si vemos el "promedio" se mantiene mas o menos constante cuando SI CAMBIA la variable.

y el "promedio" se varia entre ejecuciones cuando NO CAMBIA la variable.

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4.  
  5. #define MUESTRAS 30
  6. #define SIMULACIONES 10000000
  7. #define MAX 60000
  8.  
  9. int main() {
  10. register int i = 0,j = 0;
  11.  
  12. int elegido,premio, contador = 0;
  13. srand(time(NULL));
  14.  
  15. //Sorteos con cambio de Variable
  16. j = 0;
  17. while(j < MUESTRAS){
  18. i = 0;
  19. while(i < SIMULACIONES) {
  20. elegido = rand() % MAX; // La variable elegida cambia en cada sorteo
  21. premio = rand() % MAX;
  22. if(elegido == premio) {
  23. contador++;
  24. }
  25. i++;
  26. }
  27. j++;
  28. }
  29. printf("Total de veces ganador CON cambio de Variable %i/(%i Sorteos)\n",contador,MUESTRAS*SIMULACIONES);
  30.  
  31.  
  32. //Sorteos SIN cambio de Variable
  33. j = 0;
  34. elegido = rand() % MAX; // La variable no cambia
  35. contador = 0;
  36. while(j < MUESTRAS){
  37. i = 0;
  38. while(i < SIMULACIONES) {
  39. premio = rand() % MAX;
  40. if(elegido == premio) {
  41. contador++;
  42. }
  43. i++;
  44. }
  45. j++;
  46. }
  47. printf("Total de veces ganador SIN cambio de Variable %i/(%i Sorteos)\n",contador,MUESTRAS*SIMULACIONES);
  48. return 0;
  49. }

Esto va de la mano con la siguiente pregunta:

¿Es bueno cambiar siempre de variable?

Tema relacionado:

Demostracion del problema de Monty Hall

Saludos
74  Programación / Programación C/C++ / Optimizar evaluación de juego de TATETI en: 29 Agosto 2016, 14:56 pm
Siguiendo con el tema de :

[C] Duda TATETI

en ese tema puse un codigo para Generar un Arbol de N niveles apartir de una jugada inicial

Ahora toca evaluar todos los nodos (Juegos) para asi poder decidir el mejor movimiento

Dada las siguientes definiciones y estructuras:

Código
  1. #define UNKNOW 0 //Nobody win yet
  2. #define O_WIN 1
  3. #define X_WIN 2
  4. #define DRAW 3
  5. #define ERROR 4
  6.  
  7. struct tablero {
  8. uint8_t juego[3][3];
  9. };
  10.  

Hice esta funcion que evalua las 3 Filas , 3 Columnas y 2 Diagonales. Adicional evaluar si es empate, si todavia nadie gana y si existe alguna discrepancia en el tablero

La pregunta aqui es, ¿Existe una forma mas eficiente de hacer esto?

Me refiero a que se me hace bastante pesado evaluar todas las lineas xD..

NOTA: No he compilado el codigo por lo que puedw tener errores.

Código
  1. uint8_t estatus_juego(struct tablero *t) {
  2. uint8_t e;  //Estatus a devolver
  3. register uint8_t i = 0,j = 0;
  4. uint8_t contador_X,contador_O,casilla;
  5. bool continuar = true;
  6. //Procedemos a validar las 3 Lineas horizontales
  7. i = 0;
  8. while(continuar && i < 3) {
  9. j = 0;
  10. casilla = t->juego[i][j];
  11. j++;
  12. while(continuar && j < 3 && ) {
  13. if(casilla != t->juego[i][j] || !t->juego[i][j]) {
  14. continuar = false;
  15. }
  16. j++;
  17. }
  18. if(continuar){
  19. //si continuar sigue siendo true en este punto el jugador casilla Gana y ya no es necesario evaluar los otros casos
  20. continuar = false; // Establemos continuar como false para que ya no entre al ciclo siguiente
  21. }
  22. else {
  23. //En caso de que continuar sea false, significa que debemos seguir evaluando las lineas restantes
  24. continuar = true // Establemos continuar como true para que si entre al ciclo siguiente
  25. }
  26. i++;
  27. }
  28. if(continuar) {
  29. //Continuamos la evaluacion de las lineas Verticales
  30. i = 0;
  31. while(continuar && i < 3) {
  32. j = 0;
  33. casilla = t->juego[j][i];
  34. j++;
  35. while(continuar && j < 3) {
  36. if(casilla != t->juego[j][i] || !t->juego[j][i] ) {
  37. continuar = false;
  38. }
  39. j++;
  40. }
  41. if(continuar){
  42. //si continuar sigue siendo true en este punto el jugador casilla Gana y ya no es necesario evaluar los otros casos
  43. continuar = false; // Establemos continuar como false para que ya no entre al ciclo siguiente
  44. }
  45. else {
  46. //En caso de que continuar sea false, significa que debemos seguir evaluando las lineas restantes
  47. continuar = true // Establemos continuar como true para que si entre al ciclo siguiente
  48. }
  49. i++;
  50. }
  51. if(continuar) { //Evaluamos las lineas Diagonales
  52. casilla = t->juego[0][0];
  53. if(casilla == t->juego[1][1] && casilla == t->juego[2][2] && casilla != 0) {
  54. if(casilla == 'X') {
  55. e = X_WIN;
  56. }
  57. else {
  58. e = O_WIN;
  59. }
  60.  
  61. }
  62. else {
  63. casilla = t->juego[0][2];
  64. if(casilla == t->juego[1][1] && casilla == t->juego[2][0]  && casilla != 0) {
  65. if(casilla == 'X') {
  66. e = X_WIN;
  67. }
  68. else {
  69. e = O_WIN;
  70. }
  71. }
  72. else {
  73. //Todavia nadie gana o es empate en caso de que ya no queden casillas libres
  74. contador_X = 0;
  75. contador_O = 0;
  76. i = 0;
  77. while(i < 3) {
  78. j = 0;
  79. while(j < 3) {
  80. if(t->juego[i][j] == 'X') {
  81. contador_X++;
  82. }
  83. else {
  84. if(t->juego[i][j] == 'O') {
  85. contador_O++;
  86. }
  87. }
  88. j++;
  89. }
  90. i++;
  91. }
  92. if(abs(contador_O-contador_X) > 1) {
  93. //ERROR de Tablero, no es posible que un jugador tenga 2 o mas 'fichas' que el otro en el tablero
  94. e = ERROR;
  95. }
  96. else {
  97. if(contador_X+contador_O < 9) {
  98. e = UNKNOW;
  99. }
  100. else {
  101. e = DRAW;
  102. }
  103. }
  104. }
  105. }
  106. }
  107. else {
  108. //En este punto evaluamos quien gano
  109. if(casilla == 'X') {
  110. e = X_WIN;
  111. }
  112. else {
  113. e = O_WIN;
  114. }
  115. }
  116. }
  117. else {
  118. //En este punto evaluamos quien gano
  119. if(casilla == 'X') {
  120. e = X_WIN;
  121. }
  122. else {
  123. e = O_WIN;
  124. }
  125. }
  126. return e;
  127. }
  128.  

Saludos
75  Programación / Desarrollo Web / Acceso asincrono a Variables en: 25 Agosto 2016, 20:20 pm
Hola que tal estoy programando una pequeña interfaz y me encuentro con el siguiente problema:

Tengo una varible Array en javascript:

Código
  1. var sucursales = new Array;

Dicha variable se actualiza en tiempo de ejecución mediante la siguiente función:

Código
  1. function lista_sucursal() {
  2. $.ajax({
  3. url: '/get_sucursales.aspx',
  4. type: 'POST',
  5. success: function(data) {
  6. var r = JSON.parse(data);
  7. if(r.ok == true) {
  8. var i = 0;
  9. while (i < r.data.length) {
  10.    sucursales[r.data[i].id] = r.data[i].nombre;
  11.    //Mas codigo irrelevante aqui
  12. i++;
  13. }
  14. }
  15. else {
  16. //Error aqui
  17. }
  18. }
  19. });
  20. }

Dicha funcion se llama al momento de cargar la pagina primero que otras funciones...

Posteriormente tengo otro parte del codigo que hace mas o menos esto:

Código
  1. function maquinas_sucursales_tabla() {
  2. $("#tabla_body").html("");
  3. $.ajax({
  4. url: '/get_maquinas_sucursales.aspx',
  5. type: 'POST',
  6. success: function(data) {
  7. var r = JSON.parse(data);
  8. if(r.ok == true) {
  9. var i = 0;
  10. while(i < r.data.length) {
  11.    $("#tabla_body").append('<tr><td>' + sucursales[r.data[i].sucursal] + '</td></tr>');
  12. i++;
  13. }
  14. }
  15. else {
  16. //ERROR
  17. }
  18. }
  19. });
  20. }

El detalle esta en que hay veces que pone el dato correctamente y otras veces aparece "undefined" y esto es debido a que el codigo del jquery se ejecuta de forma asincrona...

Que recomiendan para solucionar esto, estaba pensando en usar un semaforo como "sucursales_ready" para solo cargar los otros datos cuando la variable ya este lista....

Pero no se, tal vez existe otro metodo mas rapido y/o sencillo.


Saludos!
76  Seguridad Informática / Hacking / Respuesta HTTP Extraña en: 24 Agosto 2016, 01:15 am
Bueno actualmente estoy testeando un servidor que me esta tratando de hackear... (Eso o estoy paranoico  :rolleyes:)

El detalle que he empezado a recibir un par de correos de una pagina legitima, pero la direccion final de destino esta en un IP dinamica, la pagina tiene el puerto 81 Abierto y he hecho un par de peticiones manualmente mediante netcat

Código:
GET / HTTP/1.1
Host: <IP>



y la respuesta siempre es la mismasimilar:

Código:
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 2463
Content-Type: text/html
Server: Microsoft-IIS/7.5
Set-Cookie: ASPSESSIONIDSSDQCRCR=SUPERCOOKIE; path=/
X-Powered-By: ASP.NET
Date: Fri, 20 Aug 2016 00:00:0 GMT

ÿØÿà J.............<OMITIDO>

El contenido nunca cambia a pesar de ser siempre los 2463 y la salida dice ser text/html

Creen que sea información comprimida o alguna idea del formato, por seguridad y un poco de paranoia colocare la información aqui despues de realizarle algunos cuantos test (Muestreos estadísticos)

Saludos!
77  Programación / Programación C/C++ / Creacion de SWAP y acceso a los datos almacenados en la misma en: 19 Agosto 2016, 20:14 pm
Hace tiempo vi un post, donde preguntaban sobre como crear una "partición" de swap o intercambio entre memoria y Disco Duro, solo que no logro encontrar el tema.

Bien estos dias estoy trabajando en un proyecto similar, donde tengo un archivo de X cantidad de Gigabytes desde 2, 4, 8, ... o mas

El detalle que cuando quieres trabajar con estas "particiones" para aprender como los sistemas operativos administran la falta de memoria con un espacio de intercambio en Disco te encuentras con el problema de que debes de administrar "optima-mente" ese espacio, y no significa que debas de ahorrar cada byte, pero es comun que las cosas que almacenas en ese espacio en disco cambien de tamaño o sean borradas poco después de escribirlas.. y por optima-mente me refiero a no perder de vista donde dejas cada cosa y a donde se movió, y que espacios quedan libres.

El codigo para escribir un archivo en Blanco de 4 Gigabytes es el siguiente:

Código
  1. #define KB 1024
  2. #define MB 1048576
  3.  
  4. register int i = 0;
  5. char *buffer = NULL;
  6. FILE *archivo = NULL;
  7. archivo = fopen("cache.bin","wb");
  8. buffer = calloc(MB,sizeof(char));
  9. while(i < 4*KB) {
  10. fwrite(buffer,MB,1,archivo);
  11. i++;
  12. }
  13. fclose(archivo);
  14. return 0;

Con eso ya tenemos nuestro espacio para "intercambio", ahora necesitamos tener otro archivo o estructura donde recordemos donde dejamos cada cosa...

Código
  1. struct map_item {
  2. uint64_t start;
  3. uint64_t end;
  4. uint8_t name[80];
  5. };
  6.  

Suponiendo que esa sea nuestra estructura de donde dejamos las cosas, podríamos tener la siguiente función para recuperar X catidad de bytes desde el archivo.

Código
  1. uint8_t *get_data_from_swap(uint64_t s,uint64_t e) {
  2. FILE *swap_file = NULL;
  3. uint8_t *data = NULL;
  4. uint64_t l,r;
  5. l = e-s;
  6. swap_file = fopen("cache.bin","rb");
  7. if(swap_file) {
  8. data = malloc(l+1);
  9. fseek(swap_file,s,SEEK_SET);
  10. r = fread(data,1,l,swap_file);
  11. if(l != r) {
  12. fprintf("Error al leer archivo de SWAP",stderr);
  13. }
  14. data[l] = 0;
  15. fclose(swap_file);
  16. }
  17. else {
  18. fprintf("Error al leer archivo de SWAP",stderr);
  19. }
  20. return data;
  21. }

Asi solo pedimos el inicio y el final y la función  se encarga de leer el archivo y devolvernos un apuntador con los datos solicitados + 1 byte de Caracter NULO

Y esto NO SOLO sirve para "Contenido de memoria", simplemente puede ser una archivo de configuración, con X cantidad de parámetros por ejemplo si estamos haciendo un juego podemos guardar Datos ahi, como récords de los usuarios, nombres, items de juego y una larga lista de etceteras...

Solo tenemos que identificarlos bien y tener las rutinas adecuadas para guardar valores nuevos y "Reacomodar" los items existentes para no dejar huecos libres.
78  Foros Generales / Foro Libre / Divagando por Youtube en: 12 Agosto 2016, 22:04 pm

Yo no tengo Televisión y hace mas de 10 años que no la veo, para mi Youtube es una forma de  Entretenimiento Random ya que nunca se que que voy a terminar viendo al Final del dia.

Youtube tiene sus algoritmos para mostrarte vídeos Relacionados, pero llega un punto en que dices
Citar
Como chingados llegue a este video

Y asi como hay usuarios Troll que Desvian Temas... Creo yo que también existen videos troll hecho por Usuarios Troll que solo buscan desviar temas, ya saben... típicos vídeos donde el Thumbnail presenta una imagen realmente prometedora y dicha imagen nunca aparece en el video o el video habla de otra cosa. ODIO ESO!!

¿No les a pasado que empiezan viendo un Tema X y terminan viendo un tema Totalmente diferente al que empezaron?

Saludos!


79  Foros Generales / Noticias / Blockchain nueva tecnologia que adoptara el sistema Financiero en: 12 Agosto 2016, 20:55 pm
Un reporte del foro Mundial de Economía, indica que la tecnología introducida por el Bitcoin (El Blockchain) representara el centro de las operaciones de los sistemas financieros en el Mundo.

Dicha tecnología Heredada de sistemas criptograficos a demostrado ser un pilar importante para el registro de operaciones "Económicas" esto es la compra venta de Divisas/Mercancias utilizando el bitcoin.

No significa que los sistemas financieros adopten el bitcoin, simplemente trataran de incorporar lo mejor de este: El Blockchain

Sin duda alguna la tecnología siempre estará a la vanguardia en estos temas


Mas Información en Ingles

http://www.nytimes.com/2016/08/13/business/dealbook/bitcoin-blockchain-banking-finance.html?ref=technology&_r=0

80  Foros Generales / Noticias / Antiguos miembros de Kickass están haciendo crowdfunding para reabrir la web en: 12 Agosto 2016, 16:09 pm
El pasado 21 de julio cerró la página de torrents más famosa y más utilizada en Internet, incluso por encima de ThePirateBay. A pesar de recibir constantes reclamaciones de DMCA que hacían que muchos de los enlaces, sobre todo a series, fueran eliminados a los pocos días de ser subidos, era la página a la que todos iban a comprobar las últimas novedades.

Actualmente han surgido dos mirrors que han vuelto a subir contenido, como son kickass.mx y kickass.cd. Después del cierre surgió kat.am, el cual fue cerrado por las autoridades, y actualmente el dominio ha sido comprado por estafadores, que cuando vas a descargar un enlace torrent, te piden tu cuenta bancaria.


Mas info: http://www.adslzone.net/2016/08/12/antiguos-miembros-kickass-estan-crowdfunding-reabrir-la-web/
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines