Как получить хэш sha-256 раздела, который содержит код в файле Portable Executable, в Delphi? - PullRequest
1 голос
/ 05 февраля 2011

Я хотел бы получить хэш sha-256 для раздела, который содержит код (.text, CODE) в файле Portable Executable, в Delphi.

До сих пор я пытался получить начальный и конечный адрес раздела, на который указывает AddressOfEntryPoint, но если я загружаю один и тот же файл несколько раз, я получаю разные начальный и конечный адреса.

Может кто-нибудь, пожалуйста, помогите мне?

Это код:

procedure TForm1.Button1Click(Sender: TObject);
var x:TJCLPEImage;
aoep,cs,ce: cardinal;
pise: Pimagesectionheader;
nos : integer;
i : integer;
begin

x := TJCLPEImage.Create();
x.FileName:=edit1.Text;
aoep := x.OptionalHeader32.AddressOfEntryPoint;
pise := Pointer(PByte(@(x.LoadedImage.FileHeader.OptionalHeader)) + x.LoadedImage.FileHeader.FileHeader.SizeOfOptionalHeader);

for i:=0 to x.ImageSectionCount-1 do
begin
if (pise.VirtualAddress <= aoep) and (aoep < (pise.VirtualAddress + pise.Misc.VirtualSize)) then
    break;

end;

inc(pise);

cs := DWORD(x.LoadedImage.MappedAddress) + DWORD(pise.PointerToRawData);
ce := cs + pise.Misc.VirtualSize;

Label1.caption:='Code start: '+Inttostr(cs);
Label2.caption:='Code end: '+inttostr(ce);

end;

Спасибо.

1 Ответ

0 голосов
/ 07 февраля 2011

Я пока не могу комментировать ваш вопрос, поэтому я пытаюсь ответить здесь, но не уверен, правильно ли я думаю о том, что вы спрашиваете.

Кажется, вы хотите, чтобы никто не изменил вашфайл после его загрузки в память.Вот почему вам нужен хэш-код sha-256 этого раздела, и, возможно, вам нужно получить этот раздел и затем его хешировать.

Я никогда не использовал классы JCL для этого.Но нашел этот аппарат, который может помочь вам.Это позволяет вам редактировать PE файлы.Был написан в 2007 году, так что, возможно, вам потребуется обновить код.Но я уверен, что вы найдете основы для того, что вы хотите.http://www.coderprofile.com/networks/source-codes/71/portable-executable-file-unit

Я не мог проверить это вообще.Но до того, что я проверил, начальный адрес здесь не изменился ..

Чтобы получить Sha-256, найдут много компонентов VCL (или, по крайней мере, ActiveX) для этого.Я мог бы посоветовать вам использовать LIBEAY32.DLL, но это, вероятно, добавит еще одну DLL к вашему приложению.Если вы уже не используете его.

Надеюсь, что помощь в любом случае.

...