- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我已经阅读了大量有关此事的 SO 问题,但我没有找到以正确方式执行此操作的真正权威指南。
我的目标是枚举 [断开连接和事件] 用户控制台 session 并在每个 session 中启动一个进程。每个用户 session 进程在其 DACL 中至少需要这些权限:
TOKEN_QUERY
(对于 GetTokenInformation())TOKEN_QUERY_SOURCE
(对于 GetTokenInformation())PROCESS_QUERY_INFORMATION
(对于 OpenProcessToken())PROCESS_QUERY_INFORMATION | PROCESS_VM_READ
(对于 GetModuleFileNameEx())PROCESS_VM_OPERATION
(与 GetTokenInformation() 一起使用,稍后用 LookupAccountSid() 获取其他进程的用户名)但正如您所见here (在底部):“Windows Vista 引入了 protected 进程以增强对数字权限管理的支持。系统限制对 protected 进程和 protected 进程的线程的访问。”
所以我想也许只有使用 PROCESS_QUERY_LIMITED_INFORMATION
我才能获得有关其他进程的一些信息。我试过 QueryFullProcessImageName()对于从 Vista 开始的提升进程(参见 Giori's answer )但它 doesn't work anymore as it seems .
解决方案:CreateProcessAs_LOCAL_SYSTEM 使用 Windows 服务的重复 token 。
问题: 生成的进程应设置相应的登录用户环境变量,以便能够定位网络打印机和映射驱动器等。但是,如果我使用该服务的 token ,我将继承它的 PEB,我什至无法将映射的驱动器转换为它们的 UNC 路径。
所以我开始寻找“提升”流程并绕过 UAC 提示的方法,我尝试过:
SE_DEBUG_PRIVILEGE
(如果 token 没有这些权限则不起作用,可以先使用 LookUpPrivilegeValue() 进行验证)winlogon.exe.
的 token (不起作用)我要执行的步骤是:
NORMAL_PRIORITY_CLASS |创建新控制台 | CREATE_UNICODE_ENVIRONMENT
,启动信息的桌面:"WinSta0\Default"
我的问题:如何授予使用 CreateProccessAsUser() 创建的进程从在 LOCAL_SYSTEM
帐户下运行的 Windows 服务获得足够的特权/权利来获取有关其他进程(来自其他 session ;其他用户和不同完整性级别)的信息,而不会丢失用户的环境变量?
最佳答案
您对很多事情感到困惑。
Every user session process requires at least these rights in its DACL
进程 DACL 控制对该进程的访问,它不决定该进程具有什么访问权限。进程的安全 token 决定访问权限。
Windows Vista introduces protected processes to enhance support for Digital Rights Management.
很明显,您还没有深入到担心 protected 进程的程度。首先让它为普通流程工作!
The spawned processes should have the respective logged on user's environment variables set to be able to locate network printers and mapped drives among other things.
网络打印机和映射驱动器与环境变量无关。我认为您要做的是将新进程放入用户的登录 session 中,这就是控制网络驱动器映射等的原因。
how to grant the process created using CreateProccessAsUser() [...] enough privileges/rights to get information on other processes (from other sessions; of other users and different integrity levels) without losing the user's environment variables ?
不要。这将违反安全模型的完整性。
相反,从系统服务枚举和查询进程,并使用共享内存(在 MSDN 中查找“文件映射对象”)或其他合适的 IPC 机制,仅将任何必要的信息传递给用户 session 进程。
关于windows - 使用适当的 PEB 和 ACL 从服务中创建 ProcessAsUser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23065810/
PEB存储了windows中一个进程的信息。当进程结束时它是否仍然存储它? 最佳答案 它是一个进程内数据结构。不再有进程 == 不再有 PEB。 CreateProcess 返回的进程句柄引用了一个内
我想了解哪些事件可以对我的 precise 修饰符CPU(沙桥)。 英特尔软件开发人员手册(表 18-32。PEBS 性能英特尔微体系结构代号 Sandy Bridge 的事件)包含仅以下事件:INS
我想从“notepad.exe”进程获取PEB。有人知道怎么做吗? 我尝试了 GetModuleHandle API,但它没有返回有效的指针(每次都返回零),因为我必须是该模块的调用者进程。 因此,我
64 位 Windows 似乎使用 rcx = r8 = &PEB 调用 exe 的入口点和 rdx = r9 = &entrypoint好像入口点被声明 entrypoint(PEB *peb, v
PEBS 是 Intel CPU 为采样性能监视器提供的采样机制。 是否可以使用 PEBS 来测量过程的 IPC? PEBS 如何确定采样时间? 最佳答案 看我对Do Core i3/5/7 CPUs
这个标志的目的是什么(从操作系统端)?除 isDebuggerPresent 外,哪些函数使用此标志? 非常感谢 最佳答案 实际上是一样的,但读取 PEB 不需要通过内核模式。 更明确地说,IsDeb
规范:Windows 7 x64,Visual C++ 目标:我正在尝试获取 Remote PEB来自示例程序(例如 calc.exe)。我找到了 proc ID,并打开了一个具有所有良好权限的进程句
我现在正尝试使用 perf 通过 PEBS 测量 L3_Miss(LLC Miss)。 命令如下:perf record -d -e cpu/event=0xd1,umask=0x20/ppu -c
您好,我正在尝试使用 WinDbg 查看 memory.dmp 内核转储文件,以诊断崩溃。当我打开崩溃文件并获取符号时,我收到消息 BugCheck A, {2, ff, 4e, fffff801a4
我试图获得我自己的 PEB 并获得我自己的模块地址。我写了这样一个简单的代码: PLIST_ENTRY myModule = (PLIST_ENTRY)pebLdr->InMemoryOrderMod
我正在使用 ctypes 并尝试使用 NtQueryInformationProcess 函数获取 PEB 地址。 返回值为0,表示函数成功完成。但 PROCESS_BASIC_INFORMATION
我正在尝试通过使用硬件性能计数器来生成 D-TLB 未命中的地址跟踪。 Intel 处理器具有“基于事件的精确采样”(PEBS),可以在每次采样时转储硬件寄存器内容。我需要使用这个寄存器转储来创建导致
我正在尝试获取我的应用程序中已加载模块的列表(与安全/shellcode 有关,因此请避免调用 WINAPI)。我正在遍历 PEB->Ldr 模块双向链表,但每次打印 DLL 的名称时,它只是打印当前
我已经阅读了大量有关此事的 SO 问题,但我没有找到以正确方式执行此操作的真正权威指南。 我的目标是枚举 [断开连接和事件] 用户控制台 session 并在每个 session 中启动一个进程。每个
我有一个 64 位进程需要读取 Wow64 进程的 32 位 PEB。 我可以通过 NtQueryInformationProcess 获取它,但我意识到 Wow64 进程有两个 PEB(64 位和
我一直在尝试使用 linux perf 工具来对程序中的内存访问进行采样。具体来说,我使用 perf mem 命令检测程序中的负载: perf mem -t load rec myprogram pe
到现在为止,我有这段代码(我知道它很丑,但这不是现在的重点) 我不知道如何发布以下系统并构建正确的结构来访问另一个进程的 PEB。 我想做以下事情: HANDLE pHandle = OpenProc
我正在使用 perf userland 工具进行基于事件的采样:目标是试图找出某些影响性能的事件(如分支未命中和缓存未命中)在我正在处理的更大系统上发生的位置。 现在,像 perf record -a
我正在尝试使用汇编程序获取当前进程的 PEB 地址。 cpp文件: #include //#include extern "C" int* __ptr64 Get_Ldr_Addr(); int
是否可以直接从 Linux 用户空间进程而不是使用内核接口(interface)使用 Haswell CPU 功能 PEBS(基于精确事件的采样)? 我已成功使用 RDPMC 指令从用户空间访问性能计
我是一名优秀的程序员,十分优秀!