Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Karcrack en 16 Marzo 2010, 15:58 pm



Título: [m][SRC][Semaforos!] Alternativa a CreateMutex
Publicado por: Karcrack en 16 Marzo 2010, 15:58 pm
Ya puse una alternativa hace un tiempo:
Código:
http://foro.elhacker.net/programacion_vb/srcmaltmutexbas_alternativa_a_createmutex-t243771.0.html

Pues aqui va otra trabajando con Semaforos :P
Código
  1. Option Explicit
  2. 'KERNEL32
  3. Private Declare Function CreateSemaphoreW Lib "kernel32.dll" (ByVal lpSemaphoreAttributes As Long, ByVal lInitialCount As Long, ByVal lMaximumCount As Long, ByVal lpName As Long) As Long
  4.  
  5. Private Const ERROR_ALREADY_EXISTS  As Long = 183&
  6.  
  7. Public Function bWasIOpened(ByVal lpName As String) As Boolean
  8.    bWasIOpened = (CreateSemaphoreW(0&, 0&, 1&, StrPtr(lpName)) > 0) And (Err.LastDllError = ERROR_ALREADY_EXISTS)
  9. End Function
Minimalista, como a mi me gusta >:D

Bueno, para que no sepa para que sirve esto lo explico, es bastante facil. Sirve para que no hayan dos instancias de nuestra aplicacion ejecutandose simultaneamente...
Una mejor explicacion de nuestro amigo MadAntrax :P
sirve para controlar que nuestra aplicación no sea ejecutada 2 veces en un mismo equipo. Algunos pensareis que eso ya se puede hacer con

Código
  1. If App.PrevInstance = True Then End

pero eso no es cierto... si nuestra aplicación se copia en System32 como: programa1.exe y programa2.exe... el usuario podrá ejecutar el programa1.exe y el programa2.exe simultáneamente! Eso puede suponer un problema en el caso de estar programando un troyano o un keylogger (donde lo importante es solo tener una instancia de nuestro malware a la vez).

Ejemplo de uso del code:
Código
  1. Private Sub Form_Load()
  2.    If bWasIOpened("Cualquier_Cosa") = True Then End
  3. End Sub

Nota:Probar solo compilado.

Saludos :D


Título: Re: [m][SRC][Semaforos!] Alternativa a CreateMutex
Publicado por: Hasseds en 16 Marzo 2010, 16:22 pm
If App.PrevInstance = True Or App.EXEName <> "Project1" Then End

 :silbar:


Título: Re: [m][SRC][Semaforos!] Alternativa a CreateMutex
Publicado por: ssccaann43 © en 16 Marzo 2010, 16:24 pm
Jajaja XD...

Karcrack como dice cobein... Sos un capo...! Me gustó este code...! ::D


Título: Re: [m][SRC][Semaforos!] Alternativa a CreateMutex
Publicado por: Karcrack en 16 Marzo 2010, 16:24 pm
If App.PrevInstance = True Or App.EXEName <> "Project1" Then End

 :silbar:

Creo que no has leido la cita que he hecho a MadAntrax...
Si se renombra el fichero y se vuelve a ejecutar el proceso eso no sirve para nada :)

Jajaja XD...

Karcrack como dice cobein... Sos un capo...! Me gustó este code...! ::D
Gracias :-[ :xD :xD


Título: Re: [m][SRC][Semaforos!] Alternativa a CreateMutex
Publicado por: Hasseds en 16 Marzo 2010, 16:33 pm
Jajaja XD...

Karcrack como dice cobein... Sos un capo...! Me gustó este code...! ::D

+1 , tambien me gustó el code

Si se renombra el fichero y se vuelve a ejecutar el proceso eso no sirve para nada :)

Como que no sirve, si renombras (en la misma carpeta o ya está corriendo  no hay segunda instancia
PD: y app.path en el caso que se renombre en otra carpeta



Título: Re: [m][SRC][Semaforos!] Alternativa a CreateMutex
Publicado por: Karcrack en 16 Marzo 2010, 16:38 pm
Como que no sirve, si renombras (en la misma carpeta o ya está corriendo  no hay segunda instancia
PD: y app.path en el caso que se renombre en otra carpeta
1- No es buena idea 'hardcodear' un nombre (de carpeta o fichero, da igual), ya que eso es facilmente modificable...
2- Prueba a usar el metodo de app.PrevInstance haciendo esto:
Compila el ejecutable como "Proyecto1.exe" ejecutalo, ira sin problemas... copia el "Proyecto1.exe" a "Proyecto2.exe" y abrelo... veras que hay dos instancias de la misma aplicacion...


Título: Re: [m][SRC][Semaforos!] Alternativa a CreateMutex
Publicado por: Hasseds en 16 Marzo 2010, 16:45 pm
Como que no sirve, si renombras (en la misma carpeta o ya está corriendo  no hay segunda instancia
PD: y app.path en el caso que se renombre en otra carpeta
1- No es buena idea 'hardcodear' un nombre (de carpeta o fichero, da igual), ya que eso es facilmente modificable...
2- Prueba a usar el metodo de app.PrevInstance haciendo esto:
Compila el ejecutable como "Proyecto1.exe" ejecutalo, ira sin problemas... copia el "Proyecto1.exe" a "Proyecto2.exe" y abrelo... veras que hay dos instancias de la misma aplicacion...


If App.PrevInstance = True Or App.EXEName <> "Proyecto1" Then End

como va a abrir Proyecto2 si no es = a Proyecto1





Título: Re: [m][SRC][Semaforos!] Alternativa a CreateMutex
Publicado por: Karcrack en 16 Marzo 2010, 16:47 pm
If App.PrevInstance = True Or App.EXEName <> "Proyecto1" Then End

como va a abrir Proyecto2 si no es = a Proyecto1
Si, si, mientras uses esa condicion al cambiar el nombre se cerrará... pero te digo que no es buena idea, porque si cambias el nombre al EXE original... es decir, cambias el nombre al "Proyecto1" por incluso "PROYECTO1" dejara de ir.... Por eso no es buena idea :xD O si lo pusieses en un AutoExtraible del WinRar tampoco iria, porque a no ser que digas lo contrario el Winrar pone nombres aleatorios :D


Título: Re: [m][SRC][Semaforos!] Alternativa a CreateMutex
Publicado por: Sm0kes en 16 Marzo 2010, 17:49 pm
hey genial Karcrack lo tomare como alternativa vere que otros metodos habra me has motivado xD... Salu2 y thankz ;)


Título: Re: [m][SRC][Semaforos!] Alternativa a CreateMutex
Publicado por: cobein en 16 Marzo 2010, 18:34 pm
Muy bueno Karcrack =D

@Hasseds, todo eso que pusiste se puede "saltar" por ejemplo copiando la app a otra unidad, mismo nombre etc y va a correr. Digamos que los semaforos o mutex son alternativas mas "globales"


Título: Re: [m][SRC][Semaforos!] Alternativa a CreateMutex
Publicado por: Hasseds en 16 Marzo 2010, 18:46 pm
Muy bueno Karcrack =D

@Hasseds, todo eso que pusiste se puede "saltar" por ejemplo copiando la app a otra unidad, mismo nombre etc y va a correr. Digamos que los semaforos o mutex son alternativas mas "globales"

Por supusto, eso esta fuera de discucion, ya felicité a KK por el code en un post anterior, pero con las dos App que cité mas app.path en el mismo if se puede lograr una sola instancia.


Título: Re: [m][SRC][Semaforos!] Alternativa a CreateMutex
Publicado por: EddyW en 17 Marzo 2010, 01:59 am
Había leído en una ocasión sobre esta API ¬¬, pero no le tome atención :P

Gracias por el aporte, esta esta mejor que usar CreateMutex :D

SaluDOS!!!


Título: Re: [m][SRC][Semaforos!] Alternativa a CreateMutex
Publicado por: Karcrack en 17 Marzo 2010, 02:19 am
hey genial Karcrack lo tomare como alternativa vere que otros metodos habra me has motivado xD... Salu2 y thankz ;)
Hoy mismo antes de empezar con esto estaba pensando formas mas astutas :P Se me ha ocurrido, trabajar con Named Pipes, o trabajar con WM_USER... pero todo esto necesita bastante mas codigo.. y a mi me gustan las cosas minimalistas :)

Gracias a todos, me alegro que os haya gustado :D