Delphi_检查exe文件是否是"随机基址"

ZC: cnpack 还是蛮好用的

 

1、代码:

procedure TForm1.btnRandomizedBaseAddressClick(Sender: TObject);
var pDosHdr :PImageDosHeader;
    pNtHdrs :PImageNtHeaders;
    pNtFileHdr :PImageFileHeader;
    ms :TMemoryStream;
    lbRelocsStripped :LongBool;// IMAGE_FILE_RELOCS_STRIPPED;
    strExe, strExe2 :string;
begin
  strExe := Trim(edtSelectFile01.Text);
  //ShowMessage(ExtractFilePath(strExe));
  //ShowMessage(ExtractFileName(strExe));
  //Exit;
  strExe2 := ExtractFilePath(strExe)+'ZZ_'+ExtractFileName(strExe);

  ms := TMemoryStream.Create;
  try
    ms.LoadFromFile(strExe);

    pDosHdr := ms.Memory;
    pNtHdrs := PImageNtHeaders(DWORD(ms.Memory) + pDosHdr._lfanew);
    if pNtHdrs.Signature <> $4550 then // PE
      ShowMessage('不是PE文件')
    else
    begin
      pNtFileHdr := @pNtHdrs.FileHeader;
      lbRelocsStripped := LongBool(pNtFileHdr.Characteristics and $01);
      if lbRelocsStripped then
        ShowMessage('固定基址')
      else
      begin
        if MessageBox(Self.Handle, '是否修改为固定基址?', '随机基址', MB_YESNO)=IDYES then
        begin
          pNtFileHdr.Characteristics := pNtFileHdr.Characteristics or $01;
          ms.SaveToFile(strExe2);
          ShowMessage('随机基址 改为 固定基址 ==> 操作完成');
        end;
      end;
    end;
  finally
    ms.Free;
  end;
end;

 

2、

转载于:https://www.cnblogs.com/CodeSkill/p/5577326.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值