Современные решения

для защиты Windows приложений

и восстановления исходного кода
АвтъA: SLV. Дат? ??бликации: 03.08.2004

НА??саыG? ??рректора ??ыQрсум??... ъь Delphi

В ?то? стат?? ? ??ивед? тчател??? ъC????ентироваыLый исходник ??ьBра???, ??рректиру?ще? ??ыQрсум?? WindowsPE файл?. Язы? ??ьBра??ирьAан??, ??? видн? - Delphi.

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

uses Windows, SysUtils, PElib, ImageHlp, Classes; // ДжеыQел??ентс??? ъьбо?

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

begin
ifParamStr(1)=’’ then // Есл? ??ьB? за??щеъь бе? ??ра??трьA
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); // СьFдаё? файл ? ??авьK? ъь i/o
ifhFile=INVALID_HANDLE_VALUE then // Есл? чт?-то ыD та?
begin
writeln(ParamStr(1) + ? File access error?);
CloseHandle(hFile);
read; // то ухьCим
Exit;
end;
FileSize:=GetFileSize(hFile,nil); // Берё? размер файл?
if FileSize=INVALID_FILE_SIZE then // Есл? ?? раве? 0xFFFFFFFF
begin
writeln(ParamStr(1) + ? Invalid File Size?);
CloseHandle(hFile);
read; // то ухьCим
Exit;
end;
M:=TMemoryStream.Create;// АбстрактньD создание ??то?? ????ти
M.LoadFromFile(ParamStr(1)); // ЗапьJ??ем ег?
dosh:=PIMAGE_DOS_HEADER(M.Memory); // ЗапьJ??ем DOS header
peh:= PIMAGE_NT_HEADERS(Longword(dosh) + Longword(dosh.e_lfanew)); // ? NT header
ifdosh.e_magic<>IMAGE_DOS_SIGNATURE then // ес?? e_magic ыD равн? MZ
begin
writeln(’It is not valid PE file?); // то ?то ыD ъь? ??иеыQ
read;
Exit;
end;
hMap:=CreateFileMapping(hFile,nil,PAGE_READWRITE,0,0,nil); // СьFдаё? 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 ????чает значение фуыIци? MapViewOfFile, ??именёыLьH ? вышесозданыM?? //файл?
CheckSumMappedFile(base,FileSize,lastsum,correctsum); // CheckSumMappedFile - main proc
peh.OptionalHeader.CheckSum:=Cardinal(correctsum); // КъAре??ируе???
writeln(’CheckSum correcting success!?); // радуем??
writeln(’Header CheckSum: ? + IntToStr(Integer(lastsum))); // ? ????зываем
writeln(’Correct CheckSum: ? + IntToStr(Integer(correctsum))); // чт? сотвъAил?
CloseHandle(hFile); // Закрываем
CloseHandle(hMap);// хеыC??
UnmapViewOfFile(base);
end.

Как видите, ъь??сать ??рректо? ??ыQрсум?? ыD сльEыM, ??ст? ъьдо знат? чт? ??сать. Г??вн??? ро?? ? ??ьBра??? игра?? фуыIци?



CODE NOW!
PIMAGE_NT_HEADERS CheckSumMappedFile(

IN LPVOID BaseAddress, // ЗъьчёыG?, возвращаемьD фуыIцией MapViewOfFile

IN DWORD FileLength, // Д??ъь (размер) файл?

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

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

);





HANDLE CreateFile(

LPCTSTR lpFileName, // И?? файл?

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

DWORD dwShareMode, // share mode

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // У??зате?? ъь атрибуты безо??снъBти

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

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

HANDLE hTemplateFile // Хендл те????йт?

);



HANDLE CreateFileMapping(

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

LPSECURITY_ATTRIBUTES lpFileMappingAttributes, // Атрибут? безо??снъBти (ъ@ци??ал???)

DWORD flProtect, // ЗАщита ь@ъе???

DWORD dwMaximumSizeHigh, // Макси????ыZ? размер ь@ъе???

DWORD dwMaximumSizeLow, // Минимал??ый размер ь@ъе???

LPCTSTR lpName // И?? ь@ъе???

);


С??сибо за интере? ? стат??.

Комментарии

отсутствуют

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


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

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

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

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