Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
1

Антивирус

03.06.2018, 11:03. Показов 2309. Ответов 44
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребята, нужна помощь. Код полностью рабочий, ошибок не выдает, но консольное окно пропадает сразу после запуска. Что с этим сделать?
C++
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
#include "stdafx.h"
#include "dos.h"
#include "windows.h"
#include <fcntl.h>
#include <sys\types.h>
#include <sys\stat.h>
#include "stdio.h"
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <direct.h>
#include "io.h"
#define F_FOUND 0
#define PATH_LEN 128
#define DRIVE_LEN 4
#define BLANK_LEN 80
#define BAD 1
#define GOOD 0
#define DBG
int a = -1740;
/* Сигнатура */
char sign[7] = { (char)0xB4,
(char)0x83,
(char)0xCD,
(char)0x21,
(char)0x5E,
(char)0x56,
'\0' };
char
/* Строка імені поточного підкаталога */
path[PATH_LEN],
/* Строка імені початкового знаходження */
old_path[PATH_LEN],
/* Строка імені необхідного пристроя */
drive[DRIVE_LEN],
/* Пуста строка */
blank[BLANK_LEN];
int
/* Кількість відсканованих каталогів */
n_dir,
/* Кількість досліджених файлів */
n_fil,
/* Кількість хворих і вилікуваних файлів */
n_ill;
int
/* Довжина імені файлу */
l,
/* Тимчасовий індекс */
i;
/* Рекурсивна процедура обходу дерева каталогу */
int infected(char *fn)
{
    int f = 0;
    int r, q = 0;
    char buf[7]; /* Буфер під сигнатуру */
                 /* Відкриваємо файл */
    r = _open(fn, O_RDONLY, f);
    if (r) { printf(" – ошибка открытия!"); return GOOD; }
    /* Читаємо 6 байт */
    _lseek(f, a, SEEK_END);
    r = _read(f, buf, 6); buf[6] = '\0';
    if ((r) || (q != 6)) {
        printf(" – ошибка чтения!"); _close(f); return GOOD;
    }
    /* Закриваємо файл */
    _close(f);
    /* Порівнюємо байти з сигнатурою */
    if (strcmp(buf, sign) == 0)
    {
        printf(" – был болен и..."); n_ill++; return BAD;
    } /* Заражений !!! */
    system("pause");
    return GOOD;
}
int cure(char *fn)
{
    int f = 0;
    int mz;
    int r, q = 0;
    char buf[24]; /* Буфер під байти */
                  /* Відкриваємо файл */
    r = _open(fn, O_RDWR, f);
    if (r) { printf(" – ошибка открытия!"); return 0; }
    /* Читаємо перші два байти для визначення типа програми */
    r = _read(f, &mz, 2);
    if ((r) || (q != 2)) { printf(" – ошибка чтения!"); _close(f); return 0; }
    /* Читаємо збережені вірусом 24 байти старого початку */
    int a1 = -80;
    _lseek(f, a1, SEEK_END);
    r = _read(f, buf, 24);
    if ((r) || (q != 24)) { printf(" – ошибка чтения!"); _close(f); return 0; }
    /* Визначаємо тип програми */
    if ((mz == 0x4D5A) || (mz == 0x5A4D))
    { /* Это exe */
      /* Пишемо правильні PartPag и PageCnt */
        _lseek(f, 2, SEEK_SET);
        r = _write(f, &buf[2], 4);
        if ((r) || (q != 4)) { printf(" – ошибка записи!"); _close(f); return 0; }
        /* Пишимо правильні ReloSS и ExeSP */
        _lseek(f, 14, SEEK_SET);
        r = _write(f, &buf[14], 4);
        if ((r) || (q != 4)) { printf(" – ошибка записи!"); _close(f); return 0; }
        /* Пишимо правильні ReloCS и ExeIP */
        _lseek(f, 20, SEEK_SET);
        r = _write(f, &buf[20], 4);
        if ((r) || (q != 4)) { printf(" – ошибка записи!"); _close(f); return 0; }
    }
    else
    { /* Это com */
      /* Відновлюємо збережені 3 байти програми */
        _lseek(f, 0, SEEK_SET);
        r = _write(f, &buf[0], 3);
        if ((r) || (q != 3)) { printf(" – ошибка записи!"); _close(f); return 0; }
    }
    /* Усікаємо файл (переходимо на початок
    вірусу і записуємо 0 байт) */
    _lseek(f, a, SEEK_END);
    r = _write(f, buf, 0);
    /* Закриваємо файл */
    _close(f);
    printf("теперь исцелен!\n");
    system("pause");
    return 0;
}
int walk()
{
    int found_d, found_f;
    _finddata64i32_t buf;
    /* Пошук каталогів */
    found_d = _findfirst(".", &buf);
 
    while (found_d == F_FOUND)
    {
        if ((buf.name[0] != '.') && (buf.attrib & _A_SUBDIR))
        {
            _chdir(buf.name);
            walk();
            _chdir("..");
        }
        found_d = _findnext(found_d, &buf);
    }
    /* До цього моменту не відсканованих нижележачих каталогів
    Більше не залишилося – скануємо файли */
    n_dir++;
    _getcwd(path, PATH_LEN);
    /* Пошук файлів */
    found_f = _findfirst(".", &buf);
    while (found_f == F_FOUND)
    {
        l = strlen(buf.name);
        if (((buf.name[l - 3] == 'C') &&
            (buf.name[l - 2] == 'O') &&
            (buf.name[l - 1] == 'M')) ||
            ((buf.name[l - 3] == 'E') &&
            (buf.name[l - 2] == 'X') &&
                (buf.name[l - 1] == 'E')))
        {
            n_fil++;
            printf("%c%s", 13, blank);
            printf("%c%s\\%s ", 13, path, buf.name);
            /* Знайшли новий файл – необхідно перевірити, інфікований він чи ні.
            Якщо інфікований, то лікуємо */
            if (infected(buf.name) == BAD) cure(buf.name);
        }
        found_f = _findnext(found_f, &buf);
    }
    system("pause");
    return 0;
}
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "Russian");
    if (argc < 2)
    {
        puts("Введите имя диска в качестве параметра"); exit(2);
    }
    if (((toupper(argv[1][0]))>'Z') || ((toupper(argv[1][0]))<'A'))
    {
        puts("Неверно задано имя диска”"); exit(3);
    }
    drive[0] = argv[1][0]; drive[1] = ':'; drive[3] = '\0';
    n_dir = 0;
    n_fil = 0;
    _getcwd(old_path, PATH_LEN);
    drive[2] = '\0'; system(drive);
    drive[2] = '\\'; _chdir(drive);
    /* Запускаємо рекурсивний обхід дерева каталогів
    Для вибраного диску */
    walk();
    old_path[2] = '0'; system(old_path);
    old_path[2] = '\\'; _chdir(old_path);
    printf("\nКаталогов : %d\nФайлов : %d\nОбнаружено больных и излечено : %d", n_dir, n_fil, n_ill);
    if (n_ill) exit(1); else exit(0);
    system("pause");
    return 0;
}
Буду очень благодарен за помощь.
Вот информация которая находится в выводе:
"ConsoleApplication8.exe" (Win32). Загружено "C:\Windows\System32\ntdll.dll". Невозможно найти или открыть PDB-файл.
"ConsoleApplication8.exe" (Win32). Загружено "C:\Windows\System32\kernel32.dll". Невозможно найти или открыть PDB-файл.
"ConsoleApplication8.exe" (Win32). Загружено "C:\Windows\System32\KernelBase.dll". Невозможно найти или открыть PDB-файл.
"ConsoleApplication8.exe" (Win32). Загружено "C:\Windows\System32\apphelp.dll". Невозможно найти или открыть PDB-файл.
"ConsoleApplication8.exe" (Win32). Загружено "C:\Windows\System32\vcruntime140d.dll". Невозможно найти или открыть PDB-файл.
"ConsoleApplication8.exe" (Win32). Загружено "C:\Windows\System32\ucrtbased.dll". Невозможно найти или открыть PDB-файл.
"ConsoleApplication8.exe" (Win32). Загружено "C:\Windows\System32\ucrtbased.dll". Невозможно найти или открыть PDB-файл.
"ConsoleApplication8.exe" (Win32). Выгружено "C:\Windows\System32\ucrtbased.dll"
"ConsoleApplication8.exe" (Win32). Загружено "C:\Windows\System32\kernel.appcore.dll". Невозможно найти или открыть PDB-файл.
"ConsoleApplication8.exe" (Win32). Загружено "C:\Windows\System32\msvcrt.dll". Невозможно найти или открыть PDB-файл.
"ConsoleApplication8.exe" (Win32). Загружено "C:\Windows\System32\rpcrt4.dll". Невозможно найти или открыть PDB-файл.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2018, 11:03
Ответы с готовыми решениями:

