Delphi_检查exe文件是否是"随机基址"
2024-10-21 07:44:52
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 <> $ then // PE
ShowMessage('不是PE文件')
else
begin
pNtFileHdr := @pNtHdrs.FileHeader;
lbRelocsStripped := LongBool(pNtFileHdr.Characteristics and $);
if lbRelocsStripped then
ShowMessage('固定基址')
else
begin
if MessageBox(Self.Handle, '是否修改为固定基址?', '随机基址', MB_YESNO)=IDYES then
begin
pNtFileHdr.Characteristics := pNtFileHdr.Characteristics or $;
ms.SaveToFile(strExe2);
ShowMessage('随机基址 改为 固定基址 ==> 操作完成');
end;
end;
end;
finally
ms.Free;
end;
end;
2、
最新文章
- [转载]javascript创建对象的几种方式
- linux deepin-scrot 截图工具
- 每天php函数 - list()给一组变量赋值
- HTML: css 修飾文本和字體
- Debug BLE application with nRF Sniffer+wireshark
- python学习笔记(Tkinter编程利用Treeview实现表格自动更新)
- 原创+部分引用啦:C# Winform界面中的分隔线问题
- 蜗牛爱课- iOS中定时器NSTimer使用
- Linux学习:curl 与 wget命令
- 高性能IO模型浅析(转)
- 使用dropwizard(5)--加入swagger
- js变量的一点认识
- gcc学习(二)[第二版]
- Spring-IOC实现【02-其他实现方式】
- Fluent动网格【7】:网格节点运动
- 什么是anaconda【转载】
- oozie错误:javax.servlet.jsp.el.ELException: variable [***] cannot be resolved
- Template Method 模板方法 MD
- http://bbs.csdn.net/topics/392028373
- Oracle 11g客户端中文乱码问题
热门文章
- 二、docker入门
- EasyDSS流媒体服务器软件(支持RTMP/HLS/HTTP-FLV/视频点播/视频直播)-正式环境安装部署攻略
- EasyPlayer.js网页全终端播放器安装使用文档
- mongodb基础操作
- Object.defineProperties()
- resetForm(name1,name2)-我的JavaScript函数库-mazey.js
- 使用GUID作为数据表主键的好处(转)
- python并发编程&;多线程(二)
- mysql学习笔记—常用sql语句
- 常用mysql导入导出数据的命令