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

Антивирус

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

Студворк — интернет-сервис помощи студентам
Ребята, нужна помощь. Код полностью рабочий, ошибок не выдает, но консольное окно пропадает сразу после запуска. Что с этим сделать?
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.d ll". Невозможно найти или открыть 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
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 main() { cout &lt;&lt; &quot;PI=&quot; &lt;&lt;...

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

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

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

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

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

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

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

Добавлено через 4 минуты
Функция возвращает -1, но где ошибка в findfirst? все кажется правильно написано.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.06.2018, 16:05
Здесь читал? https://msdn.microsoft.com/ru-... xfzac.aspx
Для _findfirst() используется _finddata_t. Если -1 возвращает, то проверяй по errno.
И где _findclose()?
0
 Аватар для Praktolock
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
03.06.2018, 16:07
В гугле забанили?
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  [ТС]
Как вывести параметр errno?

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

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

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

Добавлено через 18 минут
Ну так что ребята? Очень нужно до послезавтра, а я не понимаю что не так и почему не работает...
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.06.2018, 17:46
ENOENT - не находит ничего, потому что ты не указал шаблон.
C++
1
found_d = _findfirst(".\\*.*", &buf);
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
03.06.2018, 19:07  [ТС]
Ошибки нету, но количество папок и файлов не выдает почему-то(
Миниатюры
Антивирус  
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
03.06.2018, 20:36  [ТС]
Не подскажете в чем проблема?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.06.2018, 20:43
Отладчик.
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
04.06.2018, 12:39  [ТС]
Всеравно не понимаю, почему-то цикл 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  [ТС]
Изменил условие цикла, но теперь совершенно другая ошибка выходит.
Что с ней делать?
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  [ТС]
Вот что пишет, подскажите как устранить плиз.
Миниатюры
Антивирус  
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
04.06.2018, 12:53  [ТС]
Вот*
Миниатюры
Антивирус  
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.06.2018, 12:54
Цитата Сообщение от Jenya16 Посмотреть сообщение
Изменил условие цикла, но теперь совершенно другая ошибка выходит.
никто не видит, чего ты там меняешь.
либо показывай весь код (самую последнюю версию)
либо жди телепатов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.06.2018, 12:54

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru