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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: 1 [2] 3 4 5 6 7 8 9 10
11  Programación / Programación C/C++ / Obtener direccion de funcion en: 6 Mayo 2015, 02:33 am
Hola!

Capaz que es una pregunta estupida, pero no encuentro como solucionar esto:

Necesito obtener la direccion a una funcion...

Podria usar un puntero a funcion, pero esa no seria la direccion "real", sino que me devuelve la direccion a un JMP "direccion que quiero"

Gracias! Saludos!
12  Programación / Programación C/C++ / Ayuda con SeAssignSecurity en: 31 Marzo 2015, 02:51 am
Hola!

Estoy tratando de cargar un driver en win7, pero el "loader" me devuelve el codigo de error 0xC0000061 - STATUS_PRIVILEGE_NOT_HELD

El driver es un simple driver de prueba.. solo tiene estas rutinas:

Código
  1. NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath);
  2. NTSTATUS DriverCreate (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
  3. NTSTATUS DriverClose (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
  4. NTSTATUS DriverUnload (IN PDRIVER_OBJECT DriverObject);

Por lo que lei, deberia usar SeAssignSecurity, pero no estoy seguro en donde ni para que..

La sintaxis es esta:

Código
  1. NTSTATUS SeAssignSecurity(
  2.  _In_opt_  PSECURITY_DESCRIPTOR      ParentDescriptor,
  3.  _In_opt_  PSECURITY_DESCRIPTOR      ExplicitDescriptor,
  4.  _Out_     PSECURITY_DESCRIPTOR      *NewDescriptor,
  5.  _In_      BOOLEAN                   IsDirectoryObject,
  6.  _In_      PSECURITY_SUBJECT_CONTEXT SubjectContext,
  7.  _In_      PGENERIC_MAPPING          GenericMapping,
  8.  _In_      POOL_TYPE                 PoolType
  9. );

Donde deberia implementar dicha funcion? DriverEntry quizas? Y que consigo? Elevar los permisos de dicho objeto?

Bueno, eso es lo que me preocupa..

Gracias! Saludos!
13  Programación / Programación C/C++ / Como probar una conexion UDP en: 3 Marzo 2015, 00:43 am
Hola, estoy haciendo unas pruebas con conexiones UDP, en realidad estoy en Blitz3D pero cualquier ayuda me va a venir bien, si no corresponde el tema en este sub foro, perdon..

Tengo algo asi como una aplicacion de consola, un cliente y un server, la idea es establecer una conexion UDP y poder testear la velocidad de la conexion,,

La pregunta seria: ¿como? Como hago para saber el tiempo exacto que demoro en llegar un dato de un pc al otro?

Algo asi como un comando Ping

bueno, cualquier cosa sirve,, idea o codigo ejemplo, ya sea en C o C++, yo lo adapto a Blitz

Gracias!! Saludos!!
14  Foros Generales / Foro Libre / El vestido del infierno! en: 27 Febrero 2015, 04:52 am
A ver ustedes.... de que color lo ven?

https://twitter.com/blancooazul/status/571130006644125696

http://www.sopitas.com/site/449337-el-vestido-que-esta-dividiendo-al-mundo/


15  Programación / ASM / Consulta sobre VESA y directiva: "virtual" (pasar de FASM a NASM) en: 12 Febrero 2015, 19:55 pm
Hola! Hace tiempo no pasaba por estos lados..

Estoy revisando el código de KolibriOS, mas específicamente la parte de video, y me encuentro con esto:

Código
  1. struc VBE_VGAInfo {
  2.  .VESASignature          dd ?    ; char
  3.  .VESAVersion            dw ?    ; short
  4.  .OemStringPtr           dd ?    ; char *
  5.  .Capabilities           dd ?    ; ulong
  6.  .VideoModePtr           dd ?    ; ulong
  7.  .TotalMemory            dw ?    ; short
  8.  ; VBE 2.0+
  9.  .OemSoftwareRev         db ?    ; short
  10.  .OemVendorNamePtr       dw ?    ; char *
  11.  .OemProductNamePtr      dw ?    ; char *
  12.  .OemProductRevPtr       dw ?    ; char *
  13.  .reserved               rb 222  ; char
  14.  .OemData                rb 256  ; char
  15. }
  16.  
  17. struc VBE_ModeInfo {
  18.  .ModeAttributes         dw ?    ; short
  19.  .WinAAttributes         db ?    ; char
  20.  .WinBAttributes         db ?    ; char
  21.  .WinGranularity         dw ?    ; short
  22. ... ; MUCHOS CAMPOS MAS, LOS RECORTO PARA AHORRAR ESPACIO
  23.  .LinRsvdFieldPosition   db ?    ; char
  24.  .MaxPixelClock          dd ?    ; ulong
  25.  .res2                   rb 190  ; char
  26. }
  27.  
  28. virtual at $A000
  29.  vi VBE_VGAInfo
  30.  mi VBE_ModeInfo
  31. modes_table:
  32. end virtual

El problema es que kolibri esta ensamblado en FASM (donde existe esa directiva virtual at XXXX), ya vi como funciona "virtual", pero no me doy cuenta como pasarlo a NASM, yo uso la estructura asi:

Código
  1. ; =========================== NASM VESA INFORMATION BLOCK ===========================
  2. VESA_Info:
  3. .Signature              db      4      ; VBE Signature
  4. .Version                dw      1      ; VBE Version
  5. .OEMStringPtr           dd      1      ; VbeFarPtr to OEM String
  6. .capabilities           db      4      ; Capabilities of graphics controller
  7. .VideoModePtr           dd      1      ; VbeFarPtr to VideoModeList
  8. .TotalMemory            dw      1      ; Number of 64kb memory blocks
  9. .OEMSoftwareRev         dw      1      ; VBE implementation Software revision
  10. .OEMVendorNamePtr       dd      1      ; VbeFarPtr to Vendor Name String
  11. .OEMProductNamePtr      dd      1      ; VbeFarPtr to Product Name String
  12. .OEMProductRevPtr       dd      1      ; VbeFarPtr to Product Revision String
  13. .Reserved               db      222    ; Reserved for VBE implementation scratch area
  14. .OEMData           db      255    ; Data Area for OEM Strings
  15. ; .OEMData db      256    ; Data Area for OEM Strings
  16.  
  17. ; ============================== VESA MODE INFORMATION ==============================
  18. Mode_Info:
  19. .ModeAttributes         dw      1      ; mode attributes
  20. .WinAAttributes         db      1      ; window A attributes
  21. .WinBAttributes         db      1      ; window B attributes
  22. .WinGranularity         dw      1      ; window granularity
  23. ... ; CAMPOS OCULTOS
  24. .LinRsvdFieldPos        db      1      ; bit position of lsb of reserved mask (linear modes)
  25. .MaxPixelClock          dd      1      ; maximum pixel clock (in Hz) for graphics mode
  26. .Reserved               db      190    ; remainder of ModeInfoBlock
  27. ; ******************************************************************************************

Bueno, y quiero acceder asi:

Código
  1. ; =================================================
  2. ; Display Vesa version
  3. ; =================================================
  4. VESAVER:
  5. mov ax, 0x4f00 ; VESA BIOS function (get BIOS info, if function available)
  6. mov di, VESA_Info ; mov di, 0xA000
  7. int 0x10
  8.  
  9. cmp  ax, 0x004f ; OK?
  10. je   vesa
  11. jmp  novesaver
  12.  
  13. vesa:
  14. mov  ax, [es:di+4] ; AH = major, AL = minor version
  15. ; mov  dx, ax ; ???
  16. add  ax, 48*256+48 ; convert to ASCII
  17. mov  [vervesa+19], ah ; replace x.x in string with numbers
  18. mov  [vervesa+21], al ; update offsets if string is modified
  19. mov  si, vervesa ; Print Vesa version
  20. call print16
  21. ret
  22.  
  23. novesaver:
  24. mov  si, novesa
  25. call print16
  26. ret
  27. ; ************* END VESAVER *************

Eso funciona, pero hasta ahi.. no puedo mostrar ningun campo mas,, queria mostrar por ejemplo (codigo de Kolibri):

Código
  1. mov  si,word[es:vi.OemStringPtr]
  2. mov  di,si
  3.  
  4. push ds
  5. mov  ds,word[es:vi.OemStringPtr+2]
  6. call printplain
  7. pop  ds

NOTA: printplain es casi igual a mi print16, es la funcion 0eh - int 10h
NOTA2: Notese que usa "vi" y eso lo declara en virtual, en NASM no tengo eso..


Bueno, espero no haber enredado mucho el asunto y que se entienda.. Gracias por leer y de antemano por la ayuda!

Saludos!
16  Programación / Programación C/C++ / Prototipo "Lanzador Exploit" en: 16 Diciembre 2014, 04:24 am
Hola, estoy con este programa y quería (ademas de compartirlo) tener una opinión extra, puede que no este super prolijo, y que algunas cosas se puedan optimizar,, (y probablemente lo haga), pero me gustaría tener una opinión fresca,, que tal el código, el método usado, etc..

El programa abre un archivo que yo guardo como por ej: "Exploit.bin", y puedo elegir enviarlo por un puerto X, a una direccion X por protocolo TCP o UDP (O sea, lanzar un exploit, no?), por otro lado, se puede abrir un programa y pasarle como parametro el exploit,,

Bueno, sin mas.. ahi el code:

Código
  1. #define WIN32_LEAN_AND_MEAN
  2.  
  3. #include <Windows.h>
  4. #include <iostream>
  5. #include <fstream>
  6. #include "Sockets.h"
  7. #include "Strings.h"
  8. using namespace std;
  9.  
  10. int OpenExploit(char * path);
  11. int OpenAndSend(char * LOCAL, char * Exploit);
  12. void ShowHelp(char * Me);
  13.  
  14. char * DstBuf;
  15.  
  16. int main(int argc, char *argv[])
  17. {
  18.  
  19. cout << endl;
  20.  
  21. if (argc < 2) { ShowHelp(argv[0]); return EXIT_FAILURE; }
  22.  
  23. char PROTO[5] = "\0",
  24. IP[16] = "\0",
  25. PORT[5] = "\0",
  26. LOCAL[MAX_PATH] = "\0",
  27. EXPIT[MAX_PATH] = "\0";
  28.  
  29. char ptrOpt[MAX_PATH] = "\0";
  30.  
  31. for (int i = 1; i < argc; i++)
  32. {
  33. strcpy_s(ptrOpt, MAX_PATH, argv[i]);
  34.  
  35. if (strncmp(ptrOpt, "-", 1) == 0 || strncmp(ptrOpt, "/", 1) == 0)
  36. {
  37. // ------------------------------------------------- //
  38. if (strstr(ptrOpt, "R") || strstr(ptrOpt, "r")) { // REMOTE EXPLOIT
  39. char * STmp = strtok(argv[i + 1], ":");
  40. if (STmp != NULL) strcpy_s(IP, 15, STmp); // IP
  41. else { ShowHelp(argv[0]); return EXIT_FAILURE; }
  42. STmp = strtok(NULL, ":");
  43. if (STmp != NULL) strcpy_s(PORT, 5, STmp); // PORT
  44. else { ShowHelp(argv[0]); return EXIT_FAILURE; }}
  45. // ------------------------------------------------- //
  46.  
  47. if (strstr(ptrOpt, "P") || strstr(ptrOpt, "p")) // PROTOCOL
  48. strcpy_s(PROTO, 5, argv[i + 1]);
  49. if (strstr(ptrOpt, "L") || strstr(ptrOpt, "l")) // LOCAL EXPLOIT
  50. strcpy_s(LOCAL, MAX_PATH - 1, argv[i + 1]);
  51. if (strstr(ptrOpt, "X") || strstr(ptrOpt, "x")) // EXPLOIT
  52. strcpy_s(EXPIT, MAX_PATH - 1, argv[i + 1]);
  53. if (strstr(ptrOpt, "H") || strstr(ptrOpt, "h")) // HELP!
  54. { ShowHelp(argv[0]); return EXIT_SUCCESS; }
  55. }
  56. }
  57.  
  58. // =============================================================================================================================================
  59.  
  60. // *********************************
  61. // * REMOTE EXPLOIT PARAMETERS *
  62. // *********************************
  63. if (strcmp(LOCAL, "\0") == 0 && strcmp(IP, "\0") != 0 && strcmp(PORT, "\0") != 0 && strcmp(PROTO, "\0") != 0 && strcmp(EXPIT, "\0") != 0) {
  64.  
  65. if (strcmp(PROTO, "tcp") == 0 || strcmp(PROTO, "TCP") == 0) {
  66. cout << "\tConnect : TCP" << endl;
  67. } else if (strcmp(PROTO, "udp") == 0 || strcmp(PROTO, "UDP") == 0) {
  68. cout << "\tConnect : UDP" << endl;
  69. } else {
  70. ShowHelp(argv[0]);
  71. return EXIT_FAILURE;
  72. }
  73.  
  74. cout << "\tIP      : " << IP << endl;
  75. cout << "\tPort    : " << PORT << endl;
  76. cout << "\tExploit : " << EXPIT << endl;
  77.  
  78. if (OpenExploit(EXPIT) == EXIT_SUCCESS) {
  79. if (ConectAndSend(IP, strtoul(PORT, NULL, 0), PROTO, DstBuf) == EXIT_SUCCESS) {
  80. cout << endl << "\tExploit Send!" << endl;
  81. delete[] DstBuf;
  82. }
  83. }
  84.  
  85.  
  86. // *********************************
  87. // * LOCAL EXPLOIT PARAMETERS *
  88. // *********************************
  89. } else if (strcmp(LOCAL, "\0") != 0 && strcmp(IP, "\0") == 0 && strcmp(PORT, "\0") == 0 && strcmp(PROTO, "\0") == 0 && strcmp(EXPIT, "\0") != 0) {
  90.  
  91. cout << "\tLocal   : " << LOCAL << endl;
  92. cout << "\tExploit : " << EXPIT << endl;
  93.  
  94. if (OpenExploit(EXPIT) == EXIT_SUCCESS) {
  95. if (OpenAndSend(LOCAL, DstBuf) == EXIT_SUCCESS) {
  96. cout << endl << "\tExploit Send" << endl;
  97. delete[] DstBuf;
  98. }
  99. }
  100.  
  101. // *************
  102. // * ERROR *
  103. // *************
  104. } else { ShowHelp(argv[0]); return EXIT_FAILURE; }
  105.  
  106.  
  107. return EXIT_SUCCESS;
  108. }
  109.  
  110. int OpenExploit(char *path)
  111. {
  112.  
  113. ifstream Exploit;
  114.  
  115. Exploit.open(path, ios::in | ios::binary | ios::ate);
  116.  
  117. if (Exploit.is_open())
  118. {
  119. streampos size = Exploit.tellg();
  120. DstBuf = new char[size];
  121. Exploit.seekg(0, ios::beg);
  122. Exploit.read(DstBuf, size);
  123. cout << endl << "\tExploit Ready! Size: " << size << endl;
  124. if (Exploit.is_open()) Exploit.close();
  125. return EXIT_SUCCESS;
  126. } else {
  127. cout << endl << "\tError Opening Exploit" << endl;
  128. return EXIT_FAILURE;
  129. }
  130. }
  131.  
  132. int ConectAndSend(char *IP, DWORD PUERTO, char *PROTO, char *Exploit)
  133. {
  134.  
  135. int rtn = 0;
  136.  
  137. WSADATA WSA; //--> ESTRUCTURA WSADATA;
  138. SOCKET Socket; //--> VARIABLE DE TIPO SOCKET
  139. SOCKADDR_IN Server; //--> ESTRUCTURA SOCKADDR_IN
  140.  
  141. cout << endl;
  142.  
  143. if ((rtn = WSAStartup(MAKEWORD(2, 2), &WSA)) != 0) {
  144. cout << "\tError WSAStartup: " << rtn << endl;
  145. return EXIT_FAILURE;
  146. }
  147.  
  148. // TCP!
  149. if (strcmp(PROTO, "tcp") == 0 || strcmp(PROTO, "TCP") == 0) {
  150.  
  151. if ((Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR) {
  152. cout << "\tError en socket: " << WSAGetLastError() << endl;
  153. WSACleanup();
  154. return EXIT_FAILURE;
  155. }
  156. Server.sin_family = AF_INET;
  157. Server.sin_addr.S_un.S_addr = inet_addr(IP);
  158. Server.sin_port = htons(PUERTO);
  159. if ((rtn = connect(Socket, (struct sockaddr*) &Server, sizeof(Server))) == SOCKET_ERROR) {
  160. cout << "\tError en connect: " << WSAGetLastError() << endl;
  161. closesocket(Socket);
  162. WSACleanup();
  163. return EXIT_FAILURE;
  164. }
  165. if (send(Socket, Exploit, strlen(Exploit), 0) < 0) {
  166. cout << "\tError en Send" << endl;
  167. closesocket(Socket);
  168. WSACleanup();
  169. return EXIT_FAILURE;
  170. }
  171.  
  172. // UDP!
  173. } else if (strcmp(PROTO, "UDP") == 0 || strcmp(PROTO, "udp") == 0) {
  174.  
  175. int slen = sizeof(Server);
  176.  
  177. if ((Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR) {
  178. cout << "\tError en socket: " << WSAGetLastError() << endl;
  179. WSACleanup();
  180. return EXIT_FAILURE;
  181. }
  182. Server.sin_family = AF_INET;
  183. Server.sin_addr.S_un.S_addr = inet_addr(IP);
  184. Server.sin_port = htons(PUERTO);
  185. if (sendto(Socket, Exploit, strlen(Exploit), 0, (struct sockaddr *) &Server, slen) == SOCKET_ERROR) {
  186. cout << "\tError en Sendto" << endl;
  187. closesocket(Socket);
  188. WSACleanup();
  189. return EXIT_FAILURE;
  190. }
  191.  
  192. }
  193.  
  194. closesocket(Socket);
  195. WSACleanup();
  196. return EXIT_SUCCESS;
  197. }
  198.  
  199. int OpenAndSend(char *LOCAL, char *Exploit)
  200. {
  201.  
  202. cout << endl << "\t";
  203.  
  204. STARTUPINFO lpStartupInfo;
  205. PROCESS_INFORMATION lpProcessInformation;
  206.  
  207. ZeroMemory(&lpStartupInfo, sizeof(lpStartupInfo));
  208. lpStartupInfo.cb = sizeof(lpStartupInfo);
  209. ZeroMemory(&lpProcessInformation, sizeof(lpProcessInformation));
  210.  
  211. if (!CreateProcess(LOCAL, Exploit, NULL, NULL, FALSE, 0, NULL, NULL, &lpStartupInfo, &lpProcessInformation))
  212. {
  213. cout << endl << "\tError CreateProcess: " << GetLastError() << endl;
  214. return EXIT_FAILURE;
  215. }
  216.  
  217. WaitForSingleObject(lpProcessInformation.hProcess, INFINITE);
  218. CloseHandle(lpProcessInformation.hProcess);
  219. CloseHandle(lpProcessInformation.hThread);
  220.  
  221. return EXIT_SUCCESS;
  222. }
  223.  
  224. void ShowHelp(char * Me)
  225. {
  226. cout << " USAGE: " << Me << endl << Help << Me << EXAMPLE << endl;
  227. }

Saludos!
17  Programación / PHP / Seguridad Login-Registro PHP/MySql en: 3 Diciembre 2014, 22:57 pm
Hola!

Estoy realizando una web del estilo compra/venta y aunque me manejo relativamente bien en la programación web, no tengo tanta experiencia formada..

Me gustaría leer de otros usuarios mas experientes, cuales son los mejores métodos para tener un registro y un login seguro en PHP y MySQL..

Estoy viendo de usar algo asi:

Código
  1. <?php
  2.  
  3. include_once("functions.php");
  4.  
  5. $mysqli = connect();
  6.  
  7. $email = mysqli_real_escape_string($mysqli, strip_tags($_POST['emilio']));
  8. $pass = mysqli_real_escape_string($mysqli, strip_tags($_POST['psw']));
  9.  
  10. $stmt = $mysqli->prepare("SELECT email, pass FROM users WHERE email = ? AND pass = ?");
  11. $stmt->bind_param('ss', $email, $pass);
  12. $stmt->execute();
  13. $stmt->bind_result($Umail, $Upass);
  14.  
  15. if($stmt->fetch() == 'true')
  16. {
  17. echo "Login!!";
  18. } else{
  19. echo "Logout!!";
  20. }
  21.  
  22. $stmt->close();
  23.  
  24. ?>

functions.php

Código
  1. function connect()
  2. {
  3. include_once("db.php");
  4. $mysqli = new mysqli($host, $user, $pass, $db);
  5. if ($mysqli->connect_errno) echo "Fallo al contenctar a MySQL: " . $mysqli->connect_error;
  6. return $mysqli;
  7. }

Ya se que el tema es super extenso, que hay muchas formas de protegerse y lo mejor es combinarlas, se que no solo es cuestión de código, sino de seguridad en el servidor también.. no pretendo una explicación detallada, pero al menos lo fundamental, que no puede faltar!!  :rolleyes:

Voy a numerar las que yo conozco, y si falta algo me ayudan comentando abajo..

  • Usuarios restringidos MySql
  • Cifrado de contraseña
  • Permisos restringidos de las carpetas y archivos PHP
  • Contador de intentos de login
  • Escapar caracteres "malos"

Aclaro.. hablo de lo fundamental, que no debería faltar nunca para un registro/login seguro..

Y por ultimo, no existe algún "proyecto" que facilite todas las funciones de seguridad? O sea,, algún código ya armado y testeado? Aunque sea de pago, vale la pena por la seguridad del sitio..

Saludos! Perdon si es muy largo el post
18  Programación / ASM / Puerto y Memoria Grafica? en: 1 Noviembre 2014, 22:42 pm
Buenas! Estaba revisando este codigo.. Lo que hace es modificar la paleta de colores y escribir pixeles de colores (en forma de franjas) en la pantalla... al presionar una tecla, modifica la paleta y otra vez lo mismo..

Código
  1. mov ax, 0013h ; Modo Grafico (ah = 00h / al = 13h)
  2. int 10h ; Esta interrupción controla los servicios de pantalla del PC
  3. mov ax, 0A000h ; Direccion de video (grafica)
  4. mov ds, ax   ; DS = A000h (memoria de graficos). DS esta concatenado con DI
  5.  
  6. ; ========== Cambiar paleta de colores ==========
  7.  
  8. mov dx, 3c8h ; Empezamos a modificar la paleta de colores
  9. mov al, 0     ; Desde la entrada 0
  10. out dx, al
  11. inc dx       ; DX = 3C9h.
  12.  
  13. mov cx, 10 ; Se van a modificar 10 entradas ( cx se ve afectado con loop )
  14.  
  15. SigEntrada:   ; Modificar 10 entradas de la paleta
  16.  
  17. ; Rojo.
  18. mov al, 0
  19. mul cl
  20. out dx, al
  21. ; Verde
  22. mov al, 0
  23. mul cl
  24. out dx, al
  25. ; Azul
  26. mov al, 6
  27. mul cl
  28. out dx, al
  29.  
  30.  loop SigEntrada
  31.  
  32. ; **************************************
  33.  
  34.   xor dx, dx
  35. L1: ; Cuando vuelve a esta etiqueta no limpia dx, util para cambiar los colores
  36. mov cx, 64000
  37.   xor bx, bx
  38.   xor di, di
  39.  
  40. NuevaLinea:
  41. mov [di], dx
  42. inc di
  43. inc bx
  44. cmp bx, 6400
  45. jne SigPixel
  46. xor bx, bx
  47. inc dx
  48. SigPixel:
  49. loop NuevaLinea
  50.  
  51. ; Esperar tecla
  52. mov ah, 10h
  53. int 16h
  54.  
  55. inc dx ; Otra entrada en la paleta de colores y volver a cargar
  56. jmp L1



Ese codigo es 16-Bits y lo corro en Modo real.. Ahora la pregunta:

Si lograse pasar a modo protegido y quisiese dibujar algo avanzado (digamos, una ventana moderna, con muchos colores y bien ubicados, como un SO moderno) deberia de tener a nivel de nucleo, "algo" que modifique la paleta y haga el respectivo "out", como en ese codigo, verdad? O es de otra forma?

Y de ser así, seria como un driver,, y como podría ser la forma mas "optima" de implementar esa rutina? O algún material de referencia.. Parece trabajo difícil, de mucha matemática  :rolleyes:

Saludos! Gracias!
19  Informática / Hardware / Es posible ver o extraer firmware de un pendrive? en: 9 Octubre 2014, 23:46 pm
Hi!

Bueno, no ando mucho por estos lados.. y no he encontrado nada de información..

Es posible extraer o ver el firmware de un pendrive? Existe alguna herramienta?

Gracias! Saludos!

PD: Si este no es el lugar indicado pido disculpas..
20  Programación / Programación C/C++ / Problema al modificar sección .text en: 7 Octubre 2014, 19:39 pm
Hola!

Estoy armando un programa que modifica la sección .text de un ejecutable..
Uso las estructuras:

Código
  1. PIMAGE_DOS_HEADER
  2. PIMAGE_NT_HEADERS
  3. PIMAGE_OPTIONAL_HEADER
  4. PIMAGE_SECTION_HEADER

Por lo que entiendo si hago esto:

Código
  1. // Ajusto el punto de inicio a lo que necesito...
  2.  
  3. //IOH->AddressOfEntryPoint += 16;
  4. IOH->AddressOfEntryPoint = IOH->BaseOfCode + 16;

Cualquiera de esas dos variantes deberían hacer lo mismo, verdad? Bueno, el problema es que en mi programa de pruebas funciona bien, pero en otros no funciona,, el entrypoint no cambia, y si cambia, lo hace mal..

La pregunta: ¿Puede verse afectado esto por algo asi como un relloc, o hay algo que no tengo en cuanta?

Gracias! Saludos!
Páginas: 1 [2] 3 4 5 6 7 8 9 10
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines