首页 文章

如何在Delphi中获取包含可移植可执行文件中代码的部分的sha-256哈希?

提问于
浏览
1

我想在Delphi中的可移植可执行文件中获取包含代码(.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;

谢谢 .

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 . 除非你已经使用它 .

    无论如何都希望有所帮助 .

相关问题