Сейчас на форуме: jinoweb (+4 невидимых)

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


Ранг: 71.9 (постоянный), 4thx
Активность: 0.040
Статус: Участник

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

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




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

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

google - utility pevalid peverify pechecker

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

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

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



Ранг: 17.6 (новичок)
Активность: 0.01=0.01
Статус: Участник

Создано: 11 августа 2015 09:08
· Личное сообщение · #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 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

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

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

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

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 17.6 (новичок)
Активность: 0.01=0.01
Статус: Участник

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

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

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

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



Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

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

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




Ранг: 71.9 (постоянный), 4thx
Активность: 0.040
Статус: Участник

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

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


SReg пишет:

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



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 11 августа 2015 14:58
· Личное сообщение · #9

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

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




Ранг: 71.9 (постоянный), 4thx
Активность: 0.040
Статус: Участник

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

int - мне программно нужно проверять. Из 32-битного приложения. Соответственно LoadLibraryEx обломается на 64-битном PE.


 eXeL@B —› Программирование —› PE or NOT PE
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати