Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eternal Idol

#1741
Vas a tener que firmarlo, al menos con un certificado de prueba ... ¿El driver es tuyo?
#1742
ASM / Re: Ayuda! Problema con MASM Inline
28 Agosto 2013, 10:52 AM
No hace falta usar inline assembly para GetOffset, podrias usar las estructuras correctamente en lugar de sumar offsets, de esa manera facilmente podrias aprovechar NumberOfNames para tu bucle, ahora no estas comprobando ningun limite, seguis comparando como si la tabla fuera infinita (osea que una funcion que no este exportada tirara abajo el programa). En fin, que no se entiende nada el codigo sin depurarlo ...

Código (cpp) [Seleccionar]
LPVOID myGetOffset(LPVOID Modulo, char *fName)
{
 PIMAGE_DOS_HEADER dosh = (PIMAGE_DOS_HEADER)Modulo;
  PIMAGE_NT_HEADERS nth = (PIMAGE_NT_HEADERS)((ULONG_PTR)Modulo + (ULONG_PTR)dosh->e_lfanew);
 PIMAGE_EXPORT_DIRECTORY exp_dir = (PIMAGE_EXPORT_DIRECTORY)((ULONG_PTR)Modulo + (ULONG_PTR)nth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
 LPDWORD Names = (LPDWORD)((ULONG_PTR)exp_dir->AddressOfNames + (ULONG_PTR)Modulo);
 for (int x = 0; x < exp_dir->NumberOfNames; ++x)
 {
   if (!strcmp((char*)((ULONG_PTR)*Names + (ULONG_PTR)Modulo), fName))
   {
     LPWORD Ordinals = (LPWORD)((ULONG_PTR)exp_dir->AddressOfNameOrdinals + (ULONG_PTR)Modulo);
     LPDWORD Functions = (LPDWORD)((ULONG_PTR)exp_dir->AddressOfFunctions + (ULONG_PTR)Modulo);
     return (LPVOID)((ULONG_PTR)Functions[Ordinals[x]] + (ULONG_PTR)Modulo);
   }
   ++Names;
 }
 return NULL;
}





Tu problema esta al final de GetOffset, en EBX estas poniendo el valor de Contador y en realidad necesitas usar el ORDINAL que guardaste en PosicionEAT. En definitiva los otros te funcionan de casualidad al coincidir el indice  ::)
#1743
Y obvio ... ¿Que viene despues de lo que sobreescribis? Es casi imposible que quede una instruccion valida ... como te dije tenes que hacer un salto a alguna zona libre donde pongas estas instrucciones y despues saltar a la instruccion siguiente (previa ejecucion de la que destruis al sobreescribir con tu salto).

Una buena practica seria hacerlo a mano con un depurador como WinDbg, asi entenderias mas rapido (podes comprobar inmediatamente si funciono) y despues escribis lo necesario con el programa.
#1744
Te falta uno ahi, son 6, te falta otro byte con valor 0:

"\x81
\x40
\x50
\xC3
\x00
\x00"
#1745
Son 7 bytes (te falta 1) pero no podes simplemente poner eso ahi, vas a sobreescribir lo que haya despues del Default ... tenes que hacer un salto y ejecutar codigo en alguna zona libre.
#1746
Esa funcion es de la API nativa, empeza con MapViewOfFile (si te sigue interesando la otra simplemente depura/desensambla ya que termina llamandola).
#1747
Los ceros a la izquierda son irrelevantes, 0x indica que la notacion es hexadecimal.

Sera sobreescrito el valor, fijate que pasa si depuras el otro programa y lo suspendes ...
#1748
Depuralo linea por linea y asi sabras que retornan WriteProcessMemory y ReadProcessMemory. Tambien podes depurar el otro programa, por ejemplo desde WinDbg podes hacer dd 0x18D4AC ... un cero a la izquierda es eso, irrelevante.
#1749
Programación C/C++ / Re: Linkear ws2_32
22 Agosto 2013, 16:37 PM
Enlace dinamico: LoadLibrary + GetProcAddress; en VC++ no tenes este problema (es posible que haya mas formas de solucionarlo).
#1750
Cita de: goto C en 20 Agosto 2013, 16:50 PM
Cierto, muchísimas gracias a los dos.

Pero una duda... amchacon, si yo saco el ejecutable de donde explica flony, que es cierto que está ahí, y lo ejecuto directamente, sin estar en ninguna carpeta, ¿dónde se guarda entonces?

Gracias y saludos.

Siempre esta en alguna carpeta, incluso el escritorio es una.