Антивирус
Где можно бесплатно скачать рабочий антивирус Касперский?

Dev C++: ругается антивирус
Всем привет!У меня проблема во время компиляции.Когда я компилирую в Dev С++ Version 5.4.2 32 бита...

Антивирус ругается на мои программы
#include &lt;iostream&gt; #define _USE_MATH_DEFINES #include &lt;cmath&gt; using namespace std; int...

Антивирус удаляет мой exe
я написал программу на c++. упаковал в архив и залил ее на официальный сайт программы. пользователи...

44
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
03.06.2018, 13:07 21
Author24 — интернет-сервис помощи студентам
из функции walk выходит сразуже
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
03.06.2018, 15:00  [ТС] 22
А почему? И как исправить?

Добавлено через 7 минут
Вызывается вроде бы нормально, а почему тогда не выполняется и сразу выходит?

Добавлено через 1 час 44 минуты
Ребята помогите, почему выходит сразу из процедуры walk??
0
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
03.06.2018, 15:06 23
Есть такая штука - отладчик. Пользуйся.
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
03.06.2018, 15:42  [ТС] 24
Пытаюсь найти что не так, но безрезультатно(

Добавлено через 9 минут
Путь указывает правильный D:\\, но почему-то не считает ни файлы ни каталоги(
0
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
03.06.2018, 15:48 25
Дальше смотри. Что _findfirst() возвращает.
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
03.06.2018, 15:59  [ТС] 26
found_d -858993460 int

Хотя при успешном выполнении функция должна возвращать 0, но в чем проблемма?

Добавлено через 3 минуты
Я не понимаю в какой части программы происходит ошибка, подскажите плз

Добавлено через 47 секунд
На сколько я понимаю оно не выполняет цикл
C++
1
while (found_d == F_FOUND)
но почему не выполняет?(

Добавлено через 4 минуты
Функция возвращает -1, но где ошибка в findfirst? все кажется правильно написано.
0
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
03.06.2018, 16:05 27
Здесь читал? https://msdn.microsoft.com/ru-... xfzac.aspx
Для _findfirst() используется _finddata_t. Если -1 возвращает, то проверяй по errno.
И где _findclose()?
0
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
03.06.2018, 16:07 28
В гугле забанили?
msdn:
В случае успешного выполнения _findfirst возвращает уникальный дескриптор поиска идентифицирующий файл или группу файлов, соответствующих filespec спецификации, которая может использоваться в последующем вызове _findnext или _findclose. В противном случае функция _findfirst возвращает значение –1 и задает для параметра errno одно из следующих значений.

EINVAL
Недопустимый параметр: filespec или fileinfo имеет значение NULL. Или операционная система возвратила непредвиденную ошибку.

ENOENT
Нет соответствий для спецификации файла.

ENOMEM
Недостаточно памяти.

EINVAL
Недопустимая спецификация имени файла или длина заданного имени файла больше MAX_PATH.

Дополнительные сведения об этих и других кодах возврата см. в разделе _doserrno, errno, _sys_errlist и _sys_nerr.

Если передается недопустимый параметр, эти функции вызывают обработчик недопустимого параметра, как описано в разделе проверки параметров.
Читай самостоятельно. На каждый ответ рождается новый вопрос. Нет желания, если честно, досконально разбираться в коде этого амбициозного проекта
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
03.06.2018, 16:12  [ТС] 29
Как вывести параметр errno?

Добавлено через 1 минуту
Выводит errno 2
0
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
03.06.2018, 16:13 30
try it
Миниатюры
Антивирус  
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
03.06.2018, 16:44  [ТС] 31
No such file or directory

Добавлено через 1 минуту
Поскольку у меня структура объявленя как 64i32_t попытался использовать схожую функцию, но толку 0
C++
1
2
3
    _finddata64i32_t buf;
    /* Пошук каталогів */
    found_d = _findfirst64i32(".", &buf);
Добавлено через 3 минуты
Ребята, помогите пожалуйста довести код до ума, до завтрашнего дня готов даже заплатить, потому что нужен критически до завтра!

Добавлено через 1 минуту
До послезавтра*

Добавлено через 18 минут
Ну так что ребята? Очень нужно до послезавтра, а я не понимаю что не так и почему не работает...
0
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
03.06.2018, 17:46 32
ENOENT - не находит ничего, потому что ты не указал шаблон.
C++
1
found_d = _findfirst(".\\*.*", &buf);
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
03.06.2018, 19:07  [ТС] 33
Ошибки нету, но количество папок и файлов не выдает почему-то(
Миниатюры
Антивирус  
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
03.06.2018, 20:36  [ТС] 34
Не подскажете в чем проблема?
0
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
03.06.2018, 20:43 35
Отладчик.
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
04.06.2018, 12:39  [ТС] 36
Всеравно не понимаю, почему-то цикл while по идее не запускается, вот только почему?

Добавлено через 33 секунды
C++
1
2
3
4
5
6
7
8
9
10
11
12
while (found_d == F_FOUND)
    {
        if ((buf.name[0] != '*.*') && (buf.attrib & _A_SUBDIR))
        {
            _chdir(buf.name);
            walk();
            _chdir(".\\.\\*.*");
        }
        n_dir++;
        found_d = _findnext(found_d, &buf);
        printf("ff = %s",found_d);
    }
Может быть сдесь какая-то ошибка допущена?

Добавлено через 1 минуту
Ибо
C++
1
printf("ff = %s",found_d);
уже не выводит в компиляторе.
Подскажите что не так?
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
04.06.2018, 12:49  [ТС] 37
Изменил условие цикла, но теперь совершенно другая ошибка выходит.
Что с ней делать?
C++
1
2
3
4
5
6
7
8
9
10
11
    while (found_d >= F_FOUND)
    {
        if ((buf.name[0] != '.') && (buf.attrib & _A_SUBDIR))
        {
            _chdir(buf.name);
            walk();
            _chdir("..");
        }
        n_dir++;
        found_d = _findnext(found_d, &buf);
    }
Миниатюры
Антивирус  
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
04.06.2018, 12:53  [ТС] 38
Вот что пишет, подскажите как устранить плиз.
Миниатюры
Антивирус  
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
04.06.2018, 12:53  [ТС] 39
Вот*
Миниатюры
Антивирус  
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.06.2018, 12:54 40
Цитата Сообщение от Jenya16 Посмотреть сообщение
Изменил условие цикла, но теперь совершенно другая ошибка выходит.
никто не видит, чего ты там меняешь.
либо показывай весь код (самую последнюю версию)
либо жди телепатов.
0
04.06.2018, 12:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2018, 12:54
Помогаю со студенческими работами здесь

Почему антивирус матерится на мой исходник?
Когда я пытаюсь запустить компиляцию антивирус(avast) сразу блокирует проект и перемещает в...

Переделать код с Borland C++v3.1 на Visual С++ (антивирус)
Помогите пожалуйста, есть код написан на языке Borland C++v3.1, но в силу того что данный язык не...

Антивирус Касперского считает зараженным результат компиляции
Здравствуйте. Второй раз уже сталкиваюсь с .. трояном? Скрин прилагается. &quot;Сейчас я Вам все там...

Антивирус удаляет exe файлы моих программ
Я однажды сделал одну программу и в функции main написал return 2 int main(){ return 2;...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru