Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 12.03.2009
Сообщений: 6

Поиск ехе файла по сигнатуре. Подскажите пожалуйста

10.04.2009, 08:58. Показов 2899. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте . Возникла проблема при поиске ехе файла по сигнатуре.
1)Представленная программа должна находить указанный, в соответствии с данной сигнатурой, ехе файл в заданной папке.(В нашем случае текущая директория – диск С).Программа после компиляции выводит сообщениечто не может открыть ни один ехе файл.Причем ищет она не на С а в debug.
Скажите пожалуйста в чем может быть причина неполадки?

Как кроме этого получить полный путь к найденным файлам.
Платформа выполнения VS С++
Заранее спасибо.


Скажите в чем может быть причина неполадки?
2)Как кроме этого получить полный путь к найденным файлам?
Платформа выполнения VS С++
Заранее спасибо.

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
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
#include <iostream>
#include <stdlib.h>
#include <winbase.h>
 
using namespace std;
 
#define PATH_LEN 128
 
//смешение 1230h
 
const char signature[17]={(char)0xc9, (char)0xd4,(char)0xde ,(char)0x77 ,(char)0x1b ,
(char)0x76 ,
(char)0xdc,(char) 0x77 ,(char)0x83, (char)0x78 ,(char)0xdc ,(char)0x77, 
(char)0xf0 ,(char)0x6b ,(char)0xdc ,(char)0x77,'\0'}; //сигнатура из сегмента кода.
 
FILE *outFile = fopen("input.txt", "w");
FILE *inFile;
char lpBuffer[PATH_LEN];
 
void FileFind(char *Dir, bool f)
{
SetCurrentDirectory(LPCWSTR(Dir));
LPWIN32_FIND_DATA ffd = new WIN32_FIND_DATA;
char MZ[] = {(char)0x4D, (char)0x5A};
memset (ffd, 0, sizeof (WIN32_FIND_DATA));
HANDLE hSearch = FindFirstFile (LPCWSTR("*"), ffd);
char str[2];
char sig[17];
//обход файлов в директории
do 
{
if ((ffd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))// если файл директория
{
if (ffd->cFileName[0] != '.' && f)
FileFind((char*)(ffd->cFileName), f);//Вызываем функцию поиска в рекурсии
} 
 
else
{
if (!(inFile = fopen((const char*)(ffd->cFileName), "rb")))
printf("\nFile %s not open\n", ffd->cFileName);
else
{
for (int i = 0; i < 2; i ++)
fscanf(inFile,"%c", &str[i]);
char d[PATH_LEN];
GetCurrentDirectory(PATH_LEN, LPWSTR(d));
if (strcmp(str, MZ) == 0)//Проверяем является ли файл ехе
{
fseek(inFile, 0x1230,SEEK_SET);//Пререходи в сегмент кода для сравнения сигнатур.
for (int i = 0; i < 16; i ++)
if (!feof(inFile))
fscanf(inFile, "%c", &sig[i]);
else 
{
fprintf(inFile,"in file %s\\%s signature not found\n", ffd->cFileName);
printf("in file %s\\%s signature not found\n", ffd->cFileName);
FindNextFile(hSearch, ffd);
break;
}
sig[16] = '\0';
if (strcmp(sig, signature) == 0){
fprintf(outFile,"in file %s\\%s SIGNATURE FOUND\n", d,ffd->cFileName);
printf("in file %s\\%s SIGNATURE FOUND\n", d,ffd->cFileName);}
//else 
// fprintf(outFile,"in file %s\\%s signature not found\n", d,ffd->cFileName);
}
memset(str, 0, 3);
memset(sig, 0, 16);
fclose(inFile);
}
}
} 
while (FindNextFile (hSearch, ffd));
SetCurrentDirectory(LPCWSTR(".."));
_getch();
CloseHandle (hSearch);
delete ffd;
 
}
 
 
void _tmain(int argc,char *argv[])
{
char lpBuffer1[PATH_LEN];
bool f = false;
 
FileFind(lpBuffer1, f); 
 
}
Вывод сообщения в результате:
File B not open
File v not open
и.т.д.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.04.2009, 08:58
Ответы с готовыми решениями:

Поиск по сигнатуре заданного файла в указанной директории
Помогите пожалуйста с задачкой... Поиск по сигнатуре заданного файла в указанной директории. Cначала берётся сигнатура у заданного...

подскажите пожалуйста почему не создается ехе в програме???
вот код програмы..... .386 text segment ‘code’ org 100h assume cs:text, ds:data main proc ; вывод mes1 о запуске дочернего...

Пожалуйста подскажите что делать все ехе файлы заблокированы, вирус Neshta
Утром все нормально было, потом знакомый приезжал на свою флешку закинул музыку через мой компьютер и ушел, я включаю компьютер потом все...

