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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Offset inicio/fin de .data
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Offset inicio/fin de .data  (Leído 5,424 veces)
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Offset inicio/fin de .data
« Respuesta #10 en: 29 Noviembre 2014, 02:19 am »

Gracias por la info :P.
Puede ser que muy pocos utilicen ULONG_PTR ?, soy nuevo en C pero soy de leer mucho code y hasta ahora no recuerdo haber visto utilizar ULONG_PTR o.O.
La mayoria de "reversers", me refiero a los que aprenden primero a depurar programas con algun lenguaje de alto nivel como VB6 y luego intentan aprender un verdadero lenguaje como C/C++ es normal que recomienden/usen variables DWORD, DWORD64 para almacenar punteros, ellos deberian de aprender a programar de la manera correcta.

Usando ULONG_PTR no es la unica manera, también es posible usar BYTE*/PBYTE aunque yo también me siento mejor usando ULONG_PTR.

no entendí cuando decís que devuelva el puntero de IMAGE_SECTION_HEADER

por lo demás te referías a que haga algo así ?:
Código:
void get_setion_offset(HMODULE hModule, char *SetionName, ULONG_PTR &SetionStart, ULONG_PTR &SetionEnd)
{
IMAGE_NT_HEADERS *pNtHdr = ImageNtHeader(hModule);
PIMAGE_SECTION_HEADER pSectionHdr = (PIMAGE_SECTION_HEADER)(pNtHdr+1);

for(int i = 0 ; i < pNtHdr->FileHeader.NumberOfSections; i++, pSectionHdr++)
{
if(strcmp((char *)pSectionHdr->Name, SetionName) == 0)
{
SetionStart = (ULONG_PTR)hModule + pSectionHdr->VirtualAddress;
SetionEnd = SetionStart + pSectionHdr->Misc.VirtualSize;
break;
}
}
}
Usando esto no es lo correcto:
Código:
		if(strcmp((char *)pSectionHdr->Name, SetionName) == 0)
IMAGE_SECTION_HEADER.Name es de tipo BYTE no una cadena asi que es totalmente valido que el nombre de la sección contenga
valores nulos o la longitud del nombre sea el maximo numero de bytes, en este caso 8; strcmp retornará un valor incorrecto en esos casos
memcmp estaba bien.

Me referia a algo como esto:
Código
  1. #define SIZE_OF_MEMBER(Type,Member) (SIZE_T)(sizeof(((Type*)0)->Member))
  2.  
  3. PIMAGE_SECTION_HEADER FindPESectionByName(IN PIMAGE_NT_HEADERS NT, IN BYTE SectionName[8])
  4. {
  5.    if (NT &&
  6.        SectionName)
  7.    {
  8.        PIMAGE_SECTION_HEADER pFirstSection;
  9.        pFirstSection = IMAGE_FIRST_SECTION(NT);
  10.        for (ULONG s = 0; s < NT->FileHeader.NumberOfSections; s++)
  11.        {
  12.            if (!memcmp(
  13.                SectionName,
  14.                pFirstSection[s].Name,
  15.                SIZE_OF_MEMBER(IMAGE_SECTION_HEADER, Name)))
  16.            {
  17.                return &pFirstSection[s];
  18.            }
  19.  
  20.        }
  21.    }
  22.    return NULL;
  23. }
Es sólo una función para obtener un puntero a la sección.

-
Códigos que parsean el formato PE deberían de ser escritos bajo un manejador de excepciónes en el mayor de los casos, sino fijate el monton de programas para parsear PE/PE32+ que se cierran cuando se abren imagenes PE "malformadas".




« Última modificación: 29 Noviembre 2014, 02:24 am por x64Core » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Offset inicio/fin de .data
« Respuesta #11 en: 29 Noviembre 2014, 03:21 am »

La mayoria de "reversers", me refiero a los que aprenden primero a depurar programas con algun lenguaje de alto nivel como VB6 y luego intentan aprender un verdadero lenguaje como C/C++ es normal que recomienden/usen variables DWORD, DWORD64 para almacenar punteros, ellos deberian de aprender a programar de la manera correcta.

Por Horus. En verdad, no sabes cómo hacer para ridiculizar a la gente, eh?

Si miras bien, verás que entre paréntesis están los tipos compatibles con los dados (unsigned long y unsigned long long). Que diga que estoy aprendiendo el lenguaje, no significa que sea un neófito en el tema. Simplemente no se puede saber todo acerca de todo.

La verdad, no sé para qué me todo el tiempo de escribir ésto.

Considéralo un recordatorio final.


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Offset inicio/fin de .data
« Respuesta #12 en: 29 Noviembre 2014, 03:36 am »

Por Horus. En verdad, no sabes cómo hacer para ridiculizar a la gente, eh?

Si miras bien, verás que entre paréntesis están los tipos compatibles con los dados (unsigned long y unsigned long long). Que diga que estoy aprendiendo el lenguaje, no significa que sea un neófito en el tema. Simplemente no se puede saber todo acerca de todo.

La verdad, no sé para qué me todo el tiempo de escribir ésto.

Considéralo un recordatorio final.
No sé a qué te refieres...
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda: Local data exceeds data segment size limit
Programación C/C++
mjpedia 2 3,651 Último mensaje 4 Junio 2010, 22:10 pm
por Gallu
escribir un "echo data >> data.xx" en un .bat con batch.[Solucionado]
Scripting
pilotcast 2 3,181 Último mensaje 28 Abril 2013, 14:02 pm
por daryo
Un día lo ví (offset)
Dudas Generales
Kil On 0 1,344 Último mensaje 9 Junio 2013, 23:41 pm
por Kil On
sqlmap inyección con --data del tipo multipart/form-data
Hacking
ukraniano 1 3,317 Último mensaje 24 Mayo 2014, 06:37 am
por zxero22
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines