Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверить файл на исполняемость PE 
:(
    Опции темы
vasadisim
Дата 2.9.2016, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вывести список всех исполняемых фалов из выбранного каталога
PM MAIL   Вверх
feodorv
Дата 3.9.2016, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Выбрал папку, вывел список. Что-нибудь еще?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
vol4ek
Дата 3.9.2016, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


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

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



Цитата(feodorv @ 3.9.2016,  12:24)
Выбрал папку, вывел список. Что-нибудь еще?

наверное дело в неумении все это сделать
Код

#include<windows.h>
#include<iostream>
 
using namespace std;
int main()
{
    WIN32_FIND_DATAW wfd;
    HANDLE const hFind = FindFirstFileW(L"C:\\Windows\\*.exe", &wfd);
    setlocale(LC_ALL, "");
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
            std::wcout  << &wfd.cFileName[0]  << std::endl;
      } while (NULL != FindNextFileW(hFind, &wfd));
 
        FindClose(hFind);
    }
    system("pause"); 
    return 0;
}

PM MAIL ICQ   Вверх
vasadisim
Дата 3.9.2016, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



фишка в том что не только exe файлы являются исполняемыми, нужно открывать и читать заголовок если ест PE, то файл считается исполняемым и его выводим, как реализовать это
PM MAIL   Вверх
_zorn_
Дата 4.9.2016, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1076
Регистрация: 21.8.2007

Репутация: 1
Всего: 12



Можешь проверять на MZ в начале файла. Если хочешь дальше пойти - PE формат тебе в помощь.
IMAGE_DOS_HEADER, а дальше IMAGE_NT_HEADERS и т.п.

Но лучше бы описать что в конечном итоге хочешь, а то лично для меня ты выглядишь очередным нубо заражателем. Или того хуже антивирусописателем.

Это сообщение отредактировал(а) _zorn_ - 4.9.2016, 07:40
PM MAIL   Вверх
vol4ek
Дата 4.9.2016, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


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

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



Цитата(_zorn_ @ 4.9.2016,  07:35)
Или того хуже антивирусописателем. 

все когда-то с чего-то начиналось

Добавлено через 1 минуту и 36 секунд
Цитата(_zorn_ @ 4.9.2016,  07:35)
Можешь проверять на MZ в начале файла.

вот это я почему-то совсем упустил. достаточно простой способ
PM MAIL ICQ   Вверх
vasadisim
Дата 4.9.2016, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



vol4ek, можешь помочь и реализовать проверку на MZ?
PM MAIL   Вверх
_zorn_
Дата 4.9.2016, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1076
Регистрация: 21.8.2007

Репутация: 1
Всего: 12



Цитата(vol4ek @  4.9.2016,  19:27 Найти цитируемый пост)
все когда-то с чего-то начиналось

Ну мой первый "вирус" (благо в дикую природу не пошел) просто менял значения в реестре. И был достаточно мощным smile
Но я ЗНАЛ ЧТО ДЕЛАЛ. А это убожество даже начало файла на MZ проверить не может...
PM MAIL   Вверх
vol4ek
Дата 4.9.2016, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


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

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



открыть файл, прочитать первых 2 байта, сравнить с 0x4D и 0x5A, если совпадают, то, скорее всего, файл PE. потом закрыть файл, (освободить память).

Добавлено через 2 минуты и 7 секунд
Цитата(_zorn_ @ 4.9.2016,  16:58)
Цитата(vol4ek @  4.9.2016,  19:27 Найти цитируемый пост)
все когда-то с чего-то начиналось

Ну мой первый "вирус" (благо в дикую природу не пошел) просто менял значения в реестре. И был достаточно мощным smile
Но я ЗНАЛ ЧТО ДЕЛАЛ. А это убожество даже начало файла на MZ проверить не может...

да и нынешние антивири даже внедрение функций не всегда пропускают и внедрение кода, неговоря уже про это детское баловство автора

Добавлено через 3 минуты и 36 секунд
vasadisim, рассказывай что делаем аж интересно стало
PM MAIL ICQ   Вверх
rudolfninja
Дата 4.9.2016, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 3
Всего: 6



В книге Владислава Пирогова "Ассемблер и дизассемблирование" представлена программа, с помощью которой можно определить является ли данный файл PE-модулем (см. листинг 1.14 и приложение П1).
А вообще, соглашусь с vol4ek и _zorn_: раз вы не в силах проверить два первый байта файла, то вы выбрали непосильную задачу. Даже если вам тут напишут решение, то пользы от этого вам, как программисту, никакой не будет. Начните с более простых вещей.

PM MAIL Skype   Вверх
vol4ek
Дата 4.9.2016, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


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

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



Цитата(rudolfninja @ 4.9.2016,  19:48)
В книге Владислава Пирогова "Ассемблер и дизассемблирование" представлена программа, с помощью которой можно определить является ли данный файл PE-модулем (см. листинг 1.14 и приложение П1).
А вообще, соглашусь с vol4ek и _zorn_: раз вы не в силах проверить два первый байта файла, то вы выбрали непосильную задачу. Даже если вам тут напишут решение, то пользы от этого вам, как программисту, никакой не будет. Начните с более простых вещей.

да и вообще, то, что задумал автор, (вангану, что дописать что-нибудь в файл) у него не получится. точнее получится но сразу сработает антивигусное ПО. вот был бы у него валидный сертификат для подписи, другое дело. а так... все мы это делали когда-то  smile 
PM MAIL ICQ   Вверх
vasadisim
Дата 7.9.2016, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот написал код, но он пишет что exe файлы не PE структуры, помогите разобраться и указать на ошибки
Код

#include "stdafx.h"
#include <iostream>
#include <Windows.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    WIN32_FIND_DATA fd;
    //Начать поиск всех файлов в корне диска C:
    HANDLE hFind = FindFirstFile(L"c:\\*", &fd);
    CHAR buf[2];
    do
    {
        // Если ошибка поиска(например, нет диска С):
        if (hFind == INVALID_HANDLE_VALUE) cout << "error";
        else
        {
            ReadFile(hFind, buf, 2, 0, 0);
            if (buf[0] == 'M' && buf[1] == 'Z') cout << "PE!" << endl;
            else cout << "Not PE" << endl;
        }        
        // Вывести имя файла или папки на экран:
        wcout << fd.cFileName << "\n";
        // Перевод на новую строку (для вывода след. файла):
        cout << "\n";
        // Найти следующий файл, удовлетворяющий условиям поиска. Если файл найден, повторить цикл:
    } while (FindNextFile(hFind, &fd));
    // Завершить поиск:
    FindClose(hFind);
    // Ожидание нажатия любой клавиши (чтобы не закрылось окно):
    system("pause");
    return 0;
}

PM MAIL   Вверх
rudolfninja
Дата 7.9.2016, 20:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 3
Всего: 6



HANDLE, который вы получаете с помощью FindFirstFile нельзя использовать в ReadFile. Он используется для FindNextFile.
Что бы получить HANDLE файла, информация о котором хранится в переменной fd, нужно открыть этот файл. Для этого нужно сформировать путь к этому файлу. Это сделать нетрудно. Для конкретно вашего примера код будет выглядеть примерно следующим образом:
Код

WIN32_FIND_DATA fd;
    //Начать поиск всех файлов в корне диска C:
    HANDLE hFind = FindFirstFile(L"c:\\*", &fd);
    char buf[2];
    do
    {
        // Если ошибка поиска(например, нет диска С):
        if (hFind == INVALID_HANDLE_VALUE) std::cout << "error";
        else
        {
            std::wstring path = L"c:\\";
            path += fd.cFileName;
            HANDLE hFile = hFile = CreateFile(path.c_str(),              
                GENERIC_READ,          
                NULL,       
                NULL,                  
                OPEN_EXISTING,         
                NULL,
                NULL);
            if (hFile == INVALID_HANDLE_VALUE)
            {
                CloseHandle(hFile);
                continue;
            }
            DWORD nRead;
            BOOL res = ReadFile(hFile, buf, 2, &nRead, NULL);
            if (buf[0] == 'M' && buf[1] == 'Z') std::cout << "PE!" << std::endl;
            else std::cout << "Not PE" << std::endl;
            CloseHandle(hFile);
        }
        // Вывести имя файла или папки на экран:
        std::wcout << fd.cFileName << "\n";
        // Перевод на новую строку (для вывода след. файла):
        std::cout << "\n";
        // Найти следующий файл, удовлетворяющий условиям поиска. Если файл найден, повторить цикл:
    } while (FindNextFile(hFind, &fd));
    // Завершить поиск:
    FindClose(hFind);


Только учтите, что в данном случае вы не проверяете подпапки, а только корневой каталог диска C:\\.
PM MAIL Skype   Вверх
vasadisim
Дата 7.9.2016, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



rudolfninja, спасибо большое, а для того чтобы с заходом в каталоги, нужно рекурсию организовать?
PM MAIL   Вверх
rudolfninja
Дата 8.9.2016, 10:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 3
Всего: 6



Да, что бы еще и подкаталоги все пройти нужно написать рекурсивную функцию. В  интернете примеров этой функции полно.
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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