首先,我想稍微解释一下我的场景:我必须维护一个基于普通旧 WinAPI 的遗留软件产品(25 岁以上)。困难在于,我们没有代码,并且原作者公司早已不复存在(RIP @ 1997),但他们给我们留下了一个插件 API,并且一些声明,比如我们可以随意使用它来做我们想做的事情。所以我们做了一些 x86 逆向工程,写了很多插件代码,理论上一切都很好。该应用程序仍然完美地完成了它的工作。除了一个小问题,它甚至在 Windows 10 上也能完美地完成它的工作:
一旦用户尝试将其数据保存到用户文档文件夹,应用程序有时(并非总是!)无权在那里创建和写入/覆盖文件。我们已经追踪到一些旧的fopen
, fwrite
,fprintf
调用,这些调用在启用 Windows 10 Defender 勒索软件保护时被阻止。
例如
mov ecx, [esp+3Ch+access]
push ecx
lea edx, [esi+eax+400h]
push edx
call _fopen
或者
push offset SomeDataOffset
push eax
push edx
push offset FormatOffset
push ebx
call _fprintf
(还有很多。)
问题是我不想告诉用户以管理员模式运行应用程序以(也许?)绕过它,因为在某些情况下甚至不能。而且我什至不确定这是否有效。所以我最好的选择是一些替换代码,它会进行一些提升或一般要求系统/用户的许可,然后允许将数据写入该目录/文件。
所以问题是,我能做些什么呢?我知道如何替换该代码,但不知道替换为 what。
TL;博士
是否有任何神奇的WinAPI 或任何功能/代码允许我请求权限(可能为用户提供系统弹出窗口)写入特定文件路径?(但不需要管理员权限)