nag*_*lzs 2 windows delphi winapi
我有一个非常简单的程序,用于自动更新.它检查服务器上的可用版本(HTTPS),下载新更新并运行(可能更新的)程序.这是一个用Delphi 7编写的旧程序.看来这个程序需要在Windows 8和Windows 10下提升(以管理员身份运行).这是一个问题,因为一旦程序升级,它也会启动更新的程序升级,这非常糟糕.
程序代码非常简单,它只包含来自服务器的Indy组件(TIdHTTP),而ShellAPI则执行他下载的程序,一些IniFiles和一个进度条.
所以问题是:如何找出需要提升的API调用,以及如何替换它?是否有调试器可以告诉什么API调用(在什么代码地址)需要提升?
dum*_*uch 11
它不一定是需要提升的API调用.它可能只是程序名称.它可能被称为类似的东西somethingUPDATE.exe吗?如果是这样,那么在没有UAC清单指定高程设置的情况下,安装程序检测将启动,Windows将认为该程序是安装程序并自动显示UAC提示以进行提升.(这同样适用于包含文件名Install,Setup,Patch,等).
安装人员检测技术
安装程序是用于部署软件的应用程序,大多数都写入系统目录和注册表项.这些受保护的系统位置通常只能由管理员用户写入,这意味着标准用户没有足够的权限来安装程序.Windows Vista启发式检测安装程序并请求管理员凭据或管理员用户批准,以便以访问权限运行.Windows Vista还会启发式检测更新程序和卸载程序.请注意,UAC的设计目标是防止在用户不知情和同意的情况下执行安装,因为它们写入文件系统和注册表的受保护区域.
安装程序检测仅适用于:
32位可执行文件
没有requestedExecutionLevel的应用程序
作为标准用户运行的交互式进程启用了LUA
在创建32位进程之前,将检查以下属性以确定它是否为安装程序:
文件名包括"安装","设置","更新"等关键字.
以下版本控制资源字段中的关键字:供应商,公司名称,产品名称,文件描述,原始文件名,内部名称和导出名称.
嵌入在可执行文件中的并排清单中的关键字.
可执行文件中链接的特定StringTable条目中的关键字.
可执行文件中链接的RC数据中的关键属性.
可执行文件中的目标字节序列.
注意
关键字和字节序列源自各种安装程序技术中观察到的共同特征.
这个链接也可能很有趣: