- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法确定exe文件是否已经用UPX压缩?
确定 exe 文件是否已压缩的功能非常出色,只是我发现代码有问题。如果调用函数 IsUPXcompressed 然后尝试运行 upx,upx 无法保存它修改的文件。该功能中存在无法正确共享权限的问题。我已经对此进行了几个小时的测试。如果我不调用该方法,那么 UPX 可以毫无问题地写入文件。你调用它然后尝试运行 UPX 它不会保存文件。尝试写入文件时,UPX 报告 IOException Permission returned 错误。
任何人都可以发现代码中可能导致此问题的错误吗?
谢谢
<小时/>确定 exe 文件是否已压缩的功能非常出色,只是我发现代码有问题。如果调用函数 IsUPXcompressed 然后尝试运行 upx,upx 无法保存它修改的文件。该功能中存在无法正确共享权限的问题。我已经对此进行了几个小时的测试。如果我不调用该方法,那么 UPX 可以毫无问题地写入文件。你调用它然后尝试运行 UPX 它不会保存文件。尝试写入文件时,UPX 报告 IOException Permission returned 错误。
任何人都可以发现代码中可能导致此问题的错误吗?
谢谢
最佳答案
另一种方法,当使用 UPX 工具打包 exe 时,PE header 部分包含名为 UPX0
、UPX1
等的部分,因此如果阅读这些部分并将该名称与字符串 UPX
进行比较,您可以确定该 exe 是否是使用 UPX 加壳程序压缩的。
检查此功能
uses
Windows;
function IsUPXCompressed(const Filename:TFileName): Boolean;
var
i : integer;
pBaseAddress : PByte;
pDosHeader : PImageDosHeader;
pNtHeaders : PImageNtHeaders;
hFile : Cardinal;
hFileMap : Cardinal;
pSectionHeader: PImageSectionHeader;
dwOffset : Cardinal;
SectName : AnsiString;
begin
Result:=False;
hFile := CreateFile(PChar(Filename), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (hFile = INVALID_HANDLE_VALUE) then Exit;
hFileMap := CreateFileMapping(hFile, nil, PAGE_READONLY or SEC_IMAGE, 0, 0, nil);
if (hFileMap = 0) then
begin
CloseHandle(hFile);
Exit;
end;
pBaseAddress := MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0);
if (pBaseAddress = nil) then
begin
CloseHandle(hFileMap);
CloseHandle(hFile);
Exit;
end;
try
dwOffset := Cardinal(pBaseAddress);
pDosHeader := PImageDosHeader(pBaseAddress);
pNtHeaders := PImageNtHeaders(dwOffset + Cardinal(pDosHeader._lfanew));
pSectionHeader := pImageSectionHeader(Cardinal(pNtHeaders) + SizeOf(TImageNtHeaders));
for i := 0 to pNtHeaders.FileHeader.NumberOfSections-1 do
begin
SetString(SectName, PAnsiChar(@pSectionHeader.Name), SizeOf(pSectionHeader.Name));
Result:=Pos('UPX',SectName)>0;
If Result then break;
Inc(pSectionHeader);
end;
finally
UnmapViewOfFile(pBaseAddress);
CloseHandle(hFileMap);
CloseHandle(hFile);
end;
end;
关于delphi - 判断exe文件是否经过UPX压缩的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5119948/
我最近做了一些关于可执行压缩的研究。编译时test.c C 语言源代码并在 Linux 而非 windows 中使用 UPX 进行压缩。终端列表:UPX: test.so NotCompressibl
我在Delphi 2007上使用madExcept + UPX时遇到问题。 每当我打开压缩的应用程序时,Windows异常对话框就会出现,代码为0xc0000005。 有人对此有解决方案吗? 谢谢!
我正在尝试在 gnu/linux amd64 上使用静态库构建基于 qt 的软件但没有成功(qt 是成功静态构建的)。 现在我看到有些人正在使用 UPX。所以我尝试了动态构建,实际上,"file"命令
我正在尝试弄清楚如何检测二进制文件是否已使用 UPX 压缩。我正在使用一个简单的 CRC 来检测我的应用程序是否以任何方式更改,如果 CRC 由于打包程序而在大小上失败,我想将其检测为正常。 现在我开
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我正在使用 UPX 压缩器来压缩用 Delphi XE 编写的应用程序。文件大小从大约 32 Mb 到 8 Mb。 但我注意到奇怪的事情是,运行压缩文件时,RAM 的占用显着增加。从 25/30 Mb
UPX 能够打包 Dylibs 吗?它与 Mac Os X 应用程序可执行文件配合得很好,但我无法让它打包 dylib,它会抛出 UnknownExecutableFormatException 异常
如果 .NET 可执行文件是 PE 文件,为什么所有像 UPX 这样的加壳程序都会“破坏”它? 最佳答案 UPX 专为原生 应用程序而设计。这些是直接编译为机器代码的应用程序。 以 .NET Fram
我使用Eclipse编译c代码。 如何自动配置构建文件将与 upx 一起打包? 最佳答案 根据 Eclipse documentation ,您可以添加自定义构建后步骤: 未经测试,但您可以使用此示例
只是想知道。或者在技术上什至不可能给我写信,例如因为 iOS 可能会阻止跳转到解压缩代码所在的区域? 最佳答案 您不能使用它,iOS 不允许您创建可执行页面或从文件运行自定义二进制文件。 关于ios
如何将 UPX 与 pyinstaller 一起使用? 我正在关注文档。 我已经下载了 UPX。 我的文件看起来像: import csv import selenium import pandas
我用过UPX之前减少我的 Windows 可执行文件的大小,但我必须承认我对这可能产生的任何负面影响都很天真。所有这些打包/拆包的缺点是什么? 在某些情况下,是否有人会建议不要对可执行文件进行 UPX
我对 ELF 格式的工作原理或如何通过代码访问其 header 和数据知之甚少,但是我需要检查 ELF 二进制文件是否已使用 UPX for Linux 压缩(打包?)。 用 strings 检查二进
当我刚刚声明的时候 boost::thread t1, t2; 在我的程序中,然后用UPX压缩.exe文件,压缩成功。但是当我尝试启动压缩的 exe 时,Windows 告诉我它是“无效的 win32
我用 pyInstaller 编译的 python 程序,结果超过 400 MB。该程序的 GUI 基于 htmlPY ,它是“PySide 的 QtWebKit 库的包装器”。该程序体积庞大,部分原
我已经阅读了几乎所有与此主题相关的帖子,但我找不到解决方案!我的文件夹路径是:C:\Users\User\Desktop\Data Analytics Arg\py_inst 在我创建虚拟环境的文件夹
我尝试在 Linux 终端上使用 PyInstaller 获取可执行文件,但它抛出错误运行 upx -v。我尝试同时使用 .py 和 .spec 文件,但同样的错误 我在 Windows 上尝试过相同
我是一名优秀的程序员,十分优秀!