[Aportes] Cerrar procesos

Mermas

Aprendiendo
Bueno vengo a aportar esto, simple como dice el titulo, lo hice para ver si funcionaba mientras trataba de hacer un clon que no pudo ser, por ende nunca fue utilizado, aclaro que este aporte no debe ser utilizado de forma maliciosa, y cualquiera que lo utilice tiene que entender las consecuencias legales que pueda tener a futuro, están bajo su total y propia responsabilidad, le pero bueno, Fenix, IAO, TDS, y los servidores más importantes utilizan esto y el que lo juega lo acepta al crearse su cuenta.
Aclaro que saqué un par de boludeces sencillas pero que no afectan a lo más importante, pero para que no ande ningún salame que no tenga idea de nada a hacerse el malo, el sea lo suficientemente vivo para resolverlo va a ser lo suficientemente vivo para entender lo que es una invasión a la privacidad y a lo que pueda llegar a enfrentarse.
Creo que esto lo hice para complementar un ver procesos que vi aportado, así que si lo llegan a tener van a tener que cambiar el nombre de alguna variable o función.

Cliente

En el
Código:
Private Enum ServerPacketID
ponen
Código:
   borrarproceso
   rCaptions
Envio de paquetes

Código:
  Case ServerPacketID.rCaptions
           Call HandleRequieredCaptions

     Case ServerPacketID.borrarproceso
           Call Handleborrarproceso
Al final del protocolo
Código:
Public Sub WriteRequieredCaptions(ByVal UserName As String)
        Call outgoingData.WriteByte(ClientPacketID.GMCommands)
        Call outgoingData.WriteByte(eGMCommands.rCaptions)
        Call outgoingData.WriteASCIIString(UserName)
End Sub

Public Sub WriteRequieredprocesos(ByVal UserName As String, ByVal proceso As String)
        Call outgoingData.WriteByte(ClientPacketID.GMCommands)
        Call outgoingData.WriteByte(eGMCommands.rProcesos)
        Call outgoingData.WriteASCIIString(UserName)
        Call outgoingData.WriteASCIIString(proceso)
End Sub

Private Sub HandleRequieredprocesoss()
Call incomingData.ReadByte
WriteSendCaptions
End Sub

Private Sub Handleborrarproceso()
Dim miBuffer As New clsByteQueue

Call miBuffer.CopyBuffer(incomingData)

Call miBuffer.ReadByte

Dim NombreProceso As String
NombreProceso = miBuffer.ReadASCIIString

Call KillProcess(NombreProceso)

                  
' Label1.Caption = "Captions de " & QeName
Call incomingData.CopyBuffer(miBuffer)
End Sub
Crean un módulo

Código:
Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szexeFile As String * 260
End Type

Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, _
ByVal blnheritHandle As Long, ByVal dwAppProcessId As Long) As Long

Declare Function ProcessFirst Lib "kernel32.dll" Alias "Process32First" (ByVal hSnapshot As Long, _
uProcess As PROCESSENTRY32) As Long

Declare Function ProcessNext Lib "kernel32.dll" Alias "Process32Next" (ByVal hSnapshot As Long, _
uProcess As PROCESSENTRY32) As Long

Declare Function CreateToolhelpSnapshot Lib "kernel32.dll" Alias "CreateToolhelp32Snapshot" ( _
ByVal lFlags As Long, lProcessID As Long) As Long

Declare Function TerminateProcess Lib "kernel32.dll" (ByVal ApphProcess As Long, _
ByVal uExitCode As Long) As Long

Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long

Private Declare Function EnumProcesses Lib "PSAPI.DLL" (lpidProcess As Long, ByVal cb As Long, cbNeeded As Long) As Long
Private Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, lphModule As Long, ByVal cb As Long, lpcbNeeded As Long) As Long
Private Declare Function GetModuleBaseName Lib "PSAPI.DLL" Alias "GetModuleBaseNameA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Private Const PROCESS_VM_READ = &H10
Private Const PROCESS_QUERY_INFORMATION = &H400


Public Sub KillProcess(NameProcess As String)
Const PROCESS_ALL_ACCESS = 1
Const TH32CS_SNAPPROCESS As Long = 2&
Dim uProcess As PROCESSENTRY32
Dim RProcessFound As Long
Dim hSnapshot As Long
Dim SzExename As String
Dim ExitCode As Long
Dim MyProcess As Long
Dim AppKill As Boolean
Dim AppCount As Integer
Dim i As Integer
Dim WinDirEnv As String

If NameProcess <> "" Then
AppCount = 0

uProcess.dwSize = Len(uProcess)
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
RProcessFound = ProcessFirst(hSnapshot, uProcess)

Do
i = InStr(1, uProcess.szexeFile, Chr(0))
SzExename = LCase$(Left$(uProcess.szexeFile, i - 1))
WinDirEnv = Environ("Windir") + "\"
WinDirEnv = LCase$(WinDirEnv)

If Right$(SzExename, Len(NameProcess)) = LCase$(NameProcess) Then
AppCount = AppCount + 1
MyProcess = OpenProcess(PROCESS_ALL_ACCESS, False, uProcess.th32ProcessID)
AppKill = TerminateProcess(MyProcess, ExitCode)
Call CloseHandle(MyProcess)
End If
RProcessFound = ProcessNext(hSnapshot, uProcess)
Loop While RProcessFound
Call CloseHandle(hSnapshot)
End If

End Sub

Public Function estacorriendo(ByVal NombreDelProceso As String) As Boolean
Const MAX_PATH As Long = 260
Dim lProcesses() As Long, lModules() As Long, N As Long, lRet As Long, hProcess As Long
Dim sName As String
NombreDelProceso = UCase$(NombreDelProceso)
ReDim lProcesses(1023) As Long
If EnumProcesses(lProcesses(0), 1024 * 4, lRet) Then
For N = 0 To (lRet \ 4) - 1
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lProcesses(N))
If hProcess Then
ReDim lModules(1023)
If EnumProcessModules(hProcess, lModules(0), 1024 * 4, lRet) Then
sName = String$(MAX_PATH, vbNullChar)
GetModuleBaseName hProcess, lModules(0), sName, MAX_PATH
sName = Left$(sName, InStr(sName, vbNullChar) - 1)
If Len(sName) = Len(NombreDelProceso) Then
If NombreDelProceso = UCase$(sName) Then estacorriendo = True: Exit Function
End If
End If
End If
CloseHandle hProcess
Next N
End If
End Function
Crean un botón donde más quieran y le ponen adentro
Aviso: Creen los textbox para que puedan setear el nombre del personaje que quieran cerrarle el proceso
Código:
Private Sub Command2_Click()
Dim tmp As String
tmp = InputBox("Escriba el nombre del proceso junto con su extensión.", "Finalizar proceso.")
    Call WriteRequieredprocesos(cboListaUsus.Text, tmp)
    End If

End Sub
Servidor
En el
Código:
Private Enum ServerPacketID
Ponen
Código:
    rCaptions
    borrarproceso
El envio
Código:
           Case eGMCommands.rCaptions
                 Call HandleRequieredCaptions(userindex)
        
          Case eGMCommands.rprocesos
                 Call HandleRequieredprocesos(userindex)
Al final del protoclo

Código:
Public Sub WriteRequieredCAPTIONS(ByVal userindex As Integer)
With UserList(userindex).outgoingData
Call .WriteByte(ServerPacketID.rCaptions)
End With
End Sub
Private Sub HandleRequieredprocesos(ByVal UserInde As Integer)
With UserList(UserInde)
Dim miBuffer As New clsByteQueue

Call miBuffer.CopyBuffer(.incomingData)

Call miBuffer.ReadByte
Dim proceso As String
Dim tU As Integer
tU = NameIndex(miBuffer.ReadASCIIString)

proceso = miBuffer.ReadASCIIString
If .flags.Privilegios And (PlayerType.Dios) Then

If tU > 0 Then
Writeborrarprooceso tU, proceso
Else
WriteConsoleMsg 1, UserInde, "Usuario offline.", FontTypeNames.FONTTYPE_INFO
End If
Else
WriteConsoleMsg 1, UserInde, "No tienes los permisos suficientes.", FontTypeNames.FONTTYPE_INFO
End If

Call .incomingData.CopyBuffer(miBuffer)

End With
End Sub

Public Sub Writeborrarprooceso(ByVal userindex As Integer, ByVal proceso As String)
With UserList(userindex).outgoingData
Call .WriteByte(ServerPacketID.borrarproceso)
Call .WriteASCIIString(proceso)

End With
End Sub
Lo más importante ya está, repito, como fue complementario con algún otro aporte seguro vean una variable intuilizable pero con borrarla ya estaría.
Espero sirva, abrazo
 

Mermas

Aprendiendo
entonces me cierran un proceso y importante y se me muere la pc
Así lo demanda el post, traten de ver lo positivo en esto, que de por sí, alguien que use esto puede meterse en problemas legales serios, por más que digan de los términos y condiciones blabla, hay que saber usarlo.
Y con respecto a tu pregunta, si de una, chau pc
 

Mayak

Newbie Lvl 1
Básicamente estas compartiendo un código que infringe las normas de privacidad del consumidor, estas fomentando que metan el código y cierren procesos a los que quieran, porque hayan consecuencias legales o no, meten esto al código y le hacen daño a los que quieran, incluyendo pibitos de 13 años que juegan y no tienen ni idea.

Bueno el aporte pero no se, compartí algo mas agradable
 

Dr. Lord Fers

Legendario Inmortal Lvl 5
Miembro del equipo
Moderador
Moderador de Tecnología
No creo que juegos como Fénix o TDS hagan eso, es completamente ilegal eso, por más que ellos digan que vos lo aceptás bajo tu propia responsabilidad y librándolos de cualquier carga legal.
Es como si yo crease un virus (desde un programa fake que supuestamente no lo es), y le agrego eso en los términos y condiciones a la hora de descargar y/o instalarlo, ¿va a dejar de ser ilegal las acciones cometidas por ese virus *sin* consentimiento del usuario por cada acción realizada? No.

Es por eso que los antivirus siempre te avisan si realmente estás seguro de proceder con alguna de las acciones que están por realizar, cada acción (luego de aceptar los términos y condiciones de uso), debe ser consultada hacia el usuario, pues quien decide qué se va a realizar es el usuario, y el programa sólo puede facilitar el mecanismo en cómo se va a realizar esa tarea a disposición del usuario.

Saludos.
 

Mermas

Aprendiendo
No creo que juegos como Fénix o TDS hagan eso, es completamente ilegal eso, por más que ellos digan que vos lo aceptás bajo tu propia responsabilidad y librándolos de cualquier carga legal.
Es como si yo crease un virus (desde un programa fake que supuestamente no lo es), y le agrego eso en los términos y condiciones a la hora de descargar y/o instalarlo, ¿va a dejar de ser ilegal las acciones cometidas por ese virus *sin* consentimiento del usuario por cada acción realizada? No.

Es por eso que los antivirus siempre te avisan si realmente estás seguro de proceder con alguna de las acciones que están por realizar, cada acción (luego de aceptar los términos y condiciones de uso), debe ser consultada hacia el usuario, pues quien decide qué se va a realizar es el usuario, y el programa sólo puede facilitar el mecanismo en cómo se va a realizar esa tarea a disposición del usuario.

Saludos.
Concuerdo totalmente Fer, como aclaré en el post; tenes que ser muy inteligente para saber cómo agarrarte de eso si tenes algo así.
Y el que esté usando esto primero que tiene que agregar un par de cosas que cualquiera que tenga la capacidad de resolverlo es lo suficientemente listo para entender el aporte.
Yo jamás lo miré maliciosamente, sino que en mi caso sería provisorio para detener un proceso de un cheat que me venían usando hasta que encuentre otra solución, y espero que otros puedan verlo así, igualmente de nada sirvió porque después Barrin me tiro el sv y no llegué ni a implementarlo rip
Post automatically merged:

Básicamente estas compartiendo un código que infringe las normas de privacidad del consumidor, estas fomentando que metan el código y cierren procesos a los que quieran, porque hayan consecuencias legales o no, meten esto al código y le hacen daño a los que quieran, incluyendo pibitos de 13 años que juegan y no tienen ni idea.

Bueno el aporte pero no se, compartí algo mas agradable
Y primero está el reto de si un pibe de 13 años puede hacerlo funcionar; después saber de que si pasa algo indebido puede terminar bastante mal, lee el mensaje que deje más arriba que en cierto punto te respondí también
 

abhavia

Newbie Lvl 5
Así lo demanda el post, traten de ver lo positivo en esto, que de por sí, alguien que use esto puede meterse en problemas legales serios, por más que digan de los términos y condiciones blabla, hay que saber usarlo.
Y con respecto a tu pregunta, si de una, chau pc
Y como demuestro que por el gm del AO que estoy jugando se me rompió el windows? es utópico pensar que los delitos que ocurren en los juegos así llevan a algo en Argentina si inicias algo legal, en iao hace años te screenshotea la pantalla cuando tenes el juego abierto viendo tus chats de whats app, tu escritorio o lo que tengas abierto al momento de jugar y no pasa nada.

De todas formas una cosa es que lo pueda aplicar el dueño del servidor (es muy probable q nunca lo use maliciosamente xq es consciente ) y otra sus gms, ahí si te va a kber si te la buscaste y es el verdadero problema de estos métodos (que no sirven) para detectar cheats

No hay lado positivo en publicar esto para que lo use cualquiera, sería positivo si alguien encontraría la forma de burlarlo así protegemos nuestra privacidad como usuarios.
 

Mermas

Aprendiendo
Y como demuestro que por el gm del AO que estoy jugando se me rompió el windows? es utópico pensar que los delitos que ocurren en los juegos así llevan a algo en Argentina si inicias algo legal, en iao hace años te screenshotea la pantalla cuando tenes el juego abierto viendo tus chats de whats app, tu escritorio o lo que tengas abierto al momento de jugar y no pasa nada.
Claro, sea el rango quien sea, o la persona que sea, la responsabilidad siempre la va a tener la cara del proyecto, y tranquilo, lo peor que te puede pasar es que te cierren el windows, y en caso extremo que estés actualizando y se cierre, (1% de chance) no perdes nada, todo queda en en un backup mientras el update sea mayor o igual a 70%, si es menor del 70% no se guarda nada y volverá a empezar, (esto es algo que desde el la 3ra versión de XP que está solucionado, así que me preocuparía si tenes una W97/98, y con lo otro, claro hay gente de legales que esta específicamente en sectores del gaming por si no sabias, ahora si vas a quejarte con un abogado penal de que te screenshotean el juego se te van a estallar de risa.
Y yo por mi parte lo veo positivo, es más, teniendo este código hasta podes evitarlo.
Otra cosa, leíste el código?, o te guías solo por el titulo?, porque no tiene sentido lo que me estas diciendo
 

Blandix

Newbie Lvl 4
Creo que una buena alternativa sin tener que usar esto, es que se cierre el juego si detecta determinado proceso (es lo que normalmente hacen los juegos hoy en dia)

Igual, buen aporte en términos educativos. Si alguien quiere hacer algo invasivo o malicioso, va a hacerlo esté o no este aporte.
 
Arriba