elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: 4n4lDetector v1.3: herramienta de análisis estático de malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [Ayuda] Prevenir que un Programa se Minimize o se cambie el foco de Windows.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Prevenir que un Programa se Minimize o se cambie el foco de Windows.  (Leído 619 veces)
**Aincrad**


Desconectado Desconectado

Mensajes: 501



Ver Perfil
[Ayuda] Prevenir que un Programa se Minimize o se cambie el foco de Windows.
« en: 14 Septiembre 2020, 23:25 »

Hola, Tengo un Problemilla.

Bueno les pondre en contexto. hace unos dias que vengo desarrollando un Cheat para Among US.

Among US es un juego creado en Unity. y la mayoria de estos juegos . permiten superponer formularios (GDI) sobre el.

El cheat lo estamos desarrollando un amigo y yo.

el caso es que le dio por probar el menu que hice sobre otros juegos, y por casualidad funciono. yo me quede como wtf.

Bueno el caso es que el cheat puede superponerse sobre varios juegos . como es el caso de Operation 7...

Pero tengo un problema. y es de lo que vengo a pedir guia.



El problema que tengo es que algunos juegos al perder el "Foco" de la ventana del mismo se minimizan. y quiero prevenir esto.

Osea me refiero a que cuando se muestra el cheat encima del juego en pantalla completa. obviamente el foco de windows cambia de la venta del juego a mi cheat. y en ese momento el juego al perder el foco se minimiza.




Para solucionar esto. se me  ocurrieron varias ideas :

1) Pausar (suspender) el Proceso del juego y reanudarlo cuando oculte el cheat.

  R: Use la clase vieja de Elektro para hacer esto pero por alguna razón no sirve.
       -La clase esa esta medio bug , no me detectaba el proceso tuve que acomodarla.
  
     Por alguna razon el Proceso del juego no se suspendio. no se que paso la verdad.
     -tal vez sea el anticheat xingcode que no deja-



2) Intente Usar AppActivate , al parecer intento funcionar pero , en una milesima de segundo se pierde la el foco de la venta del juego y por ende se minimiza.
  
  R: Pondre Mi codigo a continuacion, que hice para que mantener el foco en el juego :
    
    Modo de uso :

    
Código
  1. Private ActiveProc As New ProcessActivate(ProcessGame)

    ProcessActivate.vb
    
Código
  1. Public Class ProcessActivate
  2.  
  3.    Private Shared Monitor As Boolean = True
  4.    Public Property ActivateMonitoring As Boolean
  5.        Get
  6.            Return Monitor
  7.        End Get
  8.        Set(value As Boolean)
  9.            Monitor = value
  10.        End Set
  11.    End Property
  12.  
  13.    Private ProcessName As String = String.Empty
  14.  
  15.    Public Sub New(ByVal ProcName As String)
  16.        ProcessName = ProcName
  17.  
  18.        Dim tsk As New Task(AddressOf AppActivateEx, TaskCreationOptions.LongRunning)
  19.        tsk.Start()
  20.    End Sub
  21.  
  22.    Private Sub AppActivateEx()
  23.        On Error Resume Next
  24.        Do While True
  25.            If Monitor = True Then
  26.                If Not ProcessName = String.Empty Then
  27.                    If ProcessName.ToLower.EndsWith(".exe") Then ProcessName = ProcessName.Substring(0, ProcessName.Length - 4)
  28.  
  29.                    Dim proc() As Process = Process.GetProcessesByName(ProcessName)
  30.  
  31.                    If Not proc.Length = 0 Then
  32.  
  33.                        AppActivate(proc(0).MainWindowTitle)
  34.  
  35.                    End If
  36.                End If
  37.            End If
  38.        Loop
  39.    End Sub
  40.  
  41. End Class
  42.  



Bueno Básicamente Necesito ayuda / Ideas , sobre como mantener el foco sobre la ventana del juego , aunque de click encima del Form del Cheat.

Incluso también me servia , alguna forma de tener el form del cheat desactivado aunque de click encima de el no llame al foco de ventana de windows. asi solo tendría que emular los clicks . etc..

Elektro una ayudita plox ...... :,v



Imagenes :
 

 





« Última modificación: 14 Septiembre 2020, 23:47 por **Aincrad** » En línea


tincopasan


Desconectado Desconectado

Mensajes: 1.213

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: [Ayuda] Prevenir que un Programa se Minimize o se cambie el foco de Windows.
« Respuesta #1 en: 14 Septiembre 2020, 23:51 »

Hola:
         no he intentado lo que planteas, ya me voya aponer a ver que pasa, pero... ¿por qué no usar el cheat directamente con combinación de teclas?


En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 501



Ver Perfil
Re: [Ayuda] Prevenir que un Programa se Minimize o se cambie el foco de Windows.
« Respuesta #2 en: 15 Septiembre 2020, 00:07 »

Hola:
         no he intentado lo que planteas, ya me voya aponer a ver que pasa, pero... ¿por qué no usar el cheat directamente con combinación de teclas?

En efecto eso es lo que estoy haciendo actualmente. uso Up, Down , Left , Righ . para navegar por las opciones, un menu simple de cheat ON - OFF.



Pero deberia haber algun modo. de que al llamar a la venta del cheat. no se cambie el foco de windows. y ya con esto podria hacer un cheat con botones, textbox. etc..
En línea


tincopasan


Desconectado Desconectado

Mensajes: 1.213

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: [Ayuda] Prevenir que un Programa se Minimize o se cambie el foco de Windows.
« Respuesta #3 en: 15 Septiembre 2020, 02:02 »

tengo una idea, el problema es que no juego a nada, ¿alguna idea de un juego liviano para probar?
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: [Ayuda] Prevenir que un Programa se Minimize o se cambie el foco de Windows.
« Respuesta #4 en: 15 Septiembre 2020, 15:31 »

El problema que tengo es que algunos juegos al perder el "Foco" de la ventana del mismo se minimizan. y quiero prevenir esto.

¿Pero lo estás jugando a pantalla completa dedicada, o ventana sin bordes?...

De todas formas si ese problema es tal y como dices, entonces lo más simple para prevenirlo sería desarrollar un cheat sin interfaz gráfica y así evitar el problema. Si no puedes vencer a tu enemigo, acomódate a él. xD

También puedes probar a utilizar la función de Windows 'SetWindowLongPtr' sobre la ventana de tu aplicación:
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowlongptra

con la combinación de estilos extendidos de ventana: WS_EX_TOPMOST + WS_EX_NOACTIVATE:
https://docs.microsoft.com/en-us/windows/win32/winmsg/extended-window-styles

Teoricamente con esa combinación de estilos puedes superponer una ventana sobre las demás (top most) sin activar el foco de entrada de dicha ventana.



1) Pausar (suspender) el Proceso del juego y reanudarlo cuando oculte el cheat.

  R: Use la clase vieja de Elektro para hacer esto pero por alguna razón no sirve.
       -La clase esa esta medio bug , no me detectaba el proceso tuve que acomodarla.
  
     Por alguna razon el Proceso del juego no se suspendio. no se que paso la verdad.
     -tal vez sea el anticheat xingcode que no deja-

No se a que clase te refieres, pero esto te debería servir para suspender y reanudar el proceso:

https://foro.elhacker.net/net_c_vbnet_asp/libreria_de_snippets_para_vbnet_compartan_aqui_sus_snippets-t378770.0.html;msg1859297#msg1859297

Aquí te dejo una actualización del código:

UIAutomationUtil.vb
Código
  1. Imports DevCase.Interop.Unmanaged.Win32
  2. Imports DevCase.Interop.Unmanaged.Win32.Enums
  3. Imports Microsoft.Win32.SafeHandles
  4.  
  5. Namespace DevCase.Core.IPC.Tools
  6.  
  7.    ''' ----------------------------------------------------------------------------------------------------
  8.    ''' <summary>
  9.    ''' Contains related UI automation utilities.
  10.    ''' </summary>
  11.    ''' ----------------------------------------------------------------------------------------------------
  12.    <ImmutableObject(True)>
  13.    Public NotInheritable Class UIAutomationUtil
  14.  
  15.        ''' ----------------------------------------------------------------------------------------------------
  16.        ''' <summary>
  17.        ''' Prevents a default instance of the <see cref="UIAutomationUtil"/> class from being created.
  18.        ''' </summary>
  19.        ''' ----------------------------------------------------------------------------------------------------
  20.        <DebuggerNonUserCode>
  21.        Private Sub New()
  22.        End Sub
  23.  
  24.        ''' ----------------------------------------------------------------------------------------------------
  25.        ''' <summary>
  26.        ''' Pauses the execution of all the threads of the specified process.
  27.        ''' </summary>
  28.        ''' ----------------------------------------------------------------------------------------------------
  29.        ''' <example> This is a code example.
  30.        ''' <code>
  31.        ''' ' Create and run a CMD process.
  32.        ''' Dim p As New Process
  33.        ''' p.StartInfo.FileName = "cmd.exe"
  34.        ''' p.StartInfo.Arguments = "/C ""Dir /B /S /A C:\*"""
  35.        ''' p.Start()
  36.        '''
  37.        ''' Thread.Sleep(2000) ' Let the CMD run the job for some seconds...
  38.        '''
  39.        ''' ' Pause the process.
  40.        ''' Using ppo As PauseProcessObject = UIAutomationUtil.PauseProcess(p.Id)
  41.        '''     ' Wait 5 seconds to let you observe that the process is paused...
  42.        '''     Thread.Sleep(5000)
  43.        '''
  44.        '''     ' Resume the process.
  45.        '''     UIAutomationUtil.ResumeProcess(ppo)
  46.        ''' End Using
  47.        ''' </code>
  48.        ''' </example>
  49.        ''' ----------------------------------------------------------------------------------------------------
  50.        ''' <param name="pid">
  51.        ''' The process id (PID).
  52.        ''' </param>
  53.        ''' ----------------------------------------------------------------------------------------------------
  54.        ''' <returns>
  55.        ''' The return value is a collection of openthread-handles to the thread handles of the process.
  56.        ''' <para></para>
  57.        ''' An openthread-handle could be used to suspend, resume or terminate a thread that the openthread-handle refers to.
  58.        ''' </returns>
  59.        ''' ----------------------------------------------------------------------------------------------------
  60.        ''' <remarks>
  61.        ''' After pausing the threads of a process, call <see cref="ResumeProcess(PauseProcessObject)"/> function
  62.        ''' to resume their threads.
  63.        ''' <para></para>
  64.        ''' To manually resume an openthread-handle, call <see cref="ResumeThread"/> function.
  65.        ''' </remarks>
  66.        ''' ----------------------------------------------------------------------------------------------------
  67.        ''' <exception cref="Win32Exception">
  68.        ''' </exception>
  69.        ''' ----------------------------------------------------------------------------------------------------
  70.        <DebuggerStepThrough>
  71.        Public Shared Function PauseProcess(pid As Integer) As PauseProcessObject
  72.  
  73.            Dim ppo As New PauseProcessObject(pid)
  74.            For Each thread As ProcessThread In Process.GetProcessById(pid).Threads()
  75.                ppo.handles_.Add(UIAutomationUtil.PauseThread(thread.Id))
  76.            Next thread
  77.  
  78.            Return ppo
  79.  
  80.        End Function
  81.  
  82.        ''' ----------------------------------------------------------------------------------------------------
  83.        ''' <summary>
  84.        ''' Resumes the execution of all the threads for the specified process.
  85.        ''' </summary>
  86.        ''' ----------------------------------------------------------------------------------------------------
  87.        ''' <example> This is a code example.
  88.        ''' <code>
  89.        ''' ' Create and run a CMD process.
  90.        ''' Dim p As New Process
  91.        ''' p.StartInfo.FileName = "cmd.exe"
  92.        ''' p.StartInfo.Arguments = "/C ""Dir /B /S /A C:\*"""
  93.        ''' p.Start()
  94.        '''
  95.        ''' Thread.Sleep(2000) ' Let the CMD run the job for some seconds...
  96.        '''
  97.        ''' ' Pause the process.
  98.        ''' Using ppo As PauseProcessObject = UIAutomationUtil.PauseProcess(p.Id)
  99.        '''     ' Wait 5 seconds to let you observe that the process is paused...
  100.        '''     Thread.Sleep(5000)
  101.        '''
  102.        '''     ' Resume the process.
  103.        '''     UIAutomationUtil.ResumeProcess(ppo)
  104.        ''' End Using
  105.        ''' </code>
  106.        ''' </example>
  107.        ''' ----------------------------------------------------------------------------------------------------
  108.        ''' <param name="ppo">
  109.        ''' A <see cref="PauseProcessObject"/> object containing all the process thread-handles.
  110.        ''' </param>
  111.        ''' ----------------------------------------------------------------------------------------------------
  112.        ''' <remarks>
  113.        ''' After resuming the threads of a process, call the <see cref="PauseProcessObject.Dispose()"/> method
  114.        ''' of the <paramref name="ppo"/> parameter to close their openthread-handles.
  115.        ''' <para></para>
  116.        ''' To manually close an openthread-handle, call <see cref="NativeMethods.CloseHandle(IntPtr)"/> function.
  117.        ''' </remarks>
  118.        ''' ----------------------------------------------------------------------------------------------------
  119.        ''' <exception cref="Win32Exception">
  120.        ''' </exception>
  121.        ''' ----------------------------------------------------------------------------------------------------
  122.        <DebuggerStepThrough>
  123.        Public Shared Sub ResumeProcess(ppo As PauseProcessObject)
  124.  
  125.            For Each safeOpenThreadHandle As SafeAccessTokenHandle In ppo.handles_
  126.                UIAutomationUtil.ResumeThread(safeOpenThreadHandle)
  127.            Next safeOpenThreadHandle
  128.  
  129.        End Sub
  130.  
  131.        ''' ----------------------------------------------------------------------------------------------------
  132.        ''' <summary>
  133.        ''' Pauses the execution of the specified thread.
  134.        ''' </summary>
  135.        ''' ----------------------------------------------------------------------------------------------------
  136.        ''' <example> This is a code example.
  137.        ''' <code>
  138.        ''' Dim threadId As ProcessThread = Process.GetProcessesByName("cmd.exe").FirstOrDefault.Threads(0).Id
  139.        '''
  140.        ''' Dim openThreadHandle As SafeAccessTokenHandle = PauseThread(threadId)
  141.        '''
  142.        ''' ' ResumeThread(openThreadHandle)
  143.        ''' </code>
  144.        ''' </example>
  145.        ''' ----------------------------------------------------------------------------------------------------
  146.        ''' <param name="threadId">
  147.        ''' The thread identifier.
  148.        ''' </param>
  149.        ''' ----------------------------------------------------------------------------------------------------
  150.        ''' <returns>
  151.        ''' The return value is an openthread-handle to the thread handle.
  152.        ''' <para></para>
  153.        ''' An openthread-handle could be used to suspend, resume or terminate a thread that the open-handle refers to.
  154.        ''' </returns>
  155.        ''' ----------------------------------------------------------------------------------------------------
  156.        ''' <remarks>
  157.        ''' After pausing a thread, call <see cref="ResumeThread"/> function to resume the thread and close the openthread-handle.
  158.        ''' <para></para>
  159.        ''' To manually close an openthread-handle, call <see cref="NativeMethods.CloseHandle(IntPtr)"/> function.
  160.        ''' </remarks>
  161.        ''' ----------------------------------------------------------------------------------------------------
  162.        ''' <exception cref="Win32Exception">
  163.        ''' </exception>
  164.        ''' ----------------------------------------------------------------------------------------------------
  165.        <DebuggerStepThrough>
  166.        Public Shared Function PauseThread(threadId As Integer) As SafeAccessTokenHandle
  167.  
  168.            Const threadAccessRights As ThreadAccessRights = ThreadAccessRights.SuspendResume Or ThreadAccessRights.Terminate
  169.            Dim safeOpenThreadHandle As SafeAccessTokenHandle = NativeMethods.OpenThread(threadAccessRights, True, CUInt(threadId))
  170.            Dim win32Err As Integer = Marshal.GetLastWin32Error()
  171.  
  172.            If safeOpenThreadHandle.IsInvalid() Then
  173.                Throw New Win32Exception(win32Err)
  174.            Else
  175.                NativeMethods.SuspendThread64(safeOpenThreadHandle)
  176.                Return safeOpenThreadHandle
  177.            End If
  178.  
  179.        End Function
  180.  
  181.        ''' ----------------------------------------------------------------------------------------------------
  182.        ''' <summary>
  183.        ''' Pauses the execution of the specified thread.
  184.        ''' </summary>
  185.        ''' ----------------------------------------------------------------------------------------------------
  186.        ''' <example> This is a code example.
  187.        ''' <code>
  188.        ''' Dim thread As ProcessThread = Process.GetProcessesByName("cmd.exe").FirstOrDefault.Threads(0)
  189.        ''' Dim safeOpenThreadHandle As SafeAccessTokenHandle = PauseThread(thread)
  190.        '''
  191.        ''' ' ResumeThread(openThreadHandle)
  192.        ''' </code>
  193.        ''' </example>
  194.        ''' ----------------------------------------------------------------------------------------------------
  195.        ''' <param name="thread">
  196.        ''' The thread.
  197.        ''' </param>
  198.        ''' ----------------------------------------------------------------------------------------------------
  199.        ''' <returns>
  200.        ''' The return value is an openthread-handle to the thread handle.
  201.        ''' <para></para>
  202.        ''' An openthread-handle could be used to suspend, resume or terminate a thread that the open-handle refers to.
  203.        ''' </returns>
  204.        ''' ----------------------------------------------------------------------------------------------------
  205.        ''' <remarks>
  206.        ''' After pausing a thread, call <see cref="ResumeThread"/> function to resume the thread and close the openthread-handle.
  207.        ''' <para></para>
  208.        ''' To manually close an openthread-handle, call <see cref="NativeMethods.CloseHandle(SafeHandle)"/> function.
  209.        ''' </remarks>
  210.        ''' ----------------------------------------------------------------------------------------------------
  211.        ''' <exception cref="Win32Exception">
  212.        ''' </exception>
  213.        ''' ----------------------------------------------------------------------------------------------------
  214.        <DebuggerStepThrough>
  215.        Public Shared Function PauseThread(thread As ProcessThread) As SafeAccessTokenHandle
  216.  
  217.            Return UIAutomationUtil.PauseThread(thread.Id)
  218.  
  219.        End Function
  220.  
  221.        ''' ----------------------------------------------------------------------------------------------------
  222.        ''' <summary>
  223.        ''' Resumes the execution of the specified thread.
  224.        ''' </summary>
  225.        ''' ----------------------------------------------------------------------------------------------------
  226.        ''' <param name="safeOpenThreadHandle">
  227.        ''' An open thread handle.
  228.        ''' <para></para>
  229.        ''' This handle can be obtained by calling the <see cref="UIAutomationUtil.PauseThread"/>
  230.        ''' or <see cref="NativeMethods.OpenThread(ThreadAccessRights, Boolean, UInteger)"/> functions.
  231.        ''' </param>
  232.        ''' ----------------------------------------------------------------------------------------------------
  233.        ''' <exception cref="Win32Exception">
  234.        ''' </exception>
  235.        ''' ----------------------------------------------------------------------------------------------------
  236.        <DebuggerStepThrough>
  237.        Public Shared Sub ResumeThread(safeOpenThreadHandle As SafeAccessTokenHandle)
  238.  
  239.            Dim result As Integer
  240.            Dim win32Err As Integer
  241.  
  242.            If safeOpenThreadHandle.IsInvalid Then
  243.                Throw New NullReferenceException("Handle is invalid.")
  244.            End If
  245.  
  246.            result = NativeMethods.ResumeThread(safeOpenThreadHandle)
  247.            win32Err = Marshal.GetLastWin32Error()
  248.  
  249.            If (result = -1) Then
  250.                Throw New Win32Exception(win32Err)
  251.            End If
  252.  
  253.        End Sub
  254.  
  255.    End Class
  256.  
  257. End Namespace
  258.  

NativeMethods.vb
Código
  1. Imports Microsoft.Win32.SafeHandles
  2. Imports System.Runtime.ConstrainedExecution
  3. Imports System.Security
  4.  
  5. Imports DevCase.Interop.Unmanaged.Win32.Enums
  6.  
  7. Namespace DevCase.Interop.Unmanaged.Win32
  8.  
  9.    ''' ----------------------------------------------------------------------------------------------------
  10.    ''' <summary>
  11.    ''' Platform Invocation methods (P/Invoke), access unmanaged code.
  12.    ''' <para></para>
  13.    ''' This class does not suppress stack walks for unmanaged code permission.
  14.    ''' <see cref="Security.SuppressUnmanagedCodeSecurityAttribute"/> must not be applied to this class.
  15.    ''' <para></para>
  16.    ''' This class is for methods that can be used anywhere because a stack walk will be performed.
  17.    ''' </summary>
  18.    ''' ----------------------------------------------------------------------------------------------------
  19.    ''' <remarks>
  20.    ''' <see href="https://msdn.microsoft.com/en-us/library/ms182161.aspx"/>
  21.    ''' </remarks>
  22.    ''' ----------------------------------------------------------------------------------------------------
  23.    Friend NotInheritable Class NativeMethods
  24.  
  25.        ''' ----------------------------------------------------------------------------------------------------
  26.        ''' <summary>
  27.        ''' Prevents a default instance of the <see cref="NativeMethods"/> class from being created.
  28.        ''' </summary>
  29.        ''' ----------------------------------------------------------------------------------------------------
  30.        <DebuggerNonUserCode>
  31.        Private Sub New()
  32.        End Sub
  33.  
  34.        ''' ----------------------------------------------------------------------------------------------------
  35.        ''' <summary>
  36.        ''' Closes the specified object handle.
  37.        ''' </summary>
  38.        ''' ----------------------------------------------------------------------------------------------------
  39.        ''' <remarks>
  40.        ''' <see href="https://msdn.microsoft.com/es-es/library/windows/desktop/ms724211%28v=vs.85%29.aspx"/>
  41.        ''' </remarks>
  42.        ''' ----------------------------------------------------------------------------------------------------
  43.        ''' <param name="hObject">
  44.        ''' The handle to the object being closed.
  45.        ''' </param>
  46.        ''' ----------------------------------------------------------------------------------------------------
  47.        ''' <returns>
  48.        ''' If the function succeeds, the return value is <see langword="True"/>.
  49.        ''' <para></para>
  50.        ''' If the function fails, the return value is <see langword="False"/>.
  51.        ''' <para></para>
  52.        ''' To get extended error information, call <see cref="Marshal.GetLastWin32Error"/>.
  53.        ''' </returns>
  54.        ''' ----------------------------------------------------------------------------------------------------
  55.        <SuppressUnmanagedCodeSecurity>
  56.        <ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)>
  57.        <DllImport("Kernel32.dll", SetLastError:=True)>
  58.        Friend Shared Function CloseHandle(hObject As SafeHandle
  59.        ) As <MarshalAs(UnmanagedType.Bool)> Boolean
  60.        End Function
  61.  
  62.        ''' ----------------------------------------------------------------------------------------------------
  63.        ''' <summary>
  64.        ''' Opens an existing thread object.
  65.        ''' <para></para>
  66.        ''' When done, don't forget to call <see cref="NativeMethods.CloseHandle"/> function.
  67.        ''' </summary>
  68.        ''' ----------------------------------------------------------------------------------------------------
  69.        ''' <remarks>
  70.        ''' <see href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms684335%28v=vs.85%29.aspx"/>
  71.        ''' </remarks>
  72.        ''' ----------------------------------------------------------------------------------------------------
  73.        ''' <param name="desiredAccess">
  74.        ''' The access to the thread object.
  75.        ''' <para></para>
  76.        ''' This access right is checked against the security descriptor for the thread.
  77.        ''' </param>
  78.        '''
  79.        ''' <param name="inheritHandle">
  80.        ''' If this value is <see langword="True"/>, processes created by this process will inherit the handle.
  81.        ''' <para></para>
  82.        ''' Otherwise, the processes do not inherit this handle.
  83.        ''' </param>
  84.        '''
  85.        ''' <param name="threadId">
  86.        ''' The identifier of the thread to be opened.
  87.        ''' </param>
  88.        ''' ----------------------------------------------------------------------------------------------------
  89.        ''' <returns>
  90.        ''' If the function succeeds, the return value is an open handle to the specified thread.
  91.        ''' <para></para>
  92.        ''' If the function fails, the return value is <see cref="IntPtr.Zero"/>.
  93.        ''' <para></para>
  94.        ''' To get extended error information, call <see cref="Marshal.GetLastWin32Error"/>.
  95.        ''' </returns>
  96.        ''' ----------------------------------------------------------------------------------------------------
  97.        <DllImport("Kernel32.dll", SetLastError:=True)>
  98.        Friend Shared Function OpenThread(desiredAccess As ThreadAccessRights,
  99.          <MarshalAs(UnmanagedType.Bool)> inheritHandle As Boolean,
  100.                                          threadId As UInteger
  101.        ) As SafeAccessTokenHandle
  102.        End Function
  103.  
  104.        ''' ----------------------------------------------------------------------------------------------------
  105.        ''' <summary>
  106.        ''' Decrements a thread's suspend count.
  107.        ''' <para></para>
  108.        ''' When the suspend count is decremented to zero, the execution of the thread is resumed.
  109.        ''' </summary>
  110.        ''' ----------------------------------------------------------------------------------------------------
  111.        ''' <remarks>
  112.        ''' <see href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms685086%28v=vs.85%29.aspx"/>
  113.        ''' </remarks>
  114.        ''' ----------------------------------------------------------------------------------------------------
  115.        ''' <param name="hThread">
  116.        ''' A handle to the thread to be resumed.
  117.        ''' <para></para>
  118.        ''' The handle must have the <see cref="ThreadAccessRights.SuspendResume"/> access right
  119.        ''' </param>
  120.        ''' ----------------------------------------------------------------------------------------------------
  121.        ''' <returns>
  122.        ''' If the function succeeds, the return value is the thread's previous suspend count; otherwise, it is <c>-1</c>.
  123.        ''' <para></para>
  124.        ''' To get extended error information, call <see cref="Marshal.GetLastWin32Error"/>.
  125.        ''' </returns>
  126.        ''' ----------------------------------------------------------------------------------------------------
  127.        <DllImport("Kernel32.dll", SetLastError:=True)>
  128.        Friend Shared Function ResumeThread(hThread As SafeAccessTokenHandle
  129.        ) As Integer
  130.        End Function
  131.  
  132.        ''' ----------------------------------------------------------------------------------------------------
  133.        ''' <summary>
  134.        ''' Suspends the specified 32-Bit thread.
  135.        ''' <para></para>
  136.        ''' A 32-bit application can suspend a 64-Bit thread using the <see cref="NativeMethods.SuspendThread64"/> function.
  137.        ''' </summary>
  138.        ''' ----------------------------------------------------------------------------------------------------
  139.        ''' <remarks>
  140.        ''' <see href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms687400%28v=vs.85%29.aspx"/>
  141.        ''' </remarks>
  142.        ''' ----------------------------------------------------------------------------------------------------
  143.        ''' <param name="hThread">
  144.        ''' A handle to the thread that is to be suspended.
  145.        ''' <para></para>
  146.        ''' The handle must have the <see cref="ThreadAccessRights.SuspendResume"/> access right
  147.        ''' </param>
  148.        ''' ----------------------------------------------------------------------------------------------------
  149.        ''' <returns>
  150.        ''' If the function succeeds, the return value is the thread's previous suspend count; otherwise, it is <c>-1</c>.
  151.        ''' <para></para>
  152.        ''' To get extended error information, call <see cref="Marshal.GetLastWin32Error"/>.
  153.        ''' </returns>
  154.        ''' ----------------------------------------------------------------------------------------------------
  155.        <DllImport("Kernel32.dll", EntryPoint:="Wow64SuspendThread", SetLastError:=True)>
  156.        Friend Shared Function SuspendThread32(hThread As SafeAccessTokenHandle
  157.        ) As Integer
  158.        End Function
  159.  
  160.        ''' ----------------------------------------------------------------------------------------------------
  161.        ''' <summary>
  162.        ''' Suspends the specified 64-Bit thread.
  163.        ''' <para></para>
  164.        ''' A 64-bit application can suspend a 32-Bit thread using the <see cref="NativeMethods.SuspendThread32"/> function.
  165.        ''' </summary>
  166.        ''' ----------------------------------------------------------------------------------------------------
  167.        ''' <remarks>
  168.        ''' <see href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms686345%28v=vs.85%29.aspx"/>
  169.        ''' </remarks>
  170.        ''' ----------------------------------------------------------------------------------------------------
  171.        ''' <param name="hThread">
  172.        ''' A handle to the thread that is to be suspended.
  173.        ''' <para></para>
  174.        ''' The handle must have the <see cref="ThreadAccessRights.SuspendResume"/> access right
  175.        ''' </param>
  176.        ''' ----------------------------------------------------------------------------------------------------
  177.        ''' <returns>
  178.        ''' If the function succeeds, the return value is the thread's previous suspend count; otherwise, it is <c>-1</c>.
  179.        ''' <para></para>
  180.        ''' To get extended error information, call <see cref="Marshal.GetLastWin32Error"/>.
  181.        ''' </returns>
  182.        ''' ----------------------------------------------------------------------------------------------------
  183.        <DllImport("Kernel32.dll", EntryPoint:="SuspendThread", SetLastError:=True)>
  184.        Friend Shared Function SuspendThread64(hThread As SafeAccessTokenHandle
  185.        ) As Integer
  186.        End Function
  187.  
  188.    End Class
  189.  
  190. End Namespace

ThreadAccessRights .vb
Código
  1. #Region " Thread Access-Rights "
  2.  
  3. Namespace DevCase.Interop.Unmanaged.Win32.Enums
  4.  
  5.    ''' ----------------------------------------------------------------------------------------------------
  6.    ''' <summary>
  7.    ''' Specifies thread-specific access rights.
  8.    ''' </summary>
  9.    ''' ----------------------------------------------------------------------------------------------------
  10.    ''' <remarks>
  11.    ''' <see href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms686769%28v=vs.85%29.aspx"/>
  12.    ''' </remarks>
  13.    ''' ----------------------------------------------------------------------------------------------------
  14.    <Flags>
  15.    Public Enum ThreadAccessRights As Integer
  16.  
  17.        ''' <summary>
  18.        ''' Required to delete the object.
  19.        ''' </summary>
  20.        Delete = CInt(StandardAccessRights.Delete)
  21.  
  22.        ''' <summary>
  23.        ''' Required to read information in the security descriptor for the object, not including the information in the <c>SACL</c>.
  24.        ''' <para></para>
  25.        ''' To read or write the <c>SACL</c>, you must request the <c>ACCESS_SYSTEM_SECURITY</c> access right.
  26.        ''' </summary>
  27.        ReadControl = CInt(StandardAccessRights.ReadControl)
  28.  
  29.        ''' <summary>
  30.        ''' Required to modify the <c>DACL</c> in the security descriptor for the object.
  31.        ''' </summary>
  32.        WriteDac = CInt(StandardAccessRights.WriteDac)
  33.  
  34.        ''' <summary>
  35.        ''' Required to change the owner in the security descriptor for the object.
  36.        ''' </summary>
  37.        WriteOwner = CInt(StandardAccessRights.WriteOwner)
  38.  
  39.        ''' <summary>
  40.        ''' The right to use the object for synchronization.
  41.        ''' <para></para>
  42.        ''' This enables a thread to wait until the object is in the signaled state.
  43.        ''' </summary>
  44.        Synchronize = CInt(StandardAccessRights.Synchronize)
  45.  
  46.        ''' <summary>
  47.        ''' Required to terminate a thread
  48.        ''' using <see cref="NativeMethods.TerminateThread"/> function.
  49.        ''' </summary>
  50.        Terminate = &H1
  51.  
  52.        ''' <summary>
  53.        ''' Required to suspend or resume a thread
  54.        ''' using <see cref="NativeMethods.SuspendThread32"/>,
  55.        ''' <see cref="NativeMethods.SuspendThread64"/> and <see cref="NativeMethods.ResumeThread"/> functions.
  56.        ''' </summary>
  57.        SuspendResume = &H2
  58.  
  59.        ''' <summary>
  60.        ''' Required to read the context of a thread using <c>GetThreadContext</c> function.
  61.        ''' </summary>
  62.        GetContext = &H8
  63.  
  64.        ''' <summary>
  65.        ''' Required to write the context of a thread using <c>SetThreadContext</c> function.
  66.        ''' </summary>
  67.        SetContext = &H10
  68.  
  69.        ''' <summary>
  70.        ''' Required to set certain information in the thread object.
  71.        ''' </summary>
  72.        SetInformation = &H20
  73.  
  74.        ''' <summary>
  75.        ''' Required to read certain information from the thread object,
  76.        ''' such as the exit code using <see cref="NativeMethods.GetExitCodeThread"/> function.
  77.        ''' </summary>
  78.        QueryInformation = &H40
  79.  
  80.        ''' <summary>
  81.        ''' Required to set the impersonation token for a thread
  82.        ''' using <c>SetThreadToken</c> function.
  83.        ''' </summary>
  84.        SetThreadToken = &H80
  85.  
  86.        ''' <summary>
  87.        ''' Required to use a thread's security information directly without calling it by using a
  88.        ''' communication mechanism that provides impersonation services.
  89.        ''' </summary>
  90.        Impersonate = &H100
  91.  
  92.        ''' <summary>
  93.        ''' Required for a server thread that impersonates a client.
  94.        ''' </summary>
  95.        DirectImpersonation = &H200
  96.  
  97.        ''' <summary>
  98.        ''' Required to set certain information in the thread object.
  99.        ''' <para></para>
  100.        ''' A handle that has the <see cref="ThreadAccessRights.SetInformation"/> access right
  101.        ''' is automatically granted <see cref="ThreadAccessRights.SetLimitedInformation"/>.
  102.        ''' </summary>
  103.        SetLimitedInformation = &H400
  104.  
  105.        ''' <summary>
  106.        ''' Required to read certain information from the thread objects.
  107.        ''' <para></para>
  108.        ''' A handle that has the <see cref="ThreadAccessRights.QueryInformation"/> access right
  109.        ''' is automatically granted <see cref="ThreadAccessRights.QueryLimitedInformation"/>.
  110.        ''' </summary>
  111.        QueryLimitedInformation = &H800
  112.  
  113.    End Enum
  114.  
  115. End Namespace
  116.  
  117. #End Region

StandardAccessRights .vb
Código
  1. #Region " Standard Access Rights "
  2.  
  3. Namespace DevCase.Interop.Unmanaged.Win32.Enums
  4.  
  5.    ''' ----------------------------------------------------------------------------------------------------
  6.    ''' <summary>
  7.    ''' Specifies the access rights that correspond to operations specific to a standard object type.
  8.    ''' </summary>
  9.    ''' ----------------------------------------------------------------------------------------------------
  10.    ''' <remarks>
  11.    ''' <see href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa379607(v=vs.85).aspx"/>
  12.    ''' </remarks>
  13.    ''' ----------------------------------------------------------------------------------------------------
  14.    <Flags>
  15.    Public Enum StandardAccessRights As UInteger
  16.  
  17.        ''' <summary>
  18.        ''' The right to delete the object.
  19.        ''' </summary>
  20.        Delete = &H10000
  21.  
  22.        ''' <summary>
  23.        ''' The right to read the information in the object's security descriptor,
  24.        ''' not including the information in the system access control list (SACL).
  25.        ''' </summary>
  26.        ReadControl = &H20000
  27.  
  28.        ''' <summary>
  29.        ''' The right to modify the discretionary access control list (DACL) in the object's security descriptor.
  30.        ''' </summary>
  31.        WriteDac = &H40000
  32.  
  33.        ''' <summary>
  34.        ''' The right to change the owner in the object's security descriptor.
  35.        ''' </summary>
  36.        WriteOwner = &H80000
  37.  
  38.        ''' <summary>
  39.        ''' The right to use the object for synchronization.
  40.        ''' <para></para>
  41.        ''' This enables a thread to wait until the object is in the signaled state.
  42.        ''' <para></para>
  43.        ''' Some object types do not support this access right.
  44.        ''' </summary>
  45.        Synchronize = &H100000
  46.  
  47.        ''' <summary>
  48.        ''' Combines <see cref="StandardAccessRights.Delete"/>,
  49.        ''' <see cref="StandardAccessRights.ReadControl"/>, <see cref="StandardAccessRights.WriteDac"/>, and
  50.        ''' <see cref="StandardAccessRights.WriteOwner"/> access.
  51.        ''' </summary>
  52.        StandardRightsRequired = &HF0000
  53.  
  54.        ''' <summary>
  55.        ''' Same as <see cref="StandardAccessRights.ReadControl"/>.
  56.        ''' </summary>
  57.        StandardRightsRead = StandardAccessRights.ReadControl
  58.  
  59.        ''' <summary>
  60.        ''' Same as <see cref="StandardAccessRights.ReadControl"/>.
  61.        ''' </summary>
  62.        StandardRightsWrite = StandardAccessRights.ReadControl
  63.  
  64.        ''' <summary>
  65.        ''' Same as <see cref="StandardAccessRights.ReadControl"/>.
  66.        ''' </summary>
  67.        StandardRightsExecute = StandardAccessRights.ReadControl
  68.  
  69.        ''' <summary>
  70.        ''' Combines <see cref="StandardAccessRights.Delete"/>,
  71.        ''' <see cref="StandardAccessRights.ReadControl"/>, <see cref="StandardAccessRights.WriteDac"/>,
  72.        ''' <see cref="StandardAccessRights.WriteOwner"/>, and <see cref="StandardAccessRights.Synchronize"/> access.
  73.        ''' </summary>
  74.        StandardRightsAll = &H1F0000
  75.  
  76.    End Enum
  77.  
  78. End Namespace
  79.  
  80. #End Region
  81.  

PauseProcessObject.vb
« Última modificación: 15 Septiembre 2020, 15:33 por Eleкtro » En línea


Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: [Ayuda] Prevenir que un Programa se Minimize o se cambie el foco de Windows.
« Respuesta #5 en: 15 Septiembre 2020, 15:34 »

PauseProcessObject.vb
Código
  1. Imports DevCase.Core.IPC.Tools
  2. Imports Microsoft.Win32.SafeHandles
  3.  
  4. Namespace DevCase.Core.IPC
  5.  
  6.    ''' ----------------------------------------------------------------------------------------------------
  7.    ''' <summary>
  8.    ''' Represents the return value as a result of a call to
  9.    ''' <see cref="UIAutomationUtil.PauseProcess(Integer)"/> and
  10.    ''' <see cref="UIAutomationUtil.PauseThread"/> functions.
  11.    ''' </summary>
  12.    ''' ----------------------------------------------------------------------------------------------------
  13.    Public NotInheritable Class PauseProcessObject : Implements IDisposable
  14.  
  15. #Region " Properties "
  16.  
  17.        ''' <summary>
  18.        ''' Gets the process id. (PID)
  19.        ''' </summary>
  20.        <Browsable(True)>
  21.        Public ReadOnly Property PID As Integer
  22.  
  23.        ''' ----------------------------------------------------------------------------------------------------
  24.        ''' <summary>
  25.        ''' A collection of openthread-handles that points to the suspended thread handles of the process.
  26.        ''' </summary>
  27.        ''' ----------------------------------------------------------------------------------------------------
  28.        <Browsable(False)>
  29.        Friend handles_ As Collection(Of SafeAccessTokenHandle)
  30.  
  31. #End Region
  32.  
  33. #Region " Constructors "
  34.  
  35.        ''' ----------------------------------------------------------------------------------------------------
  36.        ''' <summary>
  37.        ''' Prevents a default instance of the <see cref="UIAutomationUtil"/> class from being created.
  38.        ''' </summary>
  39.        ''' ----------------------------------------------------------------------------------------------------
  40.        <DebuggerNonUserCode>
  41.        Private Sub New()
  42.        End Sub
  43.  
  44.        ''' ----------------------------------------------------------------------------------------------------
  45.        ''' <summary>
  46.        ''' Initializes a new instance of the <see cref="PauseProcessObject"/> class.
  47.        ''' </summary>
  48.        ''' ----------------------------------------------------------------------------------------------------
  49.        <Browsable(False)>
  50.        <DebuggerStepThrough>
  51.        Friend Sub New(pid As Integer)
  52.            Me.PID = pid
  53.            Me.handles_ = New Collection(Of SafeAccessTokenHandle)
  54.        End Sub
  55.  
  56. #End Region
  57.  
  58. #Region " IDisposable Implementation "
  59.  
  60.        ''' ----------------------------------------------------------------------------------------------------
  61.        ''' <summary>
  62.        ''' Flag to detect redundant calls when disposing.
  63.        ''' </summary>
  64.        ''' ----------------------------------------------------------------------------------------------------
  65.        Private isDisposed As Boolean = False
  66.  
  67.        ''' ----------------------------------------------------------------------------------------------------
  68.        ''' <summary>
  69.        ''' Releases all the resources used by this instance.
  70.        ''' </summary>
  71.        ''' ----------------------------------------------------------------------------------------------------
  72.        <DebuggerStepThrough>
  73.        Public Sub Dispose() Implements IDisposable.Dispose
  74.            Me.Dispose(isDisposing:=True)
  75.            GC.SuppressFinalize(Me)
  76.        End Sub
  77.  
  78.        ''' ----------------------------------------------------------------------------------------------------
  79.        ''' <summary>
  80.        ''' Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
  81.        ''' </summary>
  82.        ''' ----------------------------------------------------------------------------------------------------
  83.        ''' <param name="isDisposing">
  84.        ''' <see langword="True"/>  to release both managed and unmanaged resources;
  85.        ''' <see langword="False"/> to release only unmanaged resources.
  86.        ''' </param>
  87.        ''' ----------------------------------------------------------------------------------------------------
  88.        <DebuggerStepThrough>
  89.        Private Sub Dispose(isDisposing As Boolean)
  90.            If (Not Me.isDisposed) AndAlso (isDisposing) Then
  91.                For Each item As SafeAccessTokenHandle In Me.handles_
  92.                    If Not item?.IsClosed Then
  93.                        Try : item.Close() : Catch : End Try
  94.                    End If
  95.                Next
  96.                Me.handles_.Clear()
  97.                Me.handles_ = Nothing
  98.            End If
  99.            Me.isDisposed = True
  100.        End Sub
  101.  
  102.        ''' ----------------------------------------------------------------------------------------------------
  103.        ''' <summary>
  104.        ''' Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.
  105.        ''' </summary>
  106.        ''' ----------------------------------------------------------------------------------------------------
  107.        Protected Overrides Sub Finalize()
  108.            Me.Dispose(False)
  109.            MyBase.Finalize()
  110.        End Sub
  111.  
  112. #End Region
  113.  
  114.    End Class
  115.  
  116. End Namespace

Modo de empleo:
Código
  1. Dim pid As Integer = Process.GetProcessesByName("hearthstone").Single().Id
  2.  
  3. ' Pause the process.
  4. Console.WriteLine($"Pausing process with PID: {pid}")
  5. Using ppo As PauseProcessObject = UIAutomationUtil.PauseProcess(pid)
  6.    ' Wait 5 seconds to let you observe that the process is paused...
  7.    Console.WriteLine($"Sleeping for 5 seconds...")
  8.    Thread.Sleep(5000)
  9.  
  10.    ' Resume the process.
  11.    Console.WriteLine($"Resuming process with PID: {ppo.PID}")
  12.    UIAutomationUtil.ResumeProcess(ppo)
  13. End Using

Saludos.
En línea


**Aincrad**


Desconectado Desconectado

Mensajes: 501



Ver Perfil
Re: [Ayuda] Prevenir que un Programa se Minimize o se cambie el foco de Windows.
« Respuesta #6 en: 15 Septiembre 2020, 16:33 »

¿Pero lo estás jugando a pantalla completa dedicada, o ventana sin bordes?...

De todas formas si ese problema es tal y como dices, entonces lo más simple para prevenirlo sería desarrollar un cheat sin interfaz gráfica y así evitar el problema. Si no puedes vencer a tu enemigo, acomódate a él. xD

También puedes probar a utilizar la función de Windows 'SetWindowLongPtr' sobre la ventana de tu aplicación:
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowlongptra

con la combinación de estilos extendidos de ventana: WS_EX_TOPMOST + WS_EX_NOACTIVATE:
https://docs.microsoft.com/en-us/windows/win32/winmsg/extended-window-styles

Teoricamente con esa combinación de estilos puedes superponer una ventana sobre las demás (top most) sin activar el foco de entrada de dicha ventana.


Gracias bro, como siempre este es el único lugar donde siempre logro resolver completamente mis dudas gracias ti.

Como siempre tu conocimiento en .Net me dejaron boca abierta.... he quedado como que wtf.

Has dado justo en el clavo. justo lo que necesitaba.  Así lo resolví :

Funciona Perfectamente. Se puede interactuar con el cheat encima del juego y no perder el foco de la ventana del juego.

Código
  1. #Region " No Windows Focus "
  2.  
  3.    Protected Overrides ReadOnly Property ShowWithoutActivation As Boolean
  4.        Get
  5.            Return True
  6.        End Get
  7.    End Property
  8.  
  9.    Private Const WS_EX_TOPMOST As Integer = &H8
  10.  
  11.    Private Const WS_THICKFRAME As Integer = &H40000
  12.    Private Const WS_CHILD As Integer = &H40000000
  13.    Private Const WS_EX_NOACTIVATE As Integer = &H8000000
  14.    Private Const WS_EX_TOOLWINDOW As Integer = &H80
  15.  
  16.    Protected Overrides ReadOnly Property CreateParams As CreateParams
  17.        Get
  18.            Dim createParamsA As CreateParams = MyBase.CreateParams
  19.            createParamsA.ExStyle = createParamsA.ExStyle Or WS_EX_TOPMOST Or WS_EX_NOACTIVATE Or WS_EX_TOOLWINDOW
  20.            Return createParamsA
  21.        End Get
  22.    End Property
  23.  
  24. #End Region



Citar
No se a que clase te refieres, pero esto te debería servir para suspender y reanudar el proceso:

https://foro.elhacker.net/net_c_vbnet_asp/libreria_de_snippets_para_vbnet_compartan_aqui_sus_snippets-t378770.0.html;msg1859297#msg1859297

Aquí te dejo una actualización del código:


Por alguna razon tu clase no me funcionaba, pero esta actualizacion de codigo fuciona perfectamente. lo malo es q el juego se desconecta del servidor. y pos pausar el proceso tampoco funciona.

Este era mi actual codigo para pausar y reanudar procesos :

ProcessPausator.vb

Código
  1. Public Class ProcessPausator
  2.  
  3. #Region " Pinvoke "
  4.  
  5.    Public Declare Function OpenThread Lib "kernel32.dll" (ByVal dwDesiredAccess As ThreadAccess, ByVal bInheritHandle As Boolean, ByVal dwThreadId As UInteger) As IntPtr
  6.    Public Declare Function SuspendThread Lib "kernel32.dll" (ByVal hThread As IntPtr) As UInteger
  7.    Public Declare Function ResumeThread Lib "kernel32.dll" (ByVal hThread As IntPtr) As UInteger
  8.    Public Declare Function CloseHandle Lib "kernel32.dll" (ByVal hHandle As IntPtr) As Boolean
  9.  
  10. #End Region
  11.  
  12. #Region " Enum "
  13.  
  14.    Public Enum ThreadAccess As Integer
  15.        TERMINATE = (&H1)
  16.        SUSPEND_RESUME = (&H2)
  17.        GET_CONTEXT = (&H8)
  18.        SET_CONTEXT = (&H10)
  19.        SET_INFORMATION = (&H20)
  20.        QUERY_INFORMATION = (&H40)
  21.        SET_THREAD_TOKEN = (&H80)
  22.        IMPERSONATE = (&H100)
  23.        DIRECT_IMPERSONATION = (&H200)
  24.    End Enum
  25.  
  26. #End Region
  27.  
  28.    Public Shared Function PauseThread(ByRef Process_Name As String) As Boolean
  29.  
  30.        If Process_Name.ToLower.EndsWith(".exe") Then Process_Name = Process_Name.Substring(0, Process_Name.Length - 4)
  31.  
  32.        Dim proc() As Process = Process.GetProcessesByName(Process_Name)
  33.  
  34.        If Not proc.Length = 0 Then
  35.            SuspendProcess(proc(0))
  36.            Return True
  37.        End If
  38.        Return False
  39.    End Function
  40.  
  41.    Public Shared Function ResumeThread(ByRef Process_Name As String) As Boolean
  42.  
  43.        If Process_Name.ToLower.EndsWith(".exe") Then Process_Name = Process_Name.Substring(0, Process_Name.Length - 4)
  44.  
  45.        Dim proc() As Process = Process.GetProcessesByName(Process_Name)
  46.  
  47.        If Not proc.Length = 0 Then
  48.            ResumeProcess(proc(0))
  49.            Return True
  50.        End If
  51.        Return False
  52.    End Function
  53.  
  54.    Private Shared Sub SuspendProcess(ByVal process As System.Diagnostics.Process)
  55.        For Each t As ProcessThread In process.Threads
  56.            Dim th As IntPtr = OpenThread(ThreadAccess.SUSPEND_RESUME, False, t.Id)
  57.            If Not th = IntPtr.Zero Then
  58.                SuspendThread(th)
  59.                CloseHandle(th)
  60.            End If
  61.        Next
  62.    End Sub
  63.  
  64.    Private Shared Sub ResumeProcess(ByVal process As System.Diagnostics.Process)
  65.        For Each t As ProcessThread In process.Threads
  66.            Dim th As IntPtr = OpenThread(ThreadAccess.SUSPEND_RESUME, False, t.Id)
  67.            If Not th = IntPtr.Zero Then
  68.                ResumeThread(th)
  69.                CloseHandle(th)
  70.            End If
  71.        Next
  72.    End Sub
  73.  
  74. End Class
  75.  

No es mucho pero es trabajo honesto .... pero si lo comparo a tu code.....

PD: Que opinas de mi mejor proyecto , que he hecho hasta ahora? .

es mi obra maestra : https://github.com/DestroyerDarkNess/DestroyerProtection



« Última modificación: 15 Septiembre 2020, 16:36 por **Aincrad** » En línea


Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: [Ayuda] Prevenir que un Programa se Minimize o se cambie el foco de Windows.
« Respuesta #7 en: 15 Septiembre 2020, 17:34 »

Por alguna razon tu clase no me funcionaba, pero esta actualizacion de codigo fuciona perfectamente.

Si, es que... pff, ese post es del año 2013, creo que por aquél entonces solo llevaba 1 año o quizás menos con .NET, algún fallo tendrá ese código si dices que no funciona correctamente (aunque yo todo lo que publiqué también lo testeé).

No es mucho pero es trabajo honesto .... pero si lo comparo a tu code.....

Coño, lo mio también es trabajo honesto, literalmente todo el código que te he mostrado lo hice hoy para ayudarte xD (vale que aparte intento comercializar la libreria, pero eso es otro tema)

PD: Que opinas de mi mejor proyecto , que he hecho hasta ahora? .

es mi obra maestra : https://github.com/DestroyerDarkNess/DestroyerProtection

Bueno, aunque también he curioseado con metodologías anti-debugger y anti-virtualization y tengo hechas algunas implementaciones en .NET (bastante básicas), lo cierto es que la protección de código / ingeniería inversa no es mi especialidad así que lo que yo pueda opinar no haría suficiente mérito a tu labor.

Leyendo el Readme.md del repositorio se nota que es un trabajo bastante amplio, lleno de características. Me ha parecido curiosa la detección de DnSpy, pero te olvidas de un par más de decompiladores bastante populares que quizás quieras añadirlos a las detecciones: ILSpy, SAE (Simple Assembly Explorer) y .NET Reflector.
¿Y que hay de otras máquinas virtuales diferentes a VMWare y VirtualPC?, QEMU se utiliza mucho también. Adicionálmente a esto veo que faltaría protección anti-debug remota para bloquear el acceso de paquetes de red a programas como Fiddler, Wireshark o WPE Pro.

Solo son ideas que lanzo. Gran trabajo. ;-)

Saludos!
« Última modificación: 15 Septiembre 2020, 17:37 por Eleкtro » En línea


**Aincrad**


Desconectado Desconectado

Mensajes: 501



Ver Perfil
Re: [Ayuda] Prevenir que un Programa se Minimize o se cambie el foco de Windows.
« Respuesta #8 en: 15 Septiembre 2020, 18:19 »

Coño, lo mio también es trabajo honesto, literalmente todo el código que te he mostrado lo hice hoy para ayudarte xD (vale que aparte intento comercializar la libreria, pero eso es otro tema)

Siempre ayudas de verdad. y aquellos testamentos que me ponías me ayudaron bastante.  deberían regresarte el Moderador.... como mínimo.



Citar
Leyendo el Readme.md del repositorio se nota que es un trabajo bastante amplio, lleno de características. Me ha parecido curiosa la detección de DnSpy

La deteccion es realmente sencilla. el Dnspy y el D4dot crean carpetas en Appdata-local. para guardar su configuracion , solo reviso si la carpeta existe. y listo. sin contar la deteccion de los procesos que hago ...



Citar
pero te olvidas de un par más de decompiladores bastante populares que quizás quieras añadirlos a las detecciones: ILSpy, SAE (Simple Assembly Explorer) y .NET Reflector.
¿Y que hay de otras máquinas virtuales diferentes a VMWare y VirtualPC?, QEMU se utiliza mucho también. Adicionálmente a esto veo que faltaría protección anti-debug remota para bloquear el acceso de paquetes de red a programas como Fiddler, Wireshark o WPE Pro.


Intentare agregarlos, aunque siempre la mejor protección para .Net, en mi experiencia es Obfuzcar bien el código . de manera de dejarlo completamente Irreconocible.

Ya lo otro seria pasarle un buen Packer. como por ejemplo Enigma o VMProtect.

básicamente la mayor parte del proyecto es gracias a esta guia :

An Anti-Reverse Engineering Guide

En línea


tincopasan


Desconectado Desconectado

Mensajes: 1.213

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: [Ayuda] Prevenir que un Programa se Minimize o se cambie el foco de Windows.
« Respuesta #9 en: 15 Septiembre 2020, 22:06 »

había pensado en hacerle un gancho a SetWindowsHookEx  y ver un enlace a WH_CALLWNDPROC para ver de manejar WM_SETFOCUS o WM_KILLFOCUS . Igual no es algo que muera por hacer, con respecto a.net que sea muy bueno el protector, porque es un lenguaje muy facil de aplicarle ingeniería, de hecho lo odio porque se supone de pago y es facil de robar los códigos.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines