Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: llAudioslavell en 22 Septiembre 2016, 16:31 pm



Título: Ocultar icono del area de notificacion
Publicado por: llAudioslavell en 22 Septiembre 2016, 16:31 pm
Hola a todos !! quisiera estar seguro de algo estimados, de que manera puedo ocultar por completo un icono del area de notificacion?? Haciendo hooking, inyectando dll y todo esos metodos, llegare a ocultar el icono que yo quiero ???? Necesito hacer esto utilizando cualquier metodo posible. He probado ya varios programas y ninguno me funciona.

Agradeceria bastante que me ayuden con esto ya que estoy en unos aprietos.
Muchas gracias de ante mano.


Título: Re: Ocultar icono del area de notificacion
Publicado por: llAudioslavell en 22 Septiembre 2016, 17:59 pm
He conseguido ocultar TODOS los iconos del area de notificacion con regedit pero lo que quiero es ocultar un icono en especifico   :-\ y eso no tengo ni la menor idea de como hacerlo.
Iluminenme porfavor !!!!!!!  :(  :(  :(

PSDT: El icono es un programa que yo lo ejecuto al iniciar windows que nose como pero tengo que ocultarlo si o si, claro que tiene que seguir ejecutandose el programa.


Título: Re: Ocultar icono del area de notificacion
Publicado por: okik en 23 Septiembre 2016, 01:59 am
¿es un icono con tetas o algo así o que? XD

Lo típico sería dar con el botón derecho al reloj de la barra de tareas. Y haces clic en 'Personalizar iconos de notificación'  Busca el que no quieres que se vea y cambias a 'Ocultar icono y notificación'. Pero esto no lo quita realmente, solo lo oculta, per si le das para extender los iconos de notificación, se verá igualmente.

Desde consola o modificando algo del registro no se me ocurre como. Tan solo modificando el propio programa.

Para modificarlo puedes usar Resource Hacker (http://www.angusj.com/resourcehacker/).

Haz una copia del EXE del programa y después abres el EXE del programa con Resource Hacker. RH mostrará un árbol de carpetas y debería  haber una carpetita llamada Icon Group que contiene iconos. Los puedes eliminar o bien sustituirlo por iconos nulos sin imagen. Yo los eliminaría directamente, selecciona un icono o grupo de iconos, clic con el botón derecho y selecciona 'Delete Resource'. Deberías borrar el que se ve en el área de notificación.

Luego guardas y al hacerlo RH creará una copia automática del EXE original y el modificado. Si ejecutas el EXE (el modificado) ya no debería mostrar ningún icono de notificación.

No te preocupes si  el icono del  EXE cambia. Si el programa usa un icono para todo el área de notificación, el EXE, la ventana, etc. Al borrarlo Windows le pone uno general pero no mostrará ninguno en el área de notificación.


va olvídalo he probado lo de borrar el icono y no funciona. Debería pero no.

Quizás con otro tipo de modificación, accediendo al código binario.








Título: Re: Ocultar icono del area de notificacion
Publicado por: Eleкtro en 23 Septiembre 2016, 17:45 pm
Una solución programática podría ser identificar el botoncito que quieres eliminar (si, esos iconos del área de notificación son controles de tipo Button) y seguídamente llamar a la función Win32 ShowWindow, CloseWindow o DestroyWindow o tal vez DestroyIcon, usando la parametización adecuada para ocultar y/o cerrar la ventana.

El control que he marcado en la imagen de abajo, es un control de tipo Toolbar, y el nombre de clase de la ventana de ese control es ToolbarWindow32.
(http://i.stack.imgur.com/lwe5c.png)

El árbol de nombres de clases empezando por la ventana padre (la barra de tareas) es la siguiente:
  • Shell_TrayWnd
  •    TrayNotifyWnd
  •        SysPager
  •            ToolbarWindow32

El problema, es que los botoncitos/iconos de adentro parecen inaccesibles hasta donde probé, no se pueden enumerar con la función Win32 EnumChildWindows ni tampoco se le puede hacer un Spy con las herramientas específicas para el análisis de un árbol de controles y jerarquías de ventanas, ni siquiera el framework de Microsoft UI Automation es capaz de identificar esos botoncitos/iconos dentro del área roja, la única forma que encontré para identificar esos botoncitos/iconos fue utilizando la herramienta Visual UI Automation de la SDK de Windows, pero esos controles ni siquiera exponen un handle de ventana ni ningún otro tipo de identificador que pudiera servirnos para automatizar la tarea.

Si examinamos los mensajes de controles disponibles para un control Win32 de tipo Toolbar, no parece haber nada que nos permita eliminar un botón específico:
  • https://msdn.microsoft.com/en-us/library/windows/desktop/ff486063%28v=vs.85%29.aspx
...o al menos, en un principio a mi me parece que no, pero voy a hecharle un ojo detenidamente a ver si logro encontrar algún mensaje que nos sirva.

EDITO: En teoría le podemos enviar el mensaje TB_BUTTONCOUNT al control para obtener la cantidad de botones, y de esta manera luego podemos hacer un búcle para enviarle el mensaje TB_GETBUTTON con el índice de cada botón para obtener informacion de cada botón, y así identificar el botón que se quiere ocultar o eliminar.
El problema es que en mi Windows 10 no funciona, a pesar de haber utilizado las estructuras definidas por Microsoft: http://referencesource.microsoft.com/#UIAutomationClientsideProviders/MS/Internal/AutomationProxies/CommonXSendMessage.cs,d6764b5a08c7e1e8,references (http://referencesource.microsoft.com/#UIAutomationClientsideProviders/MS/Internal/AutomationProxies/CommonXSendMessage.cs,d6764b5a08c7e1e8,references) se me refresca el escritorio al enviar el mensaje TB_GETBUTTON incluso pasándole un valor nulo al parámetro lParam de dicho mensaje, no hay manera de que devuelva la información de un botón, jeje, seguiré investigando a ver...

Saludos!


Título: Re: Ocultar icono del area de notificacion
Publicado por: okik en 24 Septiembre 2016, 13:33 pm
Una solución programática podría ser identificar el botoncito que quieres eliminar (si, esos iconos del área de notificación son controles de tipo Button) y seguídamente llamar a la función Win32 ShowWindow, CloseWindow o DestroyWindow o tal vez DestroyIcon, usando la parametización adecuada para ocultar y/o cerrar la ventana.

El control que he marcado en la imagen de abajo, es un control de tipo Toolbar, y el nombre de clase de la ventana de ese control es ToolbarWindow32.
(http://i.stack.imgur.com/lwe5c.png)

El árbol de nombres de clases empezando por la ventana padre (la barra de tareas) es la siguiente:
  • Shell_TrayWnd
  •    TrayNotifyWnd
  •        SysPager
  •            ToolbarWindow32

El problema, es que los botoncitos/iconos de adentro parecen inaccesibles hasta donde probé, no se pueden enumerar con la función Win32 EnumChildWindows ni tampoco se le puede hacer un Spy con las herramientas específicas para el análisis de un árbol de controles y jerarquías de ventanas, ni siquiera el framework de Microsoft UI Automation es capaz de identificar esos botoncitos/iconos dentro del área roja, la única forma que encontré para identificar esos botoncitos/iconos fue utilizando la herramienta Visual UI Automation de la SDK de Windows, pero esos controles ni siquiera exponen un handle de ventana ni ningún otro tipo de identificador que pudiera servirnos para automatizar la tarea.

Si examinamos los mensajes de controles disponibles para un control Win32 de tipo Toolbar, no parece haber nada que nos permita eliminar un botón específico:
  • https://msdn.microsoft.com/en-us/library/windows/desktop/ff486063%28v=vs.85%29.aspx
...o al menos, en un principio a mi me parece que no, pero voy a hecharle un ojo detenidamente a ver si logro encontrar algún mensaje que nos sirva.

EDITO: En teoría le podemos enviar el mensaje TB_BUTTONCOUNT al control para obtener la cantidad de botones, y de esta manera luego podemos hacer un búcle para enviarle el mensaje TB_GETBUTTON con el índice de cada botón para obtener informacion de cada botón, y así identificar el botón que se quiere ocultar o eliminar.
El problema es que en mi Windows 10 no funciona, a pesar de haber utilizado las estructuras definidas por Microsoft: http://referencesource.microsoft.com/#UIAutomationClientsideProviders/MS/Internal/AutomationProxies/CommonXSendMessage.cs,d6764b5a08c7e1e8,references (http://referencesource.microsoft.com/#UIAutomationClientsideProviders/MS/Internal/AutomationProxies/CommonXSendMessage.cs,d6764b5a08c7e1e8,references) se me refresca el escritorio al enviar el mensaje TB_GETBUTTON incluso pasándole un valor nulo al parámetro lParam de dicho mensaje, no hay manera de que devuelva la información de un botón, jeje, seguiré investigando a ver...

Saludos!

Como dije modificando el código fuente del programa (que yo he llamado código binario en la anterior respuesta) con un simple editor Hexadecimal.  Solo hay que saber que tocar  :silbar:


Acabo de recordar que yo tenía algo de eso mediante programación. Había que usar el handle de la aplicación y enviar un mensaje. A ver si lo encuentro....


Título: Re: Ocultar icono del area de notificacion
Publicado por: Eleкtro en 24 Septiembre 2016, 15:07 pm
Como dije modificando el código fuente del programa (que yo he llamado código binario en la anterior respuesta) con un simple editor Hexadecimal.  Solo hay que saber que tocar  :silbar:

Efectivamente, mediante un desamblador+depurador como IDA u OllyDbg se podría localizar la instrucción que invoka al icono de notificación y luego eliminarla/bypassearla (o si despues de localizarla se prefiere aplicar el parche a las direcciones implicadas mediante un editor hexadecimal, allá cada uno), eso sería una solución alternativa, sin embargo requiere conocimientos de ingenieria inversa que el usuario no parece tener... (y yo tampoco los tengo a un nivel avanzado)

Si estuviesemos hablando de una aplicación .NET entonces sería bastante sencillo, se podría acceder directamente al código fuente representado en código de lenguaje para modificarlo a nuestro gusto y listo, para ello se pueden usar decompiladores como .NET Reflector de Redgate.

Saludos!


Título: Re: Ocultar icono del area de notificacion
Publicado por: okik en 24 Septiembre 2016, 15:30 pm
ya lo encontré   :laugh:

Realmente es muy simple, busqué entre mis snippets modificaciones de ventana, en los cuales les envío un mensaje  a una ventana para cambiar los menús la barra añadir cosas, obtener informción, etc.

Y finalmente es de lo más simple. Simplemente ocultando la ventana con ShowWindow. Más bien eliminando el modo 'ventana'


Código
  1.   <DllImport("user32.dll")> _
  2.    Shared Function ShowWindow(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean
  3.    End Function


Obtienes el handle mendiante Process, con NET por ejemplo:

Código
  1.     Dim NommbreAppa As String = "Notepad"
  2.        Dim HwndProcess As IntPtr = IntPtr.Zero
  3.        For Each Proceso In Process.GetProcesses()
  4.            If Proceso.ProcessName = NommbreAppa.ToLower Then
  5.                HwndProcess = Proceso.MainWindowHandle
  6.            End If
  7.        Next


y luego le cambias el estado a oculto:

Código
  1. ShowWindow(HwndProcess, 0)

hay que poner 0, para ocultarlo 1 para minimizado y 2 para normal.

Sin embargo una vez oculto (bueno sin ventana) Process.GetProcesses(), no encuentra el proceso. Lo digo por si luego se quiere cambiar el estado a Visible.
Entonces hay que usar otro código para obtener el handle de un proceso sin ventana. Hay algunos por ahí.


pero.... no se si el truquillo funcionaría con todo tipo de procesos, si al hacer clic en el icono es posible maximizar la aplicación o mostrarlo en ventana, en principio si que debería funcionar.

Si la aplicación no está en modo ventana entonces Process.getProcesses no encontrará el handle. Es necesario que esté en modo ventana.,


...Estoy buscando uno que tenía que desactivaba el icono pero no lo encuentro  :(

El método era similar. Me cachis a ver si lo encuentro


Título: Re: Ocultar icono del area de notificacion
Publicado por: Eleкtro en 24 Septiembre 2016, 16:13 pm
Vamos a ver @okik, él lo que quiere es ocultar el icono del area de notificación, no la ventana principal del proceso, son dos cosas distintas, una ventana Win32 expone un controlador de ventana, pero el botón del área de notificación no.

Aparte, lo de llamar a la función ShowWindow ya lo comenté:
Una solución programática podría ser identificar el botoncito que quieres eliminar (si, esos iconos del área de notificación son controles de tipo Button) y seguídamente llamar a la función Win32 ShowWindow, CloseWindow o DestroyWindow o tal vez DestroyIcon, usando la parametización adecuada para ocultar y/o cerrar la ventana.
...fue lo primero que escribí a modo hipótesis, puesto que esa metodología no funcionará sin un identificador disponible.

Saludos!


Título: Re: Ocultar icono del area de notificacion
Publicado por: okik en 29 Septiembre 2016, 13:24 pm
No es mi intención discutir solo aclarar

A ver, si quiere ocultar el icono de notificación por lógica debe ser porque no quiere que otra persona pueda ver que se está ejecutando dicho programa ¿no? pues la idea es que oculte la aplicación o muestre a su antojo según quiera que se vea o no el icono de notificación.

No con todas las apliciaciones funciona lo de ocultar la ventana. Solo con aquellas que se inician en modo venta y tienen la opción de minimizar en el icono de notificación.

Sin embargo, creo que si que es posible ocultar sólo el icono de notificación usando:

Código:
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias " Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

pero es necesario obtener el ID del icono, que eso ya no se como


nota: creo que yo estaba reeditando mi respuesta cuando tu pusiste la tuya luego no ha sido mi intención pisarte tu respuesta  :-\


Título: Re: Ocultar icono del area de notificacion
Publicado por: Eleкtro en 29 Septiembre 2016, 18:34 pm
si quiere ocultar el icono de notificación por lógica debe ser porque no quiere que otra persona pueda ver que se está ejecutando dicho programa ¿no?

Eso es una mera suposición.

De todas formas @okik sinceramente no tiene mucho sentido que sigamos debatiendo este asunto cuando para empezar el usuario que formuló la pregunta no ha vuelto a dar señales de vida (a pesar de haberse conectado recientemente), en mi opinión es mejor que no hagamos más el tonto ofreciendo ayuda en este post investigando algo que implica esfuerzo y escasea de documentación... puesto que probablemente el esfuerzo nunca se verá agradecida ni para ti ni tampoco para mi :-\, al menos eso es lo que haré yo, ignorar este tema.

Saludos!


Título: Re: Ocultar icono del area de notificacion
Publicado por: llAudioslavell en 30 Septiembre 2016, 00:16 am
Estimados, estuve probando con el programa Resource Hacker pensando que podria llegar a ocultar el icono del programa que quiero pero ya veo que no.

Eso es una mera suposición.

De todas formas @okik sinceramente no tiene mucho sentido que sigamos debatiendo este asunto cuando para empezar el usuario que formuló la pregunta no ha vuelto a dar señales de vida (a pesar de haberse conectado recientemente), en mi opinión es mejor que no hagamos más el tonto ofreciendo ayuda en este post investigando algo que implica esfuerzo y escasea de documentación... puesto que probablemente el esfuerzo nunca se verá agradecida ni para ti ni tampoco para mi :-\, al menos eso es lo que haré yo, ignorar este tema.

Saludos!

agradezco muchisimo el compartir de sus conocimientos, creanme que se los agradezco mucho. Estos dias he estado con otras cosas mas resolviendo, me dieron unas semanas mas de chances para tener esto ya listo. Hoy termine con mis otros pendientes, ahora si tengo que estar dia y noche con este tema.
Siganme ayudando porfavor  :(  :(  :(  :(


PSDT: Estoy probando las opciones que estuvieron dandome.

ya lo encontré   :laugh:

Realmente es muy simple, busqué entre mis snippets modificaciones de ventana, en los cuales les envío un mensaje  a una ventana para cambiar los menús la barra añadir cosas, obtener informción, etc.

Y finalmente es de lo más simple. Simplemente ocultando la ventana con ShowWindow. Más bien eliminando el modo 'ventana'


Código
  1.   <DllImport("user32.dll")> _
  2.    Shared Function ShowWindow(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean
  3.    End Function


Obtienes el handle mendiante Process, con NET por ejemplo:

Código
  1.     Dim NommbreAppa As String = "Notepad"
  2.        Dim HwndProcess As IntPtr = IntPtr.Zero
  3.        For Each Proceso In Process.GetProcesses()
  4.            If Proceso.ProcessName = NommbreAppa.ToLower Then
  5.                HwndProcess = Proceso.MainWindowHandle
  6.            End If
  7.        Next


y luego le cambias el estado a oculto:

Código
  1. ShowWindow(HwndProcess, 0)

hay que poner 0, para ocultarlo 1 para minimizado y 2 para normal.

Sin embargo una vez oculto (bueno sin ventana) Process.GetProcesses(), no encuentra el proceso. Lo digo por si luego se quiere cambiar el estado a Visible.
Entonces hay que usar otro código para obtener el handle de un proceso sin ventana. Hay algunos por ahí.


pero.... no se si el truquillo funcionaría con todo tipo de procesos, si al hacer clic en el icono es posible maximizar la aplicación o mostrarlo en ventana, en principio si que debería funcionar.

Si la aplicación no está en modo ventana entonces Process.getProcesses no encontrará el handle. Es necesario que esté en modo ventana.,


...Estoy buscando uno que tenía que desactivaba el icono pero no lo encuentro  :(

El método era similar. Me cachis a ver si lo encuentro


Estimado okik
Probe de la forma en que me indicas y si !! funciona con el notepad pero estoy probando con el programa vpn que tengo y no lo oculta :( tambien probe con el ccleaner para descartar y no lo oculta de la barra de notificaciones. Estoy colocando el proceso tal y como esta en el tasklist y nada   :-(
Ayuda porfavor !!! :( :(

MOD: No hacer triple post.


Título: Re: Ocultar icono del area de notificacion
Publicado por: okik en 13 Octubre 2016, 10:36 am
Ya expliqué que lo de ocultar no funciona con todo tipo de ventanas, pero es bueno saber que lo sabes hacer.

He tenido una idea de como se podría hacer, pero no es seguro que funciones y tengo que probarlo.  Ahora estoy muy liado con médicos y esas cosas porque resulta que estoy muy enfermo. En cuanto pueda lo probaré y comento.