3
6 / 6 / 0
Регистрация: 28.03.2009
Сообщений: 29
10.04.2009, 11:05
Смотрим на поиск void FileFind(char *Dir, bool f)
SetCurrentDirectory(LPCWSTR(Dir)); - "где будем искать"
и тут 2 ошибки:
1. передается char *Dir (1 байт на символ) и этот поинтер приводится к wchar (2 байта на символ). Т.е. оставляем просто SetCurrentDirectory(Dir); а не SetCurrentDirectory(LPCWSTR(Dir));
2.
void _tmain(int argc,char *argv[])
{
char lpBuffer1[PATH_LEN]; // буфер не инициализирован, в нем мусор.
bool f = false;

FileFind(lpBuffer1, f); // мусор передается в функцию поиска.

Возможное решение:
FileFind("c:\\", f); // тогда будет искать на диске c:
1
0 / 0 / 0
Регистрация: 12.03.2009
Сообщений: 6
11.04.2009, 17:13  [ТС]
Спасибо. Однако здесь дан не весь код функции main.
Полный вид этой функции:

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
void main(int argc, char* argv[])
{   
    char lpBuffer1[PATH_LEN], r[3];
    r[0] = '-';
    r[1] = 'r';
    r[2] = '\0';
    bool f = false;
    switch (argc)
    {
        case 1: 
                GetCurrentDirectory (PATH_LEN, lpBuffer);
                break;
        case 2:
                if (strlen(argv[1]) < PATH_LEN)
                {
                    strcpy(lpBuffer, argv[1]);
                    LPWIN32_FIND_DATA ffd = new WIN32_FIND_DATA;
                    memset (ffd, 0, sizeof (WIN32_FIND_DATA));
                    HANDLE hFile = FindFirstFile (lpBuffer, ffd);
                    if (hFile == INVALID_HANDLE_VALUE)
                    {
                        printf("Dir not found\n");
                        delete ffd;
                        return;
                    }
                    else
                    {
                        if (!(ffd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
                        {
                            printf("File not dir\n");
                            delete ffd;
                            CloseHandle(hFile);
                            return;
                        }
                    }
 
                }
                else
                {
                    printf("error \n");
                    return;
                }
                break;
        case 3:
                if (strlen(argv[1]) < PATH_LEN)
                {
                    strcpy(lpBuffer, argv[1]);
                    LPWIN32_FIND_DATA ffd = new WIN32_FIND_DATA;
                    memset (ffd, 0, sizeof (WIN32_FIND_DATA));
                    HANDLE hFile = FindFirstFile (lpBuffer, ffd);
                    if (hFile == INVALID_HANDLE_VALUE)
                    {
                        printf("Dir not found\n");
                        delete ffd;
                        return;
                    }
                    else
                    {
                        if (!(ffd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
                        {
                            printf("File not dir\n");
                            delete ffd;
                            CloseHandle(hFile);
                            return;
                        }
                    }
                }
                if (strcmp(argv[2], r) == 0)
                    f = true;
                else
                {
                    printf("bag key\n");
                    return;
                }
                break;
    }
    strcpy(lpBuffer1, lpBuffer);
    FileFind(lpBuffer1, f); 
}
Подскажите пожалуйста
1)Какие данные нужно указывать в командной строке при запуске ехе файла?
2)В каких случаях мы получаем равенство при сравнении?Ведь r[] это целый массив.
(strcmp(argv[2], r)
f = true;
3)Скажите пожалуйста как получить полный путь к найденным файлам.
Буду очень презнателен за помощь.
0
6 / 6 / 0
Регистрация: 28.03.2009
Сообщений: 29
11.04.2009, 18:49
1. some.exe "c:\some_file_here.exe.or_not_exe" -r (-r - опционально)
2. Равенство будет если ключь "-r"
3. имя файла будет в ffd->cFileName
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.04.2009, 18:49
Помогаю со студенческими работами здесь

Как средствами Delphi реализовать извлечение ехе файла при запуске ехе?
Здорова, народ. Как средствами Delphi реализовать извлечение ехе файла при запуске ехе? Заранее спасибо!

Поиск файлов по сигнатуре
Доброго времени суток! Помогите пожайлуста. Требуется найти необходимый .exe файл по сигнатуре. Я написал функцию для поиска файлов. Только...

Поиск файлов по сигнатуре
Добрый день!Пишу программу для поиска файлов по сигнатуре. Как сделать что-бы в файле проверялось наличие сигнатуры(в качестве сигнатуры...

Расширение файла по сигнатуре
Подскажите программу определяющую расширение файла по его сигнатуре (TrIDNet не подходит)

Подскажите, пожалуйста, как ввести массив из текстового файла.
Здравствуйте. подскажите пожалуйста как ввести массив из текстового файла. Я написал программу но она в каждый элемент массива вставляет...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru