Título: [Consulta] campo del struct MODULEENTRY32 Publicado por: dRak0 en 8 Agosto 2014, 13:06 pm Tenia algo de tiempo y me puse a repasar algunas cosas
Aca el codigo: Código
->gcc.exe archivo.c -o archivo . OK ->archivo.exe | more Ok. Fijense que me devuelve siempre el mismo PID en los modulos... Ese es el problema y no entiendo porque. Saludos. Título: Re: [Consulta] campo del struct MODULEENTRY32 Publicado por: Eternal Idol en 8 Agosto 2014, 22:47 pm De acuerdo a la descripcion y el codigo funciona correctamente (no intente generarlo); estas llamando a CreateToolhelp32Snapshot con TH32CS_SNAPMODULE, asi que todos los modulos enumerados tendran como PID el que le pasas como segundo argumento (processEntry.th32ProcessID).
TH32CS_SNAPMODULE Includes all modules of the process specified in th32ProcessID in the snapshot. To enumerate the modules, see Module32First. If the function fails with ERROR_BAD_LENGTH, retry the function until it succeeds. Título: Re: [Consulta] campo del struct MODULEENTRY32 Publicado por: dRak0 en 9 Agosto 2014, 16:25 pm Que tal , esperaba tu respuesta jaja. Fijate de compilarlo y correrlo. Hace todo bien hasta busca los modulos en los diferentes procesos como quiero. El tema es que no se porque cuando lo imprimo me imprime siempre el mismo proceso.
Ejemplo burdo: PID:3911 Exe:apache.exe kernel32.dll pathdekernel32 912(Aqui esta el problema) user32.dll pathuser32 912 PID:3222 Exe:justina.exe kernel32.dll pathkernel32 912 user32.dll pathuser32 912 DLL'S DIFERENTES AL ANTERIOR PROCESO asi con todos los procesos. Muy raro no? No es realmente un problema , pero no realiza lo correcto y nose porque. Saludos! Título: Re: [Consulta] campo del struct MODULEENTRY32 Publicado por: Eternal Idol en 9 Agosto 2014, 16:44 pm Poniendo antes del while:
Código
No parece que la API rellene ese campo, en principio no lo necesitas y tal vez lo hace cuando enumeres los modulos de todos los procesos y no de uno en particular. Título: Re: [Consulta] campo del struct MODULEENTRY32 Publicado por: dRak0 en 9 Agosto 2014, 16:57 pm Si pongo eso directamente ni me busca las dlls.
Modifico:No me buscaba las dlls porque tenia que inicializar el dwSize. Ahora me las busca , pero me muestra que pertenece al proceso 0 (Supongo debido al ZeroMemory) antes me mostraba q pertenician al 912. Código
Para solucionarlo podria asignar el valor de la estructura PROCESSENTRY32 al MODULEENTRY32 . O sea si: PROCESSENTRY32 proEntry; MODULEENTRY32 modEntry; modEntry.th32ProcessID=proEntry.th32ProcessID; Pero quedaria muy horrible y ademas no responderia el porque me muestra siempre un valor. Título: Re: [Consulta] campo del struct MODULEENTRY32 Publicado por: Eternal Idol en 9 Agosto 2014, 17:16 pm Si claro, antes del while, pero no antes de asignar el campo dwSize. Ya te dije la razon: la funcion de la API no escribe nada en ese campo; por lo menos es asi cuando usas TH32CS_SNAPMODULE. Antes tenias un valor indefinido, ahora esta inicializado a 0 y la API NO lo cambia nunca.
Título: Re: [Consulta] campo del struct MODULEENTRY32 Publicado por: dRak0 en 9 Agosto 2014, 17:33 pm Jaja y para que existe?He ahi la cuestion jaja.Entonces no seria tan horrible asignarle el de la estructura PROCESSENTRY32.
Bueno , gracias. Ya que tenes bastante experiencia con la API de windows , te hago otra consulta. Al ejecutar un WriteProcessMemory() me tira un error. Como me dijistes en otro post ,"si tenes un error usa GetLastError()" .Me tira error 5. Busque y significa "Permiso denegado". Pero el problema es que tengo todos los permisos. Ejecuto como administrador y ademas le ajusto los privilegios del TOKEN. Nose que pasa. El espacio que reserve tiene sus permisos correctamente. Título: Re: [Consulta] campo del struct MODULEENTRY32 Publicado por: Eternal Idol en 9 Agosto 2014, 17:44 pm No lo se, puede ser algo historico ... estas funciones vienen de 16 bits y es posible que las estructuras tengan campos heredados obsoletos como:
Note The module identifier, which is specified in the th32ModuleID member of MODULEENTRY32, only has meaning in 16-bit Windows. Si, 5 es ACCESS_DENIED, sin el codigo no se puede mas que adivinar. Título: Re: [Consulta] campo del struct MODULEENTRY32 Publicado por: dRak0 en 9 Agosto 2014, 18:12 pm Código
Título: Re: [Consulta] campo del struct MODULEENTRY32 Publicado por: Eternal Idol en 9 Agosto 2014, 19:32 pm if(WriteProcessMemory(procesoHandle,MyFuncAddress,(void*)FuncionInyectar,size_FuncionInyectar,NULL)!=0)
Esta mal la condicion, cuando retorna 0 es que fallo. PD. Ya vi el mensaje (aunque use notepad.exe), cambiando las dos comprobaciones de WriteProcessMemory. Título: Re: [Consulta] campo del struct MODULEENTRY32 Publicado por: dRak0 en 9 Agosto 2014, 20:09 pm Que error mas tonto jeje. :P
Te funciono el CreateRemoteThread()?Me tira error 5 , osea AccesoDenegado. Puede ser que sea por que lo estoy corriendo en WIN7 x64 .Lei que algunos tienen el mismo problema , pero en win8 corre bien. Edito: En win7 x64 me tira acceso denegado. En win xp sp3 x86 funciona bien. En win xp sp 2 x86 funciona bien. En win xp x86 funciona bien. Gracias! PD:Conoces algun buen libro orientado a la API de windows? De teoria de windows toy leyendo Windows Internals 6.Aunque tiene practica , no es sobre la api de windows. PD2:Perdon por las molestias , soy mas de unix , unix like. Poseo poco conocimiento en windows , pero estoy tratando de aprender. Título: Re: [Consulta] campo del struct MODULEENTRY32 Publicado por: Eternal Idol en 9 Agosto 2014, 21:05 pm Que error mas tonto jeje. :P Te funciono el CreateRemoteThread()?Me tira error 5 , osea AccesoDenegado. Puede ser que sea por que lo estoy corriendo en WIN7 x64 .Lei que algunos tienen el mismo problema , pero en win8 corre bien. Edito: En win7 x64 me tira acceso denegado. En win xp sp3 x86 funciona bien. En win xp sp 2 x86 funciona bien. En win xp x86 funciona bien. Gracias! PD:Conoces algun buen libro orientado a la API de windows? De teoria de windows toy leyendo Windows Internals 6.Aunque tiene practica , no es sobre la api de windows. PD2:Perdon por las molestias , soy mas de unix , unix like. Poseo poco conocimiento en windows , pero estoy tratando de aprender. Si, aunque yo lo probe con el notepad, tal vez sea cosa de diferentes sesiones (el proceso puede ser un servicio) ... o tal vez estas tratando de trabajar con un proceso de 64 bits y tu programa es de 32 bits ... si es asi proba generando un ejecutable de 64 bits. Solo conozco el "Windows via C/C++" de Jeffrey Richter. |