Autor
|
Tema: Problema al modificar sección .text (Leído 10,155 veces)
|
Vaagish
Desconectado
Mensajes: 875
|
Bueno.. como no funciona y ya no entiendo que pasa, hice un codigo ejemplo.. Alguien se anima a probar este codigo? int Crypt(char *filename, char *section) { LPBYTE Start; HANDLE hFile = CreateFile(filename, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (hFile == INVALID_HANDLE_VALUE) return -1; HANDLE hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL); if (hFileMapping == 0){ CloseHandle(hFile); return -1; } LPBYTE lpFileMap = (LPBYTE)MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0); if (lpFileMap == 0){ CloseHandle(hFileMapping); CloseHandle(hFile); return -1; } PIMAGE_DOS_HEADER IDH = (PIMAGE_DOS_HEADER) lpFileMap; PIMAGE_NT_HEADERS INH = (PIMAGE_NT_HEADERS)((BYTE *)IDH + IDH->e_lfanew); PIMAGE_OPTIONAL_HEADER IOH = (PIMAGE_OPTIONAL_HEADER)&INH->OptionalHeader; PIMAGE_SECTION_HEADER ISH; for (byte i = 0; i < INH->FileHeader.NumberOfSections; i++) { ISH = (PIMAGE_SECTION_HEADER)(lpFileMap + IDH->e_lfanew + sizeof(IMAGE_NT_HEADERS)+ sizeof(IMAGE_SECTION_HEADER)*i); Start = lpFileMap + ISH->PointerToRawData; if (strcmp((char *)ISH->Name, section) == 0) { for(DWORD i=0; i<ISH->Misc.VirtualSize; i++) Start[i] ^= 'a'; } } UnmapViewOfFile((LPCVOID)lpFileMap); CloseHandle(hFileMapping); CloseHandle(hFile); return 0; }
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... Crypt("nc.exe", ".text");
Gracias! Saludos!
|
|
« Última modificación: 16 Octubre 2014, 23:52 pm por Vaagish »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
Mmm al parecer te estas pasando de rango ... ¿Donde se supone que estas cambiando el entry point en ese codigo exactamente? ¿O es un efecto no deseado?
Tendrias que usar SizeOfRawData.
|
|
« Última modificación: 17 Octubre 2014, 00:27 am por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
¿Donde se supone que estas cambiando el entry point en ese codigo exactamente? ¿O es un efecto no deseado? Es un defecto no deseado Así como esta no le cambio el EP, se cambia solo.. ¿No sera que Start deberia usar VirtualAddress en realidad?: Start = lpFileMap + ISH->PointerToRawData; Ya probé hasta con la dirección psíquica! 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!
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
No, Start estaba bien (no lo estas mappeando con SEC_IMAGE), pero entonces deberias usar SizeOfRawData. No tengo ese ejecutable a mano, pero con unos simples printfs podrias ver a que equivale lpFileMap, Start e IOH que es lo que estas tocando sin querer.
|
|
« Última modificación: 17 Octubre 2014, 00:31 am por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
entonces deberias usar SizeOfRawData Oky, cambiado.. No tengo ese ejecutable a mano, pero con unos simples printfs podrias ver a que equivale lpFileMap, Start e IOH que es lo que estas tocando sin querer. Ya imprimí, use dumpbin, windgb, olly, la mar en coche, etc, etc Ya creo que es con nc, voy a probar con otros ejecutables grandes.. a ver que pasa.. Salu2!
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
Ya imprimí, use dumpbin, windgb, olly, la mar en coche, etc, etc ¿Y que te dio? Start deberia ser muy cercano a IOH para que se produzca el problema ... o es otra parte del programa de la cual no tenemos el codigo. ¿Probaste a aislar esto solo y ya genera el problema?
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Mira: Valores de Start 900098 -> IOH
900400 -> .text 905800 -> .data 905A00 -> .rdata 900000 -> .bss 906C00 -> .idata 907800 -> .CRT 907A00 -> .tls Si comento esto: for(DWORD i=0; i<ISH->SizeOfRawData; i++) Start[i] ^= 'a';
El EP no cambia,, pero claro.. tampoco se cifra Ahora que veo bien... porque va a estar IOH en ese lugar ???? No esta mal eso? Salu2
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
Si tu Start arranca en 0x900400 no veo como puede escribir en 0x9000A8 ... ¿El nc.exe es el mismo que esta aca? http://eternallybored.org/misc/netcat/ Con ese no me pasa lo que decis ... ¿Tu programa es de 32 o 64 bits? ¿Estas viendo el EP con DUMPBIN, no?
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Yo tampoco.. voy a bajar ese nc a ver si es por eso.. tengo una version de nc con su codigo, pero jamas pense que fuera eso.. va.. ya dudaba de todo en realidad..
Es de 32 bits (nc y crypter)
Mañana actualizo..
Saludos!
|
|
|
En línea
|
|
|
|
MCKSys Argentina
|
Bueno, no programo en C++ (sólo lo sé leer) pero si sé algo sobre este tema. Agrandar una sección (y más aún, la sección de código) es un dolor de cabeza bastante grande. Quizás, si el código del cripter es pequeño, podrías encontrar algún code-cave en la sección e insertarlo ahí. Pero esto no siempre es posible. Lo que normalmente se hace es agregar una nueva sección ejecutable al EXE y desde ahi puedes reconstruir el ejecutable tal cual estaba. Si quieres un ejemplo, puedes revisar lo que hace el packer UPX. De ahí seguro sacarás ideas interesantes... Saludos!
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
dar permisos de lectura y escritura a la sección .text
ASM
|
f3n!!x
|
1
|
4,063
|
2 Septiembre 2009, 23:11 pm
por YST
|
|
|
Dificultad VBScript [MSXML2.XMLHTTP + RESPONSE.TEXT + TEXT AREA)]
Scripting
|
JohnConnor
|
0
|
2,277
|
16 Enero 2013, 12:37 pm
por JohnConnor
|
|
|
Como sobrescribir la sección .text de un EXE para poner alli un virus???
Análisis y Diseño de Malware
|
harry_the_blogger
|
4
|
3,491
|
26 Agosto 2014, 18:25 pm
por harry_the_blogger
|
|
|
¿Ya no es posible modificar respuestas en la sección de noticias?
Sugerencias y dudas sobre el Foro
|
crazykenny
|
7
|
4,455
|
4 Febrero 2015, 10:51 am
por el-brujo
|
|
|
X64 binario “Notepad” sección .text
Ingeniería Inversa
|
FFernandez
|
0
|
2,379
|
12 Octubre 2021, 13:35 pm
por FFernandez
|
|