DotFix :: Портал разработки и защиты программ
Главная
Программы
Статьи
Разное
Форум
Контакты
Автор: SLV. Дата публикации: 03.08.2004

НАписание корректора контрсуммы... на Delphi

В этой статье я приведу тчательно откомментированный исходник программы, корректирующей контрсумму WindowsPE файла. Язык программирования, как видно - Delphi.

program CheckSum; // Естественно =)

uses Windows, SysUtils, PElib, ImageHlp, Classes; // Джентельментский набор

CODE NOW!
var hFile:THandle; // Для CreateFile
hMap:THandle; // Для CretaeFileMapping
FileSize:integer; // Для GetFileSize
correctsum:pdword; // Откоректированная сумма будет хроаниться тут
lastsum:pdword; // А та, которая есть - тут
base:Pointer; // Для API
peh:PIMAGE_NT_HEADERS; // Для OPTIONAL HEADER-а
dosh:PIMAGE_DOS_HEADER; // Для создания PIMAGE_NT_HEADERS
m:TMemoryStream; // Без этого работать не будет

begin
ifParamStr(1)=’’ then // Если прога запущена без параметров
begin
writeln(’Usage: CheckSum.exe InputFile’); // то покажем, как ей надо пользоваться
read;
end;
hFile:=CreateFile(PChar(ParamStr(1)),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); // Создаём файл с правоми на i/o
ifhFile=INVALID_HANDLE_VALUE then // Если что-то не так
begin
writeln(ParamStr(1) + ’ File access error’);
CloseHandle(hFile);
read; // то уходим
Exit;
end;
FileSize:=GetFileSize(hFile,nil); // Берём размер файла
if FileSize=INVALID_FILE_SIZE then // Если он равен 0xFFFFFFFF
begin
writeln(ParamStr(1) + ’ Invalid File Size’);
CloseHandle(hFile);
read; // то уходим
Exit;
end;
M:=TMemoryStream.Create;// Абстрактное создание потока памяти
M.LoadFromFile(ParamStr(1)); // Заполняем его
dosh:=PIMAGE_DOS_HEADER(M.Memory); // Заполняем DOS header
peh:= PIMAGE_NT_HEADERS(Longword(dosh) + Longword(dosh.e_lfanew)); // и NT header
ifdosh.e_magic<>IMAGE_DOS_SIGNATURE then // если e_magic не равно MZ
begin
writeln(’It is not valid PE file’); // то это не наш клиент
read;
Exit;
end;
hMap:=CreateFileMapping(hFile,nil,PAGE_READWRITE,0,0,nil); // Создаём MappedFile
if hMap = 0 then // if (hMap==NULL) {return 0;} // C++
begin
writeln(’File mapping error’);
CloseHandle(hFile);
hMap:=hMap xor hMap; // xor eax,eax =)
read;
end;
base:=MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0,0,0);
// Переменная base получает значение функции MapViewOfFile, применённой к вышесозданному //файлу
CheckSumMappedFile(base,FileSize,lastsum,correctsum); // CheckSumMappedFile - main proc
peh.OptionalHeader.CheckSum:=Cardinal(correctsum); // Корректируемся
writeln(’CheckSum correcting success!’); // радуемся
writeln(’Header CheckSum: ’ + IntToStr(Integer(lastsum))); // и показываем
writeln(’Correct CheckSum: ’ + IntToStr(Integer(correctsum))); // что сотворили
CloseHandle(hFile); // Закрываем
CloseHandle(hMap);// хендлы
UnmapViewOfFile(base);
end.

Как видите, написать корректор контрсуммы не сложно, прсто надо знать что писать. Главнкую роль в программе играют функции



CODE NOW!
PIMAGE_NT_HEADERS CheckSumMappedFile(

IN LPVOID BaseAddress, // Значёние, возвращаемое функцией MapViewOfFile

IN DWORD FileLength, // Длина (размер) файла

OUT LPDWORD HeaderSum, // Сумма из хедера

OUT LPDWORD CheckSum // "Настоящая" сумма

);





HANDLE CreateFile(

LPCTSTR lpFileName, // Имя файла

DWORD dwDesiredAccess, // Режим читать/писать (права доступа)

DWORD dwShareMode, // share mode

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // Указатель на атрибуты безопасности

DWORD dwCreationDistribution, // Как создавать

DWORD dwFlagsAndAttributes, // Аттрибуты файла

HANDLE hTemplateFile // Хендл темплейта

);



HANDLE CreateFileMapping(

HANDLE hFile, // Хендл файла

LPSECURITY_ATTRIBUTES lpFileMappingAttributes, // Атрибуты безопасности (опционально)

DWORD flProtect, // ЗАщита объекта

DWORD dwMaximumSizeHigh, // Максимальный размер объекта

DWORD dwMaximumSizeLow, // Минимальный размер объекта

LPCTSTR lpName // Имя объекта

);


Спасибо за интерес к статье.
Комментарии
отсутствуют

Добавление комментария

Ваше имя (на форуме):

Ваш пароль (на форуме):

Комментарии могут добавлять только пользователи,
зарегистрированные на форуме данного сайта. Если Вы не
зарегистрированы, то сначала зарегистрируйтесь тут

Комментарий:



04.09.2011 Долгожданный релиз VB Decompiler. Масса улучшений декомпиляции Native Code. Значительно расширенна и обновлена справочная система на русском и английском языках.
20.12.2010 DotFix Software поздравляет наших клиентов и посетителей сайта с наступающим Новым Годом и рождеством! Желаем приятно провести праздники и успехов в новом году!
28.11.2010 Выпущена новая версия защиты DotFix NiceProtect. Основные изменения коснулись обфускатора Delphi программ. Теперь имеется полная поддержка Tab и Page контролов на формах, что обеспечивает максимальную совместимость обфускации с Delphi XE программами.
21.10.2010 Обновлен декомпилятор Visual Basic программ до версии 8.1. Декомпиляция P-Code программ становится все более идеальной, также проделана большая работа по улучшению анализа Native Code и .NET приложений.
16.09.2009 Полностью обновлен движок сайта! Теперь все ссылки имеют читаемый понятный вид, разного рода глюки на страницах убраны. И теперь сайт полноценно работает на второй версии нашего движка.
Архив новостей
Яндекс цитирования

Движок сайта: DotFix Engine v0.2
Администрация сайта:
Казино онлайн, зал игровых автоматов. Игровые автоматы онлайн - играть бесплатно и без регистрации. . ссуда под залог авто . оптимизация сайта на дле под поисковики