Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: TrashAmbishion en 27 Febrero 2020, 05:42 am



Título: Corriendo una aplicacion desde .Net !!
Publicado por: TrashAmbishion en 27 Febrero 2020, 05:42 am
Hola,

Existe alguna forma de saber cuando un juego cargo completamente sus librerías ?

Saludos


Título: Re: Corriendo una aplicacion desde .Net !!
Publicado por: ThunderCls en 27 Febrero 2020, 14:23 pm
Puedes saber en un momento determinado que librerias tiene en memoria un proceso, luego necesitas saber si las que tiene en ese momento son todas las que se supone que deba cargar. Lo primero lo puedes hacer enumerando cada modulo en el proceso (OpenProcess/EnumProcessModules). Para lo segundo te podrias hacer hacer un listado de todas las librerias que carga el proceso en su ejecucion como base de comparacion
Saludos


Título: Re: Corriendo una aplicacion desde .Net !!
Publicado por: **Aincrad** en 27 Febrero 2020, 21:39 pm

Como te dijo el buen compañero @ThunderCls , lista los modulos , o tambien el numero de modulos que ha cargado el juego y asi lo comparas.

aqui te dejo una funcion simple que hize :

Código
  1. Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As UInt32, ByVal bInheritHandle As Int32, ByVal dwProcessId As UInt32) As IntPtr
  2.  
  3.        Public Shared Function GetProcessModules(ByVal Process_Name As String) As String
  4.            Dim DataS As New StringBuilder
  5.            Dim pc As Process() = Process.GetProcessesByName(Process_Name)
  6.  
  7.            Dim hndProc As IntPtr = OpenProcess(&H2 Or &H8 Or &H10 Or &H20 Or &H400, 1, CUInt(pc(0).Id))
  8.            If hndProc = IntPtr.Zero Then
  9.                Return "Error"
  10.            End If
  11.  
  12.            Dim ModulesCount As Integer = pc(0).Modules.Count - 1
  13.            For index As Integer = 0 To ModulesCount
  14.                DataS.Append(pc(0).Modules(index).FileName & vbNewLine)
  15.            Next
  16.  
  17.            Return DataS.ToString
  18.        End Function

Con esta funcion listas los modulos (librerias) de un proceso, el primer modulo siempre es el proceso como tal se le denomina el MainModule vendria siendo el .exe, los demas son las librerias.

Modo de empleo :

Código
  1. TextBox1.Text = GetProcessModules("nombredelProcesoDeljuego")

asi obtienes la lista de librerias que Emplea el juego , podes hacer una comparacion , pero soy el unico que piensa que lo que estas intentando hacer es inutil? digo un proceso carga rapidamente todas sus librerias al iniciar y no tarda mas de 4s .



Título: Re: Corriendo una aplicacion desde .Net !!
Publicado por: ThunderCls en 28 Febrero 2020, 01:10 am
No das mucho detalle de lo que intentas hacer, pero como dijo **Aincrad**, debes tener en cuenta que una vez que un proceso carga una libreria y usa la funcion que necesita, la libera de memoria, por lo que es muy poco probable que en el punto que hagas el listado de modulos obtengas absolutamente todas las librerias que el proceso ha usado o usara en el futuro. Repito, no se lo que intentas hacer, pero puedo decir un par de ideas

1- Lanzar tu aplicacion como debugger del juego y depurarlo a tu gusto (WaitForDebugEvent/ContinueDebugEvent)
2- Inyectarte en el proceso justo antes de que se cargue completamente (ejecute su ep) y hacer hook en LoadLibrary

Saludos