Verificar si una dll está cargada en un ejectuable?

Iniciado por .:UND3R:., 8 Febrero 2012, 21:24 PM

0 Miembros y 1 Visitante están viendo este tema.

.:UND3R:.

Hola a todos, bueno poseo una aplicación en la cual hookeo una DLL más o menos de la siguiente manera (seudocodigo):

Push midll.dll
call LoadLibraryA
or eax,eax
je cerrar
jmp entry point
cerrar:
push 0ff
call ExitProcess

Carga muy bien, pero el problema que me surge es de que manera, que API podría llamar o que función podría realizar para que una vez ejecutada la aplicación verifique si está cargada.

La dll es para la detección de cheat's para un juego por lo que si una persona con pequeños conocimientos podría simplemente nopear desde push midll.dll hasta je cerrar y no cargaría la DLL (el proceso funcionaría correctamente, pero sin un "sistema de seguridad").

Mi idea es hacer un injerto que verifique si está cargada en memoria, pero ese es mi duda como y con qué API usarla?

INFO adicional: La DLL se conecta a un servidor para corroborar su integridad a través de CRC por lo que no me preocupa que alguien agregue una DLL con el nombre de midll.dll ya que sería detectada. Por lo que en palabras simples solo me gustaría saber de que manera el proceso puede verificar si la dll está cargada.

el seudocódigo sería así
injertar una función en donde el proceso pase seguidamente.
verificar si hay si la DLL está cargada y retomar normalmente.

Espero su ayuda.

Efectivamente eso es más ASM pero creo que se puede integrar a Ing inversa al ser un tema que involucra la seguridad

(si alguien se ha topado con un programa que haga algo parecido)

PD: Solución simple no compleja jeje


Saludos

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

.:UND3R:.

Probaré con GetModuleBaseNameA o GetModuleFileNameA

Saludos

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

x64core

Que yo sepa con la api Getmodulehandle podes comprobar si un modulo esta cargado
mas que todo te devuelve el handle...
Y eso de hookear una dll? no seria hookeas una funcion/procedimiento de una dll?

.:UND3R:.

Cita de: RHL en  9 Febrero 2012, 03:05 AM
Que yo sepa con la api Getmodulehandle podes comprobar si un modulo esta cargado
mas que todo te devuelve el handle...
Y eso de hookear una dll? no seria hookeas una funcion/procedimiento de una dll?

También es un buen método, en fin se me ocurrió para no complicarme demasiado cifrar las instrucciones comentadas con un simple xor, luego de eso lo empaqueté (además de eso realice un injerto que verifica el tamaño de la aplicación y si es mayor al tamaño de la aplicación comprimida es por que lo más probable es que lo hayan desempaquetado, al detectar eso cierra el proceso, La protección no es difícil de romper, pero de alguna u otra forma imposibilita a la media de usuarios. ya que entre nopear y revertir un XOR para alguien que no conoce de OllyDbg sería unas buenas horas (Demorándose uno no más de 5 minutos)

Saludos

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

Иōҳ

#4
Podes implementarle algún algoritmo de verificación de integridad, pero no uno si no varios y hacerlo en diferentes lugares y diferentes tiempos.

Eso si que es tedioso, y de cuando en cuando provoca alguna excepción para ir borrando los HBPs si es que hubiera, si no puedes usar la api que te devuelve la structure contex y hacer lo mismo.

pd: Creo que deberías tomar lo que te dice RHL, no había dado cuenta que lo mencionó XD, si está cargado te debe devolver el handle, si no está cargado pues error, y también puedes usar la api GetLastError.

Ahora porque no quieren que cargue esa dll?, que NO es fundamental para el desenvolvimiento correcto del game? XD


Nox,
Eres adicto a la Ing. Inversa? -> www.noxsoft.net

.:UND3R:.

Esa DLL se usa como anticheat, es buena me detecta incluso a OllyDBG y muchos cheat que he usado para el juego, el problema es que con simples NOP se puede quitar y fin sistema de seguridad xD, por eso la idea era implementar "un poco mas de seguirdad". Cuando tenga todo listo lo subiré para ver quien se anima a nopear la .dll, en si creo que es muy fácil para el nivel que hay acá, pero si lo ves para jugadores que buscan en google cheat juego x o alguien que leyó las instrucciones para instalar el anticheat y las realiza al reves (NOPEA), Se llevará una gran sorpresa partiendo como un molebox ( a mi criterio fácil), luego con inline patch a través de cifrado xor y entre medio una comprobación de tamaño.


Saludos

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

MCKSys Argentina

Fijate esto: http://msdn.microsoft.com/en-us/library/windows/desktop/aa813706(v=vs.85).aspx

Este es el campo interesante: http://msdn.microsoft.com/en-us/library/windows/desktop/aa813708(v=vs.85).aspx

De ese array (InMemoryOrderModuleList) sale el listado de modulos cargados (el mismo que usa Olly)

Ni te digo si te pones a jugar con eso...  ;)

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


TruenoCaos

como ya sabeis de esto no se mucho, pero lo normal para comprobar que algo existe es volver intentar abrirlo.

una pregunta si no se carga el dll, y se intenta usar una funcion de esa dll, no saltaria un error?

Un saludo

Иōҳ

Cita de: MCKSys Argentina en  9 Febrero 2012, 20:36 PM
Fijate esto: http://msdn.microsoft.com/en-us/library/windows/desktop/aa813706(v=vs.85).aspx

Este es el campo interesante: http://msdn.microsoft.com/en-us/library/windows/desktop/aa813708(v=vs.85).aspx

De ese array (InMemoryOrderModuleList) sale el listado de modulos cargados (el mismo que usa Olly)

Ni te digo si te pones a jugar con eso...  ;)

Saludos!

;-)

verdad, muy buen dato y recordatorio ya se me había pasado el peb ni por aca  :silbar:
Eres adicto a la Ing. Inversa? -> www.noxsoft.net

.:UND3R:.

Cita de: MCKSys Argentina en  9 Febrero 2012, 20:36 PM
Fijate esto: http://msdn.microsoft.com/en-us/library/windows/desktop/aa813706(v=vs.85).aspx

Este es el campo interesante: http://msdn.microsoft.com/en-us/library/windows/desktop/aa813708(v=vs.85).aspx

De ese array (InMemoryOrderModuleList) sale el listado de modulos cargados (el mismo que usa Olly)

Ni te digo si te pones a jugar con eso...  ;)

Saludos!

:O Excelente muy buena Info, Muchas gracias :D

Cita de: TruenoCaos en  9 Febrero 2012, 21:56 PM
como ya sabeis de esto no se mucho, pero lo normal para comprobar que algo existe es volver intentar abrirlo.

una pregunta si no se carga el dll, y se intenta usar una funcion de esa dll, no saltaria un error?

Un saludo

Efectivamente por eso se suele comprobar si una vez que se intenta cargar (LoadLibrary) retorna algún handle, en caso que no devuelva se dirige a un procedimiento encargado de mostrar algún tipo de mensaje, el problema radica que la DLL cargada en mi ejecutable es anexa al programa, por lo que si no está no influye en nada por eso debía integrar una que otra API o método para hacer que la dll y la aplicación se amen  y se hagan dispensables uno para el otro ;D

Saludos y muchas gracias a todos por comentar, opinar y ayudar :D

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)