eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 1 марта!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: Rio, SDK, stran34, sty (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› PE or NOT PE
Посл.ответ Сообщение


Ранг: 71.1 (постоянный)
Статус: Участник

Создано: 10 августа 2015 22:30 New!
Цитата · Личное сообщение · #1

Как быстро проверить, является ли файл валидным PE файлом? Проверка полей заголовка не гарантирует 100% результата. Это может быть нерабочий кусок исполняемого файла, или PE заголовок дописанный к любому бинарному мусору. Как я понимаю, файл надо запустить и проверить заведется ли он. Но нужно это сделать не запуская его.


Ранг: 516.5 (!)
Статус: Участник
Победитель турнира 2010

Создано: 10 августа 2015 22:58 New!
Цитата · Личное сообщение · #2

google - utility pevalid peverify pechecker


Ранг: 1975.0 (!!!!)
Статус: Модератор
retired

Создано: 10 августа 2015 23:02 New!
Цитата · Личное сообщение · #3

Смотря что считать валидным. Т.е. файл валидный для 7, скажем, может не пойти на ХР, потому что не хватает каких-то либ/функций в них. Если нужна привязка к ОС, то это лучше доверить самой ОС, это запускать. Если абстрактно, забивая вообще на импорт и некоторые хитрозадые директории типа LoadConfig, то глядеть работу загрузчика и эмулить его, в принципе в ринг3 кода не особо много.

Ранг: 16.8 (новичок)
Статус: Участник

Создано: 11 августа 2015 09:08 New!
Цитата · Личное сообщение · #4

result := False;
hFile := CreateFile( PChar(FileName),
GENERIC_READ,
FILE_SHARE_READ,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if hFile = INVALID_HANDLE_VALUE then exit;
// вся ФИШКА SEC_IMAGE !!!
flProtect := PAGE_READONLY or SEC_IMAGE;

try
hFileMapping := CreateFileMapping( hFile,
nil,
flProtect,
0,
0,
nil);
CloseHandle(hFile);
except
CloseHandle(hFile);
Exit;
end;
if hFileMapping = 0 then Exit;
try
pMemory := MapViewOfFile( hFileMapping,
FILE_MAP_READ,
0,
0,
0);
Result := pMemory <> nil;
if Result then UnmapViewOfFile(pMemory);
finally
CloseHandle(hFileMapping);
end;


Ранг: 355.4 (мудрец)
Статус: Uploader
5KRT

Создано: 11 августа 2015 09:24 · Поправил: 11 августа 2015 09:51 Coderess New!
Цитата · Личное сообщение · #5

vitokop Т.е. вы не проверяете сигнатуру MZ в DOS-хидере?
--> Правильность PE файла <--

P.S.
// вся ФИШКА SEC_IMAGE !!!
В сплошном тексте без подсветки не заметил, сори.

Ранг: 16.8 (новичок)
Статус: Участник

Создано: 11 августа 2015 09:36 New!
Цитата · Личное сообщение · #6

// вся ФИШКА SEC_IMAGE !!!

ПУСТЬ сама ОС все проверит как надо

можно конечно проверить и на DOS и на NT, но Windows
Сделает все сама

Ранг: 284.2 (наставник)
Статус: Модератор
CrackLab

Создано: 11 августа 2015 13:49 New!
Цитата · Личное сообщение · #7

LoadLibraryEx - меньше кода


Ранг: 71.1 (постоянный)
Статус: Участник

Создано: 11 августа 2015 14:31 New!
Цитата · Личное сообщение · #8

vitokop - интересный способ, сейчас гуглю его


SReg пишет:

LoadLibraryEx - меньше кода
- это не сработает, PE файлы могут быть 32 и 64 bit


Статус: Пришелец

Создано: 11 августа 2015 14:58 New!
Цитата #9

jangle пишет:
это не сработает, PE файлы могут быть 32 и 64 bit

Так отреверсите обе версии.


Ранг: 71.1 (постоянный)
Статус: Участник

Создано: 11 августа 2015 15:16 New!
Цитата · Личное сообщение · #10

int - мне программно нужно проверять. Из 32-битного приложения. Соответственно LoadLibraryEx обломается на 64-битном PE.
 eXeL@B —› Программирование —› PE or NOT PE

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS