Сейчас на форуме: UniSoft, laslo, bartolomeo (+5 невидимых) |
eXeL@B —› Программирование —› Контрольная сумма образа в памяти |
Посл.ответ | Сообщение |
|
Создано: 17 ноября 2011 09:25 · Личное сообщение · #1 Как можно посчитать контрольную сумму (кс) уже загруженного и исполняющегося образа? Мои соображения: вариант 1: тупо считать КС секции кода (.text для MS) не подходит т.к. , например в .rdata хранятся vmt и указатели на ф-ции раскрутки стека. Лучше считать КС от .text + .rdata предварительно вытащив импорт и сгенерировав переходники в IAT + если есть релоки, отнимать дельту для каждого фиксапа. Что еще может меняться в .rdata/.text? вариант 2: вытащить из .pdb весь код/константы, построить таблицу блоков и по ним считать + релоки. |
|
Создано: 17 ноября 2011 09:40 · Личное сообщение · #2 |
|
Создано: 17 ноября 2011 09:48 · Поправил: HiEndsoft · Личное сообщение · #3 считать ее из загруженого в память PE-хидера если она там не обнулена конечно bowrouco пишет: LdrVerifyImageMatchesChecksum(). дык там кажись файл нужен может LdrVerifyMappedImageMatchesChecksum ----- продавец резиновых утёнков |
|
Создано: 17 ноября 2011 09:50 · Личное сообщение · #4 |
|
Создано: 17 ноября 2011 09:53 · Личное сообщение · #5 |
|
Создано: 17 ноября 2011 10:04 · Поправил: bowrouco · Личное сообщение · #6 |
|
Создано: 17 ноября 2011 10:06 · Личное сообщение · #7 |
|
Создано: 17 ноября 2011 10:21 · Личное сообщение · #8 |
|
Создано: 17 ноября 2011 10:28 · Поправил: HiEndsoft · Личное сообщение · #9 |
|
Создано: 17 ноября 2011 11:00 · Личное сообщение · #10 да, извиняюсь. задача сводится к проверки целостности кода. Слабо представляю как такие проверки кроме сверки контрольной суммы/ЭЦП можно реализовать. Касательно 1го способа. TLS обладает собственной секцией + там ничего интересного. языковые сепшены либо в .rdata, либо .pdata. Расурсы не интересуют. Экспорт/Импорт не меняеться. остается IAT и релоки. По релокам отнимаем дельту, для IAT генерируем jmp вне проверяемых секций + свой импортер. В принципе проверяемые секции можно и склеить, но аверы начнут кричать. По 2му: вроде в .pdb есть вся необходимая информация, но a) размер таблиц проверяемых блоков может быть очень значительным b) нет опыта работы с .pdb |
|
Создано: 17 ноября 2011 11:07 · Личное сообщение · #11 0x90h Может свести задачу к простому и сделать проверку критических участков кода а не лопатить всё подряд? ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. | Сообщение посчитали полезным: PE_Kill |
|
Создано: 17 ноября 2011 11:57 · Личное сообщение · #12 |
|
Создано: 17 ноября 2011 13:06 · Личное сообщение · #13 |
|
Создано: 17 ноября 2011 19:57 · Личное сообщение · #14 |
|
Создано: 17 ноября 2011 20:10 · Поправил: Hexxx · Личное сообщение · #15 0x90h Проверяем контрольную сумму файла на диске. Сравниваем что не совпадает в образе в памяти и образе на диске. Проверяем какие несовпадения связаны с релоками. Проверяем чтобы импорты вели куда заявлено. Остальное - видимо хуки. Ну и еще нужно учитывать что бывают "легальные хуки", когда приложение само себя хучит. Ну и с хуками данных ничего сделать нельзя. И конечно упакованные файлы тоже так не проверишь. ----- Реверсивная инженерия - написание кода идентичного натуральному | Сообщение посчитали полезным: 0x90h, Dart Sergius |
|
Создано: 18 ноября 2011 05:39 · Личное сообщение · #16 |
|
Создано: 18 ноября 2011 07:56 · Личное сообщение · #17 PE_Kill пишет: Hexxx винда может патчить NtHeaders, для совместимости с 9x. Можно подробней, какая винда что патчит и при каких условиях? ----- PGP key |
|
Создано: 18 ноября 2011 14:25 · Личное сообщение · #18 Килл в бане за нехорошие слова, просил отписать за него. ntldr пишет: Можно подробней, какая винда что патчит и при каких условиях? Смотри сорсы Win2k. Win2000, WinXP точно патчат, остальные думаю тоже, легко проверить. Сорсы: Code:
| Сообщение посчитали полезным: ntldr |
|
Создано: 18 ноября 2011 15:13 · Личное сообщение · #19 Archer У тебя не будет парочки файлов с этим самым "Borland linker problem"? Надо бы потестить кое-что из моих проектов. На дельфевых прогах ничего подобного не замечал. ----- PGP key |
|
Создано: 18 ноября 2011 15:23 · Поправил: Maximus · Личное сообщение · #20 |
|
Создано: 18 ноября 2011 15:32 · Личное сообщение · #21 Maximus Если поискать строку "Borland" по исходникам винды, находится не одно это место. Еще есть: Code:
Code:
Вручную я это уже смоделировал, но хотелось бы проверить на реальных программах. Тесты лишними не бывают. ----- PGP key |
|
Создано: 18 ноября 2011 16:20 · Личное сообщение · #22 |
|
Создано: 18 ноября 2011 16:44 · Личное сообщение · #23 |
|
Создано: 18 ноября 2011 19:11 · Личное сообщение · #24 Hexxx пишет: упакованные файлы тоже так не проверишь В моем случае все упаковано в секции упаковщика и копия там остается. Можно добавить в упаковываемый стрим структуру описывающую ориг размеры секций, и считать только их. Вариация с таблицами считаемых блоков. Archer пустые секции не интересны - там кода нет. tls , на сколько мне известно, вообще пустая секция в памяти заполняемая tls_index`ами загрузчиком. NT_HDR аналогично, код не содержит. Если VirtSize == 0 и RawSize == 0, образ не валидный. ntldr Давно известная проблема. В моем случае не актуально, борлендом никто не пользуется. |
eXeL@B —› Программирование —› Контрольная сумма образа в памяти |