Pull to refresh

Comments 87

Почему то вспомнились Delphi и журнал «Хакер»
Кстати, хочу заметить, что C# таки становится заменой Delphi
Хочу заметить, что нет. Если уж искать замену Delphi в одной весовой категории, то это Qt — фреймворк, с которым давние связи у полумертвого Borland'а (который, конечно, уже никакого отношения к Delphi не имеет) были в свое время (биндинги к Qt в CLX).
Вы сравнили библиотеку для С++ и язык. Вы осознаете это?
Скажите это покойному ms-rem'у и многим другим квалифицированным delphi-специалистам, которые связанны с андеграундом. Ок?
На делфи было написано достаточно действительно сильных вирусов… ведь главное это алгоритм и правильные системные вызовы, с c# кстати похуже будет, просто потому что в ring0 не попасть никак managed кодом
Есть неуправляемый код. Но все равно на C# вирус — как-то не айс.
UFO just landed and posted this here
Ну, через список процессов он будет убиваться без проблем.
Пока все довольно просто. Но чувствую дальше будет интересней.
Писать вирусы — плохо! Лучше пишите что-то полезное.
Давайте начнем с этого
А так же обход и отключение UAC.

Очень интересно!
ИМХО, его и обходить не стоит. Большинство пользователей не задумываясь разрешают действие, особенно если перед этим совершили какое-нибудь действие
так то оно так, но однажды мне пришлось переносить не молодое приложение на win7, приложение обновлялось скачиванием новых версий файлов прямо в свою директорию, потом подмена экзешника и т.п. UAC не давал сделать ничего при установке в системные папки, пришлось закачку делать в application setting и отдельный апдейтер писать с манифестом админа для подмены файлов.
ПРоблема решена была быстро, но след остался, посему и интерес присутствует к освоению новой магии!
Большинство «продвинутых» пользователей отключают, а многие и не знают что «это» можно отключить.
А перед началом работы вируса — тот будет просить установить нужную версию .Net Framework? (:
И просить добавить памяти, а то на установленном объеме оно не может запуститься. :)
Я написал, что при создании проекта в properties ставим фреймворк 2.0, который впринципе уже присутствует везде
в win 7 фреймворк 2,0 по умолчанию вшит
ХР после обновления на sp1 устанавливает 2.0 фреймворк. А оно вроде как автоматичесски происходит
Щито?
Может быть Windows 7?
В ХР даже SP3 (чистой установки) .NET автоматом не ставиться — на диске присутствует инсталяха .NET1.1, но ее тоже надо ставить руками. В пакете обновления XP до SP3 инсталляция .NET тоже отсутствует.
Все остальное — тянется через Microsoft Update или ставиться из дистрибутивных пакетов. Учитывая то, что сейчас софта под .NET (или с его использованием) пишется достаточно много, во многих объемных инсталяхах установщик нужной версии .NET вшит и устанавливается во время сетапа софта.

А в Win7, который до SP1, был «вшит» вроде как раз .NET 1.1 (также как и в Win Srv 2003). Присутствует ли .NET 2.0 в обновлении SP1 — надо будет проверить.

И да, инсталяция .NET 3.5 устанавливает в том числе и сборки .NET 2.0, если мне не изменяет память. Вот 4.0 ставит только свои библы. Насчет 1.1 уже не помню — обычно с Windows Update или WSUS тяну все сразу. :)
Нет, к сожалению, каждая версия ставится отдельно, буд-то это разные продукты вообще…
Все же, на сколько я пjмню, установка .NET3.5 прекрасно позволяет запускать приложения написанные под 2.0. Вот 1.1 и 4.0 (последнюю, естественно) надо устанавливать отдельно.
Впрочем, возможно 3.5 ставит какие-то урезанные библиотеки.
Но именно инсталл 3.5 самый большой из всех. И скорее всего именно за счет того, что несет «на борту» дополнительные сборки 2.0, 3.0 и 3.5.

Надо будет под виртуалкой развернуть чистую систему и проверить…
Простите, они так кардинально отличаются, что приложение, например, под 2.0 не идет на 4.0 и для беспроблемной работы нужно держать все версии фреймворка?
А ещё, почему-то, два сервиса .Net Optimization Service постоянно сидят в памяти и шустро кушают проц и диск — это так надо?
По сути кардинально отличается только 4 версия Framework'а (если забыть про первую), т.к. содержит в себе новую версию CLR. Все, что шло до 4.0 — использовало CLR v 2.0.
А разные версии библиотек нужны для обеспечения нормальной работы с версиями. Чтобы небыло DLL Hell'а.
В установщике 4ой версии убрали все предыдущие библиотеки. В 3.5SP2 внутри есть предыдущие версии. 1.1 — вообще отдельная песня, т.к. бинарно несовместим с последующими версиями.

