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

 

 


Tema destacado:


  Mostrar Mensajes
Páginas: 1 ... 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 31 32 33 ... 97
171  Programación / Programación C/C++ / Re: Problema al modificar sección .text en: 17 Octubre 2014, 00:26 am
Citar
¿Donde se supone que estas cambiando el entry point en ese codigo exactamente? ¿O es un efecto no deseado?

Es un defecto no deseado  :xD
Así como esta no le cambio el EP, se cambia solo..  :rolleyes:

Citar
¿No sera que Start deberia usar VirtualAddress en realidad?:
Start = lpFileMap + ISH->PointerToRawData;

Ya probé hasta con la dirección psíquica!

Citar
Mmm al parecer te estas pasando de rango

Ya no tengo ni idea que puede ser.. hace rato que estoy con esto, y me estoy por decantar a que es "problema" del netcat..   :¬¬

Saludos! Gracias!
172  Programación / Programación C/C++ / Re: Problema al modificar sección .text en: 16 Octubre 2014, 23:48 pm
Bueno.. como no funciona y ya no entiendo que pasa, hice un codigo ejemplo..

Alguien se anima a probar este codigo?

Código
  1. int Crypt(char *filename, char *section)
  2. {
  3. LPBYTE Start;
  4.  
  5. HANDLE hFile = CreateFile(filename, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  6. if (hFile == INVALID_HANDLE_VALUE)
  7. return -1;
  8. HANDLE hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
  9. if (hFileMapping == 0){
  10. CloseHandle(hFile);
  11. return -1;
  12. }
  13. LPBYTE lpFileMap = (LPBYTE)MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  14. if (lpFileMap == 0){
  15. CloseHandle(hFileMapping);
  16. CloseHandle(hFile);
  17. return -1;
  18. }
  19.  
  20. PIMAGE_DOS_HEADER IDH = (PIMAGE_DOS_HEADER) lpFileMap;
  21. PIMAGE_NT_HEADERS INH = (PIMAGE_NT_HEADERS)((BYTE *)IDH + IDH->e_lfanew);
  22. PIMAGE_OPTIONAL_HEADER IOH = (PIMAGE_OPTIONAL_HEADER)&INH->OptionalHeader;
  23. PIMAGE_SECTION_HEADER ISH;
  24.  
  25. for (byte i = 0; i < INH->FileHeader.NumberOfSections; i++)
  26. {
  27.  
  28. ISH = (PIMAGE_SECTION_HEADER)(lpFileMap + IDH->e_lfanew + sizeof(IMAGE_NT_HEADERS)+ sizeof(IMAGE_SECTION_HEADER)*i);
  29.  
  30. Start = lpFileMap + ISH->PointerToRawData;
  31. if (strcmp((char *)ISH->Name, section) == 0)
  32. {
  33. for(DWORD i=0; i<ISH->Misc.VirtualSize; i++)
  34. Start[i] ^= 'a';
  35. }
  36. }
  37.  
  38. UnmapViewOfFile((LPCVOID)lpFileMap);
  39. CloseHandle(hFileMapping);
  40. CloseHandle(hFile);
  41.  
  42. return 0;
  43. }

El problema que tengo yo con esto es que al cifrar el programa Netcat, le cambia el EntryPoint a 4057F2 cuando debería ser otro..

Esta claro, pero por las dudas...
Código
  1. Crypt("nc.exe", ".text");

Gracias! Saludos!
173  Informática / Hardware / Re: Es posible ver o extraer firmware de un pendrive? en: 14 Octubre 2014, 22:01 pm
pff.. llevo medio dia y no doy con la solucion.. igual creo que mi pendrive no es el mejor para esto.. Les cuento los pasos que llevo echos:

1- Identificar el VID & PID del pendrive, programas: ChekUDisk_v5.0 de WuBoJian y ChipGenius de MyDigit.cn

2 - Buscar en la pagina http://flashboot.ru/ la herramienta correcta en base a ese VID & PID

3 - No encontrar una utilidad para flashear mi pendrive, aunque en realidad yo solo quiero ver el firmware (por ahora), y probe con todas..  :rolleyes:

Rando, vi el video si.. ahora estoy bajando flashtool a ver que panza..

Saludos!

PD: El pendrive es Kingston DT Micro VID: 0951 & PID: 168A, por las dudas, quizas en otro pais salen otras busquedas  :xD

EDIT: Las opciones de flashtools son limitadas a celulares, no reconoce unidades  :silbar:
174  Informática / Hardware / Re: Es posible ver o extraer firmware de un pendrive? en: 10 Octubre 2014, 21:39 pm
Justo ahora estoy con otra cosa.. pero por ahí me parece que viene la información..

Un Golazo! Gracias Rando!

Saludos!

PD: A.. la idea es verlo, copiarlo y analizarlo.. calculo que con IDA o algún disassembler se debe poder,, no?
175  Programación / Programación C/C++ / Re: Problema al modificar sección .text en: 10 Octubre 2014, 01:38 am
Huu.. si.. cualquiera.. Con Olly que es la única herramienta que tengo ahora a mano me dice esto como EntryPoint

ASCII = rC
HEX = 09 72 43

Ahora si que me descoloco, pero es una buena pista.. en casa lo tendré que ver con DUMPBIN y WinDbg

Que raro.. en un ejecutable simple, con 3 secciones funciona.. Bue, reviso y posteo..

Gracias Genio!


Actualizo:

Bueno.. creo haber encontrado algo.. pero por que lo hace??

Netcat antes de cifrar (dumpbin /HEADERS):

Citar
Name: .text
VirtualSize: 5234
VirtualAddress: 1000
SizeOfRawData: 5400
FilePointerToRawData: 400
SizeOfCode: 5400
RVA EntryPoint: 1160
Summary: 6000

Netcat después de cifrar (dumpbin /HEADERS):

Citar
Name: .text
VirtualSize: 5240 (Aumento para alinear el code)
VirtualAddress: 1000
SizeOfRawData: 5400
FilePointerToRawData: 400
SizeOfCode: 5400
RVA EntryPoint: 1010 (Empiezo donde necesito empezar, pero no funca)

Netcat antes de cifrar (WinDbg !dh):

Citar
.text
AddressOfEntryPoint: 1160
BaseOfCode: 1000
Align 16

Netcat después de cifrar (WinDbg !dh):

Citar
.text
AddressOfEntryPoint: 1160
BaseOfCode: 1000
Align (no align specified)   -->  :o

Bueno.. ahí esta.. Ese align debe estar *!&*"·$ el formato.. Perché ?

Gracias!! Saludos!
176  Programación / Programación C/C++ / Re: Problema al modificar sección .text en: 10 Octubre 2014, 00:25 am
Citar
¿Que se supone que haces con esto al final? ¿Escribir un nuevo ejecutable cifrado en disco?

Upss.. perdón,, pensé que había dicho al principio.. Es un crypter, no creo un nuevo archivo no  :silbar:

Trabajo sobre la imagen del mismo PE, la abro con CreateFile,, uso CreateFileMapping y cierro la imagen... Capaz que la *** ahí?!   :rolleyes:

Saludos!
177  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..
178  Programación / Programación C/C++ / Re: Problema al modificar sección .text en: 9 Octubre 2014, 22:14 pm
Bueno.. no di con la solucion.. algo me esta faltando,, pongo el code a ver si alguien ve algo malo..

Código
  1. if(strcmp((char *)ISH->Name, ".text") == 0)
  2. {
  3.  
  4. //  Se agranda la sección para ocupar hasta un bloque de 16 justo
  5. while(ISH->Misc.VirtualSize%16 != 0) ISH->Misc.VirtualSize++;
  6.  
  7. //  Funcion "Cifradora", se cifra la sección .text
  8. Cifra((DWORD)(lpFileMap + ISH->PointerToRawData), ISH->Misc.VirtualSize);
  9.  
  10. // Una copia de la sección .text cifrada (+ align 16)
  11. char *lptextsect = new char[ISH->Misc.VirtualSize];
  12. memset(lptextsect, 0, ISH->Misc.VirtualSize);
  13. memcpy(lptextsect, (void *)(DWORD)(lpFileMap + ISH->PointerToRawData), ISH->Misc.VirtualSize);
  14.  
  15. // Se guarda el punto de inicio  ** push Entrypoint **
  16. ASize = IOH->ImageBase + IOH->AddressOfEntryPoint;
  17.  
  18. __asm { mov eax, ASize }
  19. __asm { mov dword ptr[opcodes + 11h], eax }
  20.  
  21. // VirtualSize a EAX y se ajustan los jmps, calls y cmp
  22. // ****************************************************
  23. ASize = ISH->Misc.VirtualSize;
  24. __asm { mov eax, ASize }
  25.  
  26. __asm { mov dword ptr[opcodes + 44h], eax } // -> call endopcodes
  27. __asm { mov dword ptr[endopcodes + 5], eax } // -> RETADDR, ???? (Size To Decrypt)
  28.  
  29. __asm { neg eax }
  30. __asm { mov dword ptr[opcodes + 38h], eax } // -> cmp ebx, -????
  31.  
  32. ASize = sizeof(opcodes)-8;
  33. __asm { sub eax, ASize }
  34. __asm { mov dword ptr[endopcodes + 0Ch], eax } // -> jmp -????
  35.  
  36. // ****************************************************
  37.  
  38.  
  39. // Se Copia todo al PE!
  40. DWORD StartOffset = (DWORD)lpFileMap + ISH->PointerToRawData;
  41. memcpy((void *)(StartOffset), (void *)opcodes, sizeof(opcodes));
  42. memcpy((void *)(StartOffset + sizeof(opcodes)-1), (void *)(lptextsect), ISH->Misc.VirtualSize);
  43. memcpy((void *)(StartOffset + ISH->Misc.VirtualSize + sizeof(opcodes)-1), (void *)endopcodes, sizeof(endopcodes));
  44. // ***************************************************************
  45.  
  46. // Se ajusta la sección
  47. ISH->Characteristics = 0xE0000020; // Lectura, Ejecucion y escritura!
  48. IOH->AddressOfEntryPoint = (DWORD)IOH->BaseOfCode + 16; // Empezar despues de la clave de 16 digitos
  49. }

Bueno, la idea es ir recorriendo las secciones (Funciona), e ir buscando la sección ".text", una vez encontrada, cifrarla y ponerle su respectiva función descifradora (opcodes y endopcodes)

Desde la linea 15 a la 35 lo que hago es ajustar esos "opcodes", (que funciona tambien)..

El Problema: Si el EntryPoint es 00401000 lo cambio por 00401010 y todo bien! Si el EntryPoint es otro cualquiera, no lo puedo modificar a 00401010! Queda el que tenia antes, y lo raro, el olly me indica con rojo la direccion 00401010 pero igual inicia en donde era el EntryPoint..

Gracias por su tiempo! Saludos!
179  Programación / Programación C/C++ / Re: Problema al modificar sección .text en: 7 Octubre 2014, 23:31 pm
Bueno, después de darle vueltas al asunto me parece que lo mejor va a ser modificar "la lógica" del mismo...

El problema radica en que yo al principio de la sección .text pongo X código, al final pongo otro Z código.. mi intención era ejecutar código X y Z primero, para luego saltar al código del ejecutable..

Bueno, si EntryPoint de ejecutable es 0040100 me "pisa" el código X, y si EntryPoint es distinto pasa otra cosa...

Voy a hacer unas pruebas, si todo sale bien pongo el resultado, sino pregunto  :xD

Citar
No se muy bien que estas tratando de hacer, te recomiendo usar el WinDbg (!dh direccion te ayudara) para ir depurando tu codigo.

Gracias EI, me sirvió para razonar otras posibles situaciones..

Saludos!
180  Programación / Programación C/C++ / Re: Problema al modificar sección .text en: 7 Octubre 2014, 21:06 pm
Hi! Gracias por responder EI!

Citar
AddressOfEntryPoint
    A pointer to the entry point function, relative to the image base address. For executable files, this is the starting address.

BaseOfCode
    A pointer to the beginning of the code section, relative to the image base.

Con que ahí esta el asunto.. pero cambie el que cambie, no queda en la dirección que quiero..

Citar
¿Estas escribiendo en disco o en memoria?

En memoria.. tengo una imagen sacada con CreateFileMapping y MapViewOfFile..

Puntualmente entonces lo que necesitaría es que el entrypoint sea siempre desde baseofcode + 16, siendo (generalmente) 0040100.. pero baseofcode puede cambiar, no puedo poner eso como una constante  :silbar:
Y no me funciono..

Gracias! Saludos!
Páginas: 1 ... 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 31 32 33 ... 97
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines