Título: Modificar msn a MANO para q sea multisesion Publicado por: Ferсhu en 14 Septiembre 2007, 05:50 am 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!! Título: Re: Modificar msn a MANO para q sea multisesion Publicado por: byebye en 14 Septiembre 2007, 13:26 pm en viejas versiones ponias un bp en createmutex y parcheabas la comparacion. no tiene que ser muy diferente ahora.
Título: Re: Modificar msn a MANO para q sea multisesion Publicado por: 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 Título: Re: Modificar msn a MANO para q sea multisesion Publicado por: tena en 14 Septiembre 2007, 19:44 pm 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 Título: Re: Modificar msn a MANO para q sea multisesion Publicado por: Shaddy en 15 Septiembre 2007, 17:16 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 (http://www.savefile.com/files/1057876) Salu2.. Título: Re: Modificar msn a MANO para q sea multisesion Publicado por: Ferсhu en 16 Septiembre 2007, 03:20 am 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.... Título: Re: Modificar msn a MANO para q sea multisesion Publicado por: Shaddy en 16 Septiembre 2007, 05:23 am 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.. Título: Re: Modificar msn a MANO para q sea multisesion Publicado por: Ferсhu en 16 Septiembre 2007, 06:22 am 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 . (http://img172.imageshack.us/img172/4791/msnmultibj6.jpg) el archivo de llama "copia de msnmsgr.exe" por si alguien pregunta por q "copia_de." Gracias. Título: Re: Modificar msn a MANO para q sea multisesion Publicado por: Shaddy en 16 Septiembre 2007, 14:10 pm 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.. |