Если под сервисами вы имеете ввиду clr_optimization_vX.X.XXXXX_XX — это NGEN, обычно большую часть времени они выключены. Если они включены — это значит что какое-то приложение в данный момент генерит нативные образы.
В Win7, которая без SP — вшит .net 3.5 SP1. Да — это опициональный компонент, но он включен по умолчанию, и можно рассчитывать что он присутствует на подавляющем большинстве инсталляций. Гарантированно установленной на W7 является версия 2.0 SP2.
Только что проверил. Таки в списке компонентов системы присутствует .NET 3.5.1 и по-умолчанию включен (Windows 7 Ultimate x64 SP1).

XP-же (любой версии и SP), по умолчанию, не ставит никакого .NET, так что там только руками (либо дистриб, либо WinUpdate).
А я ничего про XP и не говорил. В XP SP1 вроде был .net в качестве опционального компонента, так давно это было, что не помню уже.
Да он и в SP3 опциональный. Только в виде дистриба на загрузочном диске (и тот версии 1.1) — собственно в список компонентов ОС он не был внесен ни разу.
Я и не утверждаю что был внесен. Я вообще изначально про XP ничего не говорил, 10 старичку уже как никак.
Спасибо за статью. Еще бы код подсветить для читабельности.
Жду продолжения.
Подсветил, скоро напишу продолжение
Пожалуйста — не надо. Не стоит больше так надругиваться над технологией.
Ну почему надругиваться? Я хотел показать что средствами технологии можно сделать не только что-то полезное, но и приносящее вред, да сейчас тут безобидная перезагрузка, а если у Вас бесследно пропадет звуковая карта к примеру? С помощью этой же техноллогии?
Смысл статьи был не в том чтобы показать свои навыки программирования, а в том, чтобы показать уязвимости, и возможности технологии мешать самой себе.
Это не уязвимости, если у меня есть права админа — абсолютно естественно, что я могу делать очень много — на любой технологии.
Более того — была показана не технология .net, а какой-то убогий гротеск.
Еще более того — что хотелось показать, что программу, вызывающую winapi можно написать с использованием .net? Ну это ни для кого не секрет.
«С помощью этой же технологии» звучит как «С помощью этого же языка программирования», .net тут совсем не при чем.

Более того, повторюсь, код написан настолько безобразно, что вызывает даже отвращение. Глядя на этот код я могу ручаться, что вы не знаете ни C# ни .net, ни программирование как таковое, и поэтому писать статьи с их упоминанием не стоит.
И да, если хочется навредить — имея права админа можно просто удалить все, что удаляется в 5 строчек кода.
Ого, на Хабре уже вирусы учат писать. Охренеть!
> Software\\Microsoft\\Windows\\CurrentVersion\\Run\\
гы, даже не читал))
Ну, хорошо что не в AUTOEXEC.BAT или Win.INI :)
Да первым делом мониторю автозагрузку. И первым делом удаляю любое, что носит громкое название вроде system.exe.
Кто ж Вам даст в системную директорию-то писать?

Может, попробуете буткит написать? Вот это интереснее :)
>Чтобы сделать программу невидимой для пользователя нажимаем на форму в конструктере и изменяем >следующие свойства:
>— FormBorderStyle — None
>— Opacity — 0%
>— ShowIcon — False
>— ShowInTaskbar — False
>— (и чтоб наверняка) Size — 0;0

Вы вчера открыли для себя языки программирования? Так вот сначала изучите субж, а потом учите других, блять!
>— (и чтоб наверняка) Size — 0;0
— а чтоб уж совсем наверняка Location — 100000;100000 :)
Надо делать с учетом на будущее, 2147483647;2147483647
в будущем, наверное, придется переписать 0х7FFFFFFFFFFFFFFF;0х7FFFFFFFFFFFFFFF
Зачем форма?:) мне действительно интересно.

Вообще, месье знает толк в извращениях, если собиратеся на enterprise языках вирусы писать:)
Поздравляю Вас с первым Trojan.VisualStudio.CoolHacker.A :)
вообще подключить надо MEF, и писать вирус который динамично модули переподключает:)
:)

а кроме шуток, мне интересно, как можно написать вирус, который существующим процессам добавляет собственные потоки, что их не сразу видно в менеджере задач.
Кстати, если автор с просто юзера под .NET отключет UAC — значит реально кул хакер!
Если думаете, что UAC реально непробиваемая система, то у меня для вас плохие новости…
не думаю, но из под юзерских прав выключить с помощью .NET не получиться:) читайте комменты внимательно
Помню в школе писал на чем-то вроде дельфей програмку, которая имитировала внешний вид программы форматирования жесткого диска и не реагировала на альт-табы и прочее. Но назвать это вирусом (как впрочем и сабж) у меня даже в те зеленые годы не повернулся язык.
И действительно, зачем форма? Или современные разработчики уже не знают других способов?
Можно прикрутить вызов BSOD ;)

using System.Diagnostics;
using System.Runtime.InteropServices;

[DllImport("ntdll.dll")]
public static extern int NtSetInformationProcess(IntPtr p, int c, ref int i, int l);

void _BSOD()
{
Process p = Process.GetCurrentProcess();
int g = 1;
NtSetInformationProcess(p.Handle, 29, ref g, 4);
p.Kill();
}
Такой вызов бсод на пройдет под uac'ом, не хватит прав, в следующей статье опишу метод которым я пользовался
Доктор, нашатырю!
Нельзя в профессию с такими нервами = )
> Использовать только средства .net

Раньше помню так прикалывались. Вирус, который требует установки дополнительного ПО (в данном случае фреймворка). А сейчас это ведь даже уже не смешно. Я так понял, автор на полном серьезе писал эту статью.
Мне эта статья вот что напомнила:

Видимо через пару лет вирусы будут требовать ставить обновления винды и браузера, чтобы запуститься.
Да ладно, ребята, чего все накинулись. Смотрим в профиль -> приглашение от НЛО.
Just for lulz.
А как же будет удобно смотреть тело вируса, написаного с использованием .NET. Да и на 64-битных без проблем работать будет кстати.
хоть бы потрудились узнать, что такое вирус…
Прочитал. Спасибо за хорошее настроение с самого утра (:
Чтобы сделать программу невидимой для пользователя нажимаем на форму в конструктере и изменяем следующие свойства:


А нельзя просто убрать в Main код, который создает форму и вместо него вставить свой?

Это нужно для того чтоб программа могла определять систему в которой запущена, и копироваться в общую папку.


А разработчики винды зачем-то вводят переменные окружения, типа %ALLUSERSPROFILE%. А разработчики .net еще и System.Environment.SpecialFolder зачем-то сделали.

С перезагрузкой посложнее, прибегнем к помощи WINAPI, допишем следующее


В .net это делается без всяких DllImport через WMI.

Тут это конечно забавно читать, но когда потом натыкаешься на похожий код в продакшене, который тебе надо как-то менять… Печалька, одним словом.
> А нельзя просто убрать в Main код, который создает форму и вместо него вставить свой?

Поколение .NET…

> А разработчики .net еще и System.Environment.SpecialFolder зачем-то сделали

Каждая платформа навязывает свою идеологию, делая обертки в своём стиле вокруг нижележащей платформы. Это неизбежно…
Вот только не надо про «поколение .net», ламеров полно во всех технологиях, и если человек прочитал одну книжку и считает себя уже вирусописателем — то .net не виноват в том, что его первая книжка оказалась по C#.

Касательно обертки — ничего плохого — это просто дополнительный уровень абстракции.
«поколение .NET» как раз в том смысле, что кроме этого фреймворка они ничего не знают.
Да так можно говорить и поколение Qt, поколение Python, поколение Ruby, поколение Java.
Некорректно так называть невежд в отношении программирования, т.к. такой ярлык выставляет в незаслуженно плохом свете технологию, а не непосредственно человека, совершившего над ней акт надругательства.

Еще больше скажу вам — автор статьи не имеет ни малейшего представления о технологии .net, и не знает как ей пользоваться. Очень мало тех, кто реально «кроме этого фреймворка ничего не знают», подразумевая что «этот фреймворк» они все-таки знают, причем это верно для большинства фреймворков и технологий.
Уважающий себя программист всё-таки интересуется «подноготной» своего фреймворка, мол, на каких принципах это всё работает. Также интересуется и другими технологиями.
Вот я о том и говорю. Что автор топика не «поколение .net», а просто не программист. Иначе получается что .net является чем-то унизительным.
Нет, не унизительным, а просто популярным. Вот и получается, что берут первую попавшуюся распиаренную технологию, и используют, где надо и где не надо — просто потому, что это якобы признак крутости.
Ну тогда уж будет «поколение, прочитавшее 3 строчки про .net и считающее себя программистами».
> Каждая платформа навязывает свою идеологию, делая обертки в своём стиле вокруг нижележащей платформы. Это неизбежно…

Ну вообще-то эта обертка вполне оправдана. Удобство обращения к папкам через System.Environment.SpecialFolder значительно выше, чем через переменные окружения.
А я не утверждаю, что это плохо. Но когда можно и так и так, и одного стиля не придерживаются, внося путаницу и неразбериху — вот это уже начинает раздражать.
Программу нужно сделать невидимой для пользователя, готов спорить Visual Studio даст такую возможность.

Готов спорить, вы не в курсе, что происходит при нажатии кнопки «Build» в Visual Studio.

Если в будущем все вирусопейсатели так деградируют, то можно быть спокойным за здоровье своего PC.
public static string needPatch = "C:\\Users\\Public\\";
public Form1()
{
...
needPatch = "C:\\Documents and Settings\\All Users\\";
...
}


Просто шикарный метод определения ОС и директорий.
Обладатели локализованных версий windows xp (например, немецкой) негодуют.
Sign up to leave a comment.

Articles