能力值:
( LV13,RANK:240 )
|
-
-
2 楼
我觉得HOOK问题和权限的问题不是很大。应该是其他方面的问题
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
分析过了,权限导致了windows里面有些行为有区别,apphelp这鬼东西,导致了getprocaddress得到的函数地址不是真实地址,使我hook目标不对了
桌面启动的exe行为完全正确
|
能力值:
( LV13,RANK:240 )
|
-
-
4 楼
这倒是有可能。换个方式获取地址呢。比如导出表。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
这样试试?
BOOL CreateProcessAsLogonUser(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandle,
DWORD dwCreateFlags,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
)
{
BOOL bRet = FALSE;
HANDLE hToken = NULL;
HANDLE hDuplicatedToken = NULL;
LPVOID lpEnvironment = NULL;
__try
{
DWORD dwSessionId = WTSGetActiveConsoleSessionId();
if (dwSessionId == 0xffffffff)
{
return FALSE;
}
bRet = WTSQueryUserToken(dwSessionId, &hToken);
if (!bRet)
{
__leave;
}
bRet = DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL, SecurityIdentification, TokenPrimary, &hDuplicatedToken);
if (!bRet)
{
__leave;
}
bRet = CreateEnvironmentBlock(&lpEnvironment, hDuplicatedToken, FALSE);
if (!bRet)
{
__leave;
}
bRet = CreateProcessAsUser(
hDuplicatedToken,
lpApplicationName,
lpCommandLine,
lpProcessAttributes,
lpThreadAttributes,
bInheritHandle,
dwCreateFlags | CREATE_UNICODE_ENVIRONMENT,
lpEnvironment,
lpCurrentDirectory,
lpStartupInfo,
lpProcessInformation
);
if (!bRet)
{
__leave;
}
bRet = TRUE;
}
__finally
{
if (lpEnvironment)
{
DestroyEnvironmentBlock(lpEnvironment);
lpEnvironment = NULL;
}
if (hDuplicatedToken)
{
CloseHandle(hDuplicatedToken);
hDuplicatedToken = NULL;
}
if (hToken)
{
CloseHandle(hToken);
hToken = NULL;
}
}
return bRet;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
楼上正解
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
比较猥琐的方式是。。注入到低权限进程。
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
自实己实现GetProcAddress就可以了
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
我更倾向5楼的这种标准方式的哈,安全可靠 :)
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
这个实现起来麻烦呀,各操作系统版本兼容,稳定性不能保证,还麻烦,我喜欢用标准API搞定
|
能力值:
( LV4,RANK:50 )
|
-
-
11 楼
我先试试你的代码,谢谢了
|
能力值:
( LV4,RANK:50 )
|
-
-
12 楼
刚试了你的代码,执行结果不正确呀
在第二个函数调用时:
WTSQueryUserToken
返回0,失败了
参数dwSessionId=1
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
乱说.CreateProcessAsUser才是最好的办法,WTSQueryUserToken 这个API需要TCB权限,默认只有服务才有.
这个API CreateProcessWithLogonW 也可以解决问题.权限是MS非常麻烦的事情.
|
能力值:
( LV4,RANK:50 )
|
-
-
14 楼
CreateProcessAsUser的话如何简单的以当前用户权限进行运行呢?
|
能力值:
( LV4,RANK:50 )
|
-
-
15 楼
顶顶顶顶
|
|
|