· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Checksums of WinAPI functions

Посл.отвђт Сообщен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