windows-System权限获取任意用户权限目录-举例GetTempPath
一丶简介
在System权限启动我们的程序之后.如果程序内部使用了GetTempPath()函数.或者使用了其它跟用户权限有关的函数.则获取的路径不是你想要的.
比如 你在System权限下使用了GetTempPath() 那么获取的temp路径有可能就是 "C:\Windows\Temp" 而我们想要获取的路径则是 "C:\user\xxx\Appdata\local\temp"
这里贴出代码. 原理就是 使用用户权限的Token 配合函数ExpandEnvironmentStringsForUserW 函数来获取.
二丶代码
#include <TlHelp32.h>
#include <userenv.h>
#pragma comment(lib, "Userenv.lib")
BOOL ExpandSysEnvsByName(const WCHAR* envsName, std::wstring& envsPath)
{
HANDLE hToken = nullptr;
HANDLE hProcessSnap = nullptr;
PROCESSENTRY32 pe32 = { 0 };
pe32.dwSize = sizeof(PROCESSENTRY32);
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hProcessSnap)
return FALSE;
if (!Process32First(hProcessSnap, &pe32))
return FALSE;
do
{
if (_wcsicmp(pe32.szExeFile, L"explorer.exe") == 0)
{
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe32.th32ProcessID);
if (NULL == hProcess)
return FALSE;
if (!OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken))
return FALSE;
CloseHandle(hProcessSnap);
break;
}
} while (Process32Next(hProcessSnap, &pe32));
WCHAR szEnvsPath[MAX_PATH] = { 0 };
if (!ExpandEnvironmentStringsForUserW(hToken, envsName, szEnvsPath, MAX_PATH))
return FALSE;
envsPath = szEnvsPath;
return TRUE;
}
int main()
{
wstring Ret;
ExpandSysEnvsByName(TEXT("%Appdata%"), Ret);
}
上方代码以appdata举例 %%这种环境变量大家可以多搜一下. 这里不整理了.
使用函数获取来的路径如下:
Ret = "C:\Users\ibinary\AppData\Roaming""
通过你自己的拼接路径就可以拼接处Temp路径了.
也可以直接输入%temp%来获取.
作者:IBinary
坚持两字,简单,轻便,但是真正的执行起来确实需要很长很长时间.当你把坚持两字当做你要走的路,那么你总会成功. 想学习,有问题请加群.群号:725864912(收费)群名称: 逆向学习小分队 群里有大量学习资源. 以及定期直播答疑.有一个良好的学习氛围. 涉及到外挂反外挂病毒 司法取证加解密 驱动过保护 VT 等技术,期待你的进入。
详情请点击链接查看置顶博客 https://www.cnblogs.com/iBinary/p/7572603.html
本文来自博客园,作者:iBinary,未经允许禁止转载 转载前可联系本人.对于爬虫人员来说如果发现保留起诉权力.https://www.cnblogs.com/iBinary/p/14704376.html
欢迎大家关注我的微信公众号.不定期的更新文章.更新技术. 关注公众号后请大家养成 不白嫖的习惯.欢迎大家赞赏. 也希望在看完公众号文章之后 不忘 点击 收藏 转发 以及点击在看功能. QQ群: