Hola gente...

Hasta hace poco tenía una funcion en C++ que manejaba unos stacks en asm, y luego llamaba a una función (la cual no se como ha sido sacada).

Les muestro el codigo para que entiendan

Código: Seleccionar todo

DWORD pfCreateFragmentsFromFile;

void CreateFragmentsFromFile(INetChannel *channel, const char* file, int unk, unsigned int unk2)
{
	_asm {
		pushad;

		push unk2;
		push unk;
		push file;
		mov ecx, channel;

		call pfCreateFragmentsFromFile;

		popad;
	}
}
...

Código: Seleccionar todo

HMODULE hEngine = GetModuleHandle( "engine.dll" );

pfCreateFragmentsFromFile = dwFindPattern((DWORD)hEngine, (DWORD)hEngine+0x250000, (BYTE*)"\x55\x57\x8B\x7C\x24\x0C\x57\x8B\xE9\xE8", "xxxxxxxxxx" );
Aqui , obviamente, se requiere la funcion dwFindPattern para encontrar esos BYTES que aparecen en la signature. Si quieren les dejo la función.

Aqui es como se llama la funcion CreateFragmentsFromFile (definida arriba)

Código: Seleccionar todo

*const char file = "file.txt"
INetChannel *channel = (INetChannel *)enginecl->GetNetChannelInfo();
CreateFragmentsFromFile(channel, file, 0, 1);

** Problema en todo esto **

Como veran en dwFindPattern se busca esos bytes en engine.dll , el problema es que el programa ha cambiado de version de engine.dll y ahora me encuentro trabado para encontrar los nuevos Bytes de la funcion "createfragmentsfromfile".

Se que el autor original del código ha usado OllyDBG para conseguir esos bytes, pero todo intento mio ha fallado (no soy bueno con el debbuging)

Tal vez alguien me podría dar una mano.
Les dejo 2 archivos, La versión vieja donde anda y la versión nueva donde los bytes se han movido en la memoria y son imposibles de encontrar ;)

[Enlace externo eliminado para invitados] <- Viejo engine.dll donde se encuentran los bytes atravez de la funcion dwFindPattern
[Enlace externo eliminado para invitados] <- Nuevo engine.dll donde no encuentro los nuevos bytes
esto que es un virus en la cabecera PE , deberias dejar la basurilla del windows , tienes un visor de objetos (simbolos) si no tenes los simbolos en la nueva libreria vamos malamente ...

Edito : espera Downloads/engine.dll: no symbols no tiene simbolos, igual le han hecho un strip o se han olvidado del export , de exportarlos
<Josh> y bueno hermano,tu hermana q me dijo q estaba cansada de tenerle el orto como la bandera de japon y bueno la pobre me quizo hacer un masaje prostatico nada mas pero era tanto su recelo y venganza acumulada q se esmero un poco mas de lo normal,pero bue,estuivo bien amorizado por la de dias horas años y lagrimas q echo la pobre de tanto culearla
no hay differencia en los bytes ya lo he visto entre los dos dlls
en el OldEngine la direccion de CreateFragmentsFromFile es 0x71D00 tiene \x55\x57\x8B\x7C\x24\x0C\x57\x8B\xE9\xE8
en el nuevo Engine.dll la direccion de CreateFragmentsFromFile es 0x72CD0 tiene \x55\x57\x8B\x7C\x24\x0C\x57\x8B\xE9\xE8

esos direcciones son los offset reales no son los virtuales , el problema no es con los bytes porque son los mismo mira creo que la problema es en el parametro (DWORD)hEngine+0x250000 ,no se que es eso

el dll se mapa en la direccion virtual del imagebase 0x10000000
el direccion virtual del funcion es 0x10072CD0
modifica tu codigo (quitas el funcion dwFindPattern) y pon
pfCreateFragmentsFromFile = (DWORD)0x10072CD0;

saludos

Mostrar/Ocultar

Wow, he encontrado el error (Y tu forma también ha funcionado)

Me pregunto, como hiciste para encontrar los bytes en engine.dll ? Estuve probando con Olly y no pude :S
Me pregunto, como hiciste para encontrar los bytes en engine.dll ? Estuve probando con Olly y no pude :S
Los podrías haber encontrado con cualquier editor hexadecimal.

Saludos
Imagen
3mp3z@ndo escribió: Los podrías haber encontrado con cualquier editor hexadecimal.
si estas correcto , pero no lo hice hasi porque pensava que los bytes eran diferente , un editor hexadecimal no sirve en ese caso
en Olly abres el OldEngine.dll despues buscas por los bytes \x55\x57\x8B\x7C\x24\x0C\x57\x8B\xE9\xE8 con Right Click >>Search For >>Binary String >> pegas los bytes y unde ok
despues de tener la direccion del funcion CreateFragmentsFromFile busque cadenas especiales que usa el funcion y encontre
"CreateFragmentsFromFile: '%s' doesn't exist."
que esta en 0x10071D35 PUSH 102B8D64 ;"CreateFragmentsFromFile: '%s' doesn't exist."

luego abri el nuevo dll engine y busque esa cadena "CreateFragmentsFromFile: '%s' doesn't exist."
con Search For>>All Text Strings >>Right Click >>Search For Text>>pegas la cadena "CreateFragmentsFromFile: '%s' doesn't exist." y pon ok , cuando lo encuentras hagas un RightClick y Follow In Dissassembler y despues cojes el direccion del funcion que es 10072CD0

un Saludo

Mostrar/Ocultar

Responder

Volver a “C/C++”