Modificar msn a MANO para q sea multisesion

Iniciado por Ferсhu, 14 Septiembre 2007, 05:50 AM

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

Ferсhu

Holas, esto lo publico aca ya q en el foro de chats ircs no creo q tenga ni idea.

buen el tema es q debido a ciertas circunstancias tengo q modificar el msn para q sea multisesion, pero necesito hacerlo a mano, alguien sabe donde hay q mododificar los datos??


Saludos!!

byebye

en viejas versiones ponias un bp en createmutex y parcheabas la comparacion. no tiene que ser muy diferente ahora.

Karcrack

Me llama la atención, por que únicamente a mano?
Podrías ver el HEX el msngr.exe (o algo asi :xD). Después modificar lo y comparar las diferencias, para así saber que es lo que modifica el programa :D

tena

Ponele un Bp a FindWindow  :-\

Pues lo que hace es ver si esta abierto el msn con esa api
y si hay uno abierto no te abre el otro jejeje

Saludos
tena

Shaddy

#4
Cita de: Karcrack en 14 Septiembre 2007, 15:22 PM
Me llama la atención, por que únicamente a mano?
Podrías ver el HEX el msngr.exe (o algo asi :xD). Después modificar lo y comparar las diferencias, para así saber que es lo que modifica el programa :D

Mensajes de éste tipo deberían ser borrados inmediatamente. Sin embargo, Al grano.

La verdad es que nunca había necesitado hacerlo, pero ya que estamos, lo hacemos . Evidentemente como ya dijo "Tena" un buen método para saber si la ventana está activa sería utilizar la API FindWindowA. Así que metes un BP en FindWindowA.

y parará aquí:

Citar
7E3AXXXX >  8BFF                    mov edi,edi
7E3AXXXX    55                      push ebp
7E3AXXXX    8BEC                    mov ebp,esp
7E3AXXXX    33C0                    xor eax,eax
7E3AXXXX    50                      push eax
7E3AXXXX    FF75 0C                 push dword ptr ss:[ebp+C]
7E3ADE92    FF75 08                 push dword ptr ss:[ebp+8]
7E3ADE95    50                      push eax
7E3ADE96    50                      push eax
7E3ADE97    E8 4CFFFFFF             call USER32.7E3ADDE8
7E3ADE9C    5D                      pop ebp
7E3ADE9D    C2 0800                 retn 8

Nota: La dirección no tiene porque ser esa, pones CTRL + G y escribes "FindWindowA" y verás tu dirección en OllyDBG .

Una vez paras ahí retornamos al código principal, si vemos que vamos a entrar en módulos .dll hacemos "CTRL + F4 y F7" (ésta combinación ejecuta el código hasta el siguiente RETORNO y ejecuta una instrucción para caer en la zona que llamó a la API), si vamos hacia el EXE hacemos " ALT + F9 " (ésto ejecuta código hasta llegar a cualquier línea del modulo principal (msnmsgr.exe).

y llegamos.

Citar
00548828   > \6A FF                 push -1                                        ; /Timeout =INFINITE
0054882A   .  FF73 24               push dword ptr ds:[ebx+24]                     ; |hObject
0054882D   .  FF15 F4144000         call ds:[<&KERNEL32.WaitForSingleObject>]      ; \WaitForSingleObject
00548833   .  83F8 FF               cmp eax,-1
00548836   .  0F84 96000000         je msnmsgr.005488D2
0054883C   .  57                    push edi                                       ; /Title
0054883D   .  68 F8885400           push msnmsgr.005488F8                          ; |Class = "MSNMSGRBlObj"
00548842   .  FF15 78174000         call ds:[<&USER32.FindWindowA>]                ; \FindWindowA
00548848   .  8BF0                  mov esi,eax                                    ;  EAX = 001902EE

Bueno siendo breves he marcado en negrita las 2 lineas importantes, la primera es la línea desde donde viene un salto condicional, y la segunda es donde caemos, es decir, justo debajo de la llamada a FindWindowA.

Como no quiero extenderme mucho explicaré lo que hay que hacer rápidamente, os colocáis en la línea primera que he marcado (00548828), y dáis a CTRL + R o CTRL + J (para los que tengan el plugin), cualquiera de las dos os sacará la dirección de quien llama ahí, dais intro y llegáis al salto:

Citar
00543CCB   > /68 78D75500           push msnmsgr.0055D778                          ; /EventName = "MSNMSGR"
00543CD0   . |57                    push edi                                       ; |InitiallySignaled
00543CD1   . |6A 01                 push 1                                         ; |ManualReset = TRUE
00543CD3   . |57                    push edi                                       ; |pSecurity
00543CD4   . |FF15 3C144000         call ds:[<&KERNEL32.CreateEventA>]             ; \CreateEventA
00543CDA   . |3BC7                  cmp eax,edi
00543CDC   . |8B5D E8               mov ebx,ss:[ebp-18]
00543CDF   . |8943 24               mov ds:[ebx+24],eax
00543CE2   . |0F84 EA4B0000         je msnmsgr.005488D2
00543CE8   . |FF15 8C154000         call ds:[<&KERNEL32.GetLastError>]             ; [GetLastError
00543CEE   . |3D B7000000           cmp eax,0B7
00543CF3   . |0F84 2F4B0000         je msnmsgr.00548828                            ;  EAX = 0B7

Bueno aquí rápidamente la cosa es que crea el evento MSNMSNGR y si ha habido algun error lo recupera, y si nos devuelve 0B7 (como que hay otra instancia abierta) nos manda a checkear el FindWindow, y luego nos hace un POSTMESSAGE para poner la ventana por delante de las demás. Así que lo que hay que hacer es nopear ese salto o cambiar la comparación o lo que preferáis.

Para los más vagos, incluso hay sitio para vosotros...

Citar
SOLUCION:

- Abrid el proceso msnmsngr.exe en OllyDBG.
- Subis la barra al principio y pulsáis "CTRL + B" y teniendo ésta cadena en el portapapeles "3B C7 8B 5D E8 89 43 24 0F 84 ?? ?? ?? ?? FF 15 ?? ?? ?? ?? 3D B7 00 00 00 0F ?? ?? ?? ?? ??" le dáis a "Mayus + Ins".
- Cambiáis el salto en funcion de lo que veáis (en Windows Live, nopeais en MSN Messenger cambiadlo por un JMP).

En cualquier caso hice un parche para todas las versiones:

MSN Messenger y Windows Live Messenger MultiInstance Patch

Salu2..



"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

http://abssha.reversingcode.com
http://www.reversingcode.com

Ferсhu

mmm todavía no lo lei atentamente tu mensaje ShadowDark pero en base a los mensajes q me dieron antes q este ultimo fui a olly y trate de solucionarlo de con FindWindowA, pero por lo q yo entendi el programa solo usa esa funcion para darle el foco a el msn cuando ya detecta q esta abierto.

Ademas hice una prueba simple, le cambie el nombre de la clase de ventana q buscaba asi q nunca la iva a encontrar e igualmente no se solucionaba, asi q en base a eso supongo q es antes donde verifica si ya existe el proceso.

Tambien observe el camino q toma en los 2 casos, cuando esta solo o cuando ya esta abierto, y se bifurca mucho antes del findwindow pero como no tenia mucho tiempo no llegue a nada.

Pero si vos decis q es asi lo voy a revisar....

Shaddy

no te lo digo, te lo he escrito...

en cuanto a lo de FindWindow lo usa efectivamente para enviar la ventana hacia el frente, pero sólamente la envia si hay otro MSN Messenger abierto, por ello tiene que detectar si está abierto, ¿como?, con el CreateEvent, y el GetLastError. Lo puse en el mini-tute, intenta crear el evento y captura el error con la api, si hay error comprueba la clase de ventana y la pone al frente, en caso contrario abre una nueva instancia.

Salu2..
"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

http://abssha.reversingcode.com
http://www.reversingcode.com

Ferсhu

#7
jeje ya esta era una boludez, lo q pasa q no sabia el funcionamiento de createevent.

Cambien ej jnz por un jmp y listuu, si puedo subo el screen por si alguien viene buscando lo mismo.

Para el q preguntaba por q a mano?, simple para saber y aprender jeje, y no depender de un programa q te pueda llegar a meter cosas raras ademas de hacer eso.

Edit: dejo el screen, mi msn es el 7.5 .



el archivo de llama "copia de msnmsgr.exe" por si alguien pregunta por q "copia_de."

Gracias.

Shaddy

En Windows Live Messenger para el que lo quiera saber está escrito arriba, y es lo mismo pero nopeando el salto. La cosa sería como patrón general poner un BP en "CreateEvent".

Salu2..
"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

http://abssha.reversingcode.com
http://www.reversingcode.com