1

Delphi で、Portable Executable ファイルにコード (.text, CODE) を含むセクションの sha-256 ハッシュを取得したいと考えています。

ここまで、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;

ありがとうございました。

4

1 に答える 1

0

私はまだあなたの質問にコメントすることができないので、ここで返信しようとしていますが、あなたが求めていることについて私が正しく考えているかどうかはわかりません.

ファイルがメモリにロードされた後、誰もファイルを変更していないことを保証する方法が必要なようです。そのため、そのセクションの sha-256 ハッシュが必要であり、おそらくそのセクションを取得してからハッシュする必要があります。

そのために JCL クラスを使用したことはありません。しかし、あなたに役立つかもしれないこのユニットを見つけました。PE ファイルを編集できます。2007 年に書かれたので、おそらくいくつかのコードをアップグレードする必要があります。しかし、あなたが望むもののベースを見つけることができると確信しています. http://www.coderprofile.com/networks/source-codes/71/portable-executable-file-unit

まったくテストできませんでした。しかし、私がテストするまで、開始アドレスはここで変更されませんでした..

Sha-256 を入手するには、それを行うための多くの VCL コンポーネント (または少なくとも ActiveX) が必要です。LIBEAY32.DLL を使用することをお勧めしますが、それではアプリケーションに dll が 1 つ追加される可能性があります。すでに使用していない限り。

とにかく助けてくれることを願っています。

于 2011-02-07T17:11:44.290 に答える