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 - Littlehorse

#191
Claro que va a fallar. Tenes que usar GetModuleFileNameEx, no GetModuleFileName. De hecho ni siquiera son los mismos parámetros, lee la documentación de la MSDN.

Código (cpp) [Seleccionar]

DWORD WINAPI GetModuleFileNameEx(
  __in      HANDLE hProcess,
  __in_opt  HMODULE hModule,
  __out     LPTSTR lpFilename,
  __in      DWORD nSize
);



CitarTo locate the file for a module that was loaded by another process, use the GetModuleFileNameEx function.

hModule [in, optional]

    A handle to the module. If this parameter is NULL, GetModuleFileNameEx returns the path of the executable file of the process specified in hProcess.




Citar
Igualmente de esta manera hay que hacer un openproces con lo que no podre abrir cualquier proceso, por ejemplo el lsa.exe y no podre obtener su ruta.

En el ejemplo yo puse PROCESS_ALL_ACCESS para escribir menos pero lo correcto es utilizar solo lo necesario, lo cual en el caso de GetModuleFileNameEx es PROCESS_QUERY_INFORMATION y PROCESS_VM_READ por lo que no debería haber demasiado problema con la mayoría de los procesos y en caso de haberlo te basta con ajustar los privilegios correctamente.

Por otro lado, obviamente existe una limitación al querer hacerlo desde modo usuario, pero eso es un tema aparte. La limitación la instalas vos desde un principio al querer hacerlo desde modo usuario.

Saludos
#192
Código (cpp) [Seleccionar]
  ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);
  if (ProcessHandle)
    if (GetModuleFileNameEx(ProcessHandle, NULL, FileName, sizeof FileName))
         cout << FileName << endl;
#193
El tema es bastante amplio, lo ideal seria que leas Windows Internals desde cero para comprender como funciona el sistema en detalle.


Detecting code injection by hooking system calls in Windows Kernel mode.


Saludos
#195
En C/C++ pueden/podes ponerlos en este hilo.

Saludos
#196
Programación C/C++ / Re: duda simple
11 Enero 2011, 19:53 PM
castig: No se que es, me suena a un usuario del foro. Tal vez hayas querido decir casting.

static_cast: Generalmente se utiliza cuando se conoce de antemano los tipos de datos involucrados en la conversión; porciones de código criticas donde el rendimiento importa sobremanera. Este tipo de casteo no chequea en tiempo de ejecución por lo tanto no tiene tanta sobrecarga de rendimiento pero a la vez son inseguros si se utilizan de mala forma, puesto que los chequeos debe hacerlos el programador.

dynamic_cast: Explicar dynamic_cast es un tanto mas complicado, ya que involucra muchos otros conceptos de C++. Para resumirlo se podría decir que se utiliza con punteros y/o referencias y que en este caso si se hace un chequeo en tiempo de ejecución, por lo tanto son mas seguros pero a la vez tienen cierta sobrecarga en el rendimiento (aunque hay excepciones).

const-ness: A grandes rasgos son medidas que ayudan a los programadores a evitar posibles escrituras indeseadas. Es decir, si una variable A es const, al intentar modificar su contenido se recibe un error en tiempo de compilación. De esta forma se puede ahorrar mucho tiempo y se evitan muchos fallos.
Resumiendo, se trata de utilizar el especificador const para evitar que objetos constantes sean modificados, por ejemplo:

Código (cpp) [Seleccionar]
Obj const* Ptr //Ptr apunta a un Obj const
Obj no puede modificarse mediante Ptr.

Código (cpp) [Seleccionar]
Obj* const Ptr // Ptr es un puntero const que apunta hacia Obj
No podes modificiar el puntero Ptr, pero podes modificar Obj mediante Ptr.

Son solo ejemplos, ya sea el concepto de casting o el concepto de const-ness, ambos abarcan mucho mas que lo que te he mencionado, así que si quieres involucrarte mas lo ideal es que leas algún libro sobre el tema.

Saludos!
#197
Funcionar va a funcionar siempre y cuando generes el ejecutable correspondiente para cada plataforma, es decir, si compilas el código en Windows obviamente en Linux no va a funcionar -al menos que hayas montado un entorno de compilación cruzada-

Saludos
#198
Lo ideal seria que primero te tomes un tiempo en conocer el lenguaje y luego te adentres en el desarrollo de interfaces. Pasa por este hilo.

Lo que queres hacer es relativamente sencillo y lo podes hacer directamente tirando de la API del sistema o utilizando alguna librería multiplataforma como Qt. Acá tenes un ejemplo en Qt y otro con la WINAPI.

Saludos

#199
Sumado a que no es recomendable utilizar conio, "main" debe declararse "int main". La declaración de "iostream.h" es obsoleta, debe declararse "iostream". Cuidado con las variables globales innecesarias; son una mala practica.

Por otro lado, el código es bastante inseguro:

1) La forma en la que implementas el valor correcto es insegura. Es fácilmente accesible ya sea leyendo el proceso o debuggeando el ejecutable.

2) No limitas los intentos, por lo tanto en ultima instancia se podría hacer fuerza bruta.

Saludos

#200
Cita de: Belial & Grimoire en 27 Diciembre 2010, 01:28 AM
hola

tengo una pregunta... programacion C aun seguira siendo buena para asuntos hackers?, ya que cada vez mas veo mas lenguajes de programacion, cuando buscaba exploits en milw0rm veia mas cosas hechas con Ruby, Perl, Python y casi nada en C, a menos de que sea una DLL... ahorita me he dado cuenta que es un poco mas sencillo programar un exploit en python que hacerlo en C.

Depende que tipo de exploit pero si, lenguajes como Python te ahorran bastante tiempo ya que en reglas generales puedes hacer mas en menos lineas. Digo reglas generales porque cada caso es un mundo y como tal hay que analizarlo en forma detallada.

CitarYo tengo la costumbre de hacer las cosas en programacion C incluso ahorita hice un programa en python y quiero buscar la manera de hacerlo con el otro, pero como les menciono... ya hacer cosas como exploits, troyanos, worms, etc... son mejor con otros lenguajes como python o aun sigue siendo mejor C o C++ para eso?

Depende a que te refieres con mejor. Realmente el termino "mejor" es muy amplio.

CitarO acaso ya solo C/C++ son buenos cuando vas a hacer un programa de escritorio como photoshop, messenger, un reproductor de musica, etc... o solo es mi imaginacion y esos lenguales son aun los mejores para cualquier cosa?

Para cualquier cosa definitivamente no. Hoy en día no haces un webservice en C (por mas que puedas).
En la mayoría de los casos donde se necesite buen rendimiento y un optimo manejo de recursos, C++ es la opción. En el caso de software mas especifico como drivers, kernels, y demas, C es la opción. Esto es casi una regla que casi nunca se suele omitir.

CitarLo pregunto porque siempre me ha gustado intentar hacer exploit, troyanos, etc, pero luego he visto comentarios que dicen que es muy laborioso hacerlo en C y que la mejor opcion es python o Perl.

pero bueno, espero me puedn dar una opinion

salu2

Los "asuntos hacker" van un poco mas allá de codificar exploits y troyanos (si es que codificar un troyano se puede llamar "asunto hacker"). No obstante si te refieres a la forma de pensar y de resolver problemas, el mejor lenguaje es con el/los que mejor te lleves, y partiendo de eso analizar cual es el mas apto para la situación especifica.

Saludos