我有一个旧的 windows x86 应用程序,从 windows 8 开始就不能正常工作了。这个应用程序在它自己的文件夹中为应用程序设置等内容创建文件。不幸的是,Microsoft 不再允许这样做,我被迫以管理员权限执行我的应用程序,以便它可以在Program Files (x86)
.
现在我想知道是否可以通过更改目录而不是在当前目录中创建文件来修补它,而是在%localappdata%\MyApp\
.
我知道创建文件的代码的地址,并且我知道它使用freopen
带r+
或wb
模式的函数。
我曾尝试使用十六进制编辑器从Data\Display\OptionData.opf
to直接编辑路径,%localappdata%\MyApp\od.opf
但没有奏效。
我有哪些选择?我是汇编和逆向工程的新手,但我真的很想在不注入 DLL 和绕过函数的情况下解决这个问题。(我的绕路问题是它有时会被某些 AV 误报为病毒)
我现在正在考虑做一个codecave。但是就像我说的,我需要将目录更改为 localappdata 目录。我该怎么做呢?(并支持从 winxp 到最新的 win10)
我在代码(c++)中理解这将起作用:
char* appdata = getenv("APPDATA"); // wont work with winxp
甚至:
LPTSTR GetSpecialFolder(int CSIDL) {
TCHAR szPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL | CSIDL_FLAG_CREATE, NULL, 0, szPath)))
{
PathAppend(szPath, TEXT("\\MyApp\\"));
CreateDirectory(szPath, NULL);
return szPath;
}
else {
return TEXT("");
}
}