|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Фев 24, 2003 22:00:02 Привет! Собственно столкнулся с сабжем. Что это такое? Как оно вычисляется или где находиться (вроде в самих системных dll-ках)? Ну и где вообщем используется? Буду очень благодарен. :) |
|
|
Дата: Фев 25, 2003 11:09:13 · Поправил: 90210 Считается checksum по всему pe (по оверлею тоже) - до разброса секций по виртуальным адресам. Предварительно обнуляется поле CheckSum в OptionalHeader'е. Можно считать так: DWORD RecalcPEChecksum(PBYTE image,DWORD imagesize) { // %] DWORD csum=0; for (DWORD i=0;i<imagesize;i+=2) if ((csum+=*(PWORD)&image[i])>=0x10000) (csum&=0xFFFF)++; return csum+imagesize; } А можно так: MapFileAndChecksumA/W из imagehlp.dll. |
|
|
Дата: Фев 25, 2003 13:41:37 Ну, я имел ввиду, что у каждой функции есть свой Checksum: APINames: dd 068624A9Dh ; CloseHandle dd 0FFC97C1Fh ; GetProcAddress dd 08C892DDFh ; CreateFileA dd 096B2D96Ch ; CreateFileMappingA dd 03C19E536h ; SetFileAttributesA dd 094524B42h ; UnmapViewOfFile dd 0C633D3DEh ; GetFileAttributesA dd 0797B49ECh ; MapViewOfFile dd 04134D1ADh ; LoadLibraryA dd 0C200BE21h ; FindClose dd 0AE17EBEFh ; FindFirstFileA dd 0AA700106h ; FindNextFileA Правда у разных авторов по разному. %| Почему это так? :( |
|
|
Дата: Фев 25, 2003 16:22:53 Вирья всякого насмотрелся? Эти checksum естесно нигде не хранятся (потому штаa они нормальным людям не уперлись никуда) - их посчитатли скорее всего сами "авторы" и скорее всего по строчкам с именами функций (в таблице экспорта). А почему разные? наверно потому что checksum тоже есть разные. |
|
|
Дата: Фев 25, 2003 17:35:19 Если имеется ввиду crc для имени функции, то физический смысл в том, чтобы для поиска в экспорте не использовать собственно имя а юзать контрольную сумму. Т.о. для любой функции нужно всего 4 байта, а не, например 18 для "CreateFileMappingA". Сама контрольная сумма может считаться по любому алгоритму, отсюда и разные значения. Глянь статейку: Locating API function offsets in memory |
|
|
Дата: Фев 25, 2003 17:43:46 Спасибо Four-F! |
|
|
Дата: Фев 26, 2003 10:58:40 Кстати, товарищ Rheingold nt не уважает - это верно только для w9x :) When an EXE file is executed, it's not (very) much more than a sub-call of Kernel32.dll (mostly of CreateProcessA). This means that at the start [esp] must contain the return offset to somewhere inside the Kernel32.dll and that is our starting point. |
|
|
Дата: Фев 26, 2003 12:31:06 Нэт, для NT это тоже справедливо, потому что реч идет об ЕХЕ, а вот длл под НТ действительнос пускается из ntdll, a не kernel32 |
|
|
Дата: Фев 28, 2003 10:41:23 Точно. Я попутал. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.074 |