| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2744 人关注过本帖
标题:关于OpenProcessToken的问题
只看楼主 加入收藏
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
结帖率:85.71%
收藏
 问题点数:0 回复次数:8 
关于OpenProcessToken的问题
下面是枚举进程信息时侯提升权限的代码     
            invoke    GetCurrentProcessId
            invoke    OpenProcess,PROCESS_ALL_ACCESS,FALSE,eax
            push    eax
            invoke    GetLastError
            pop    eax
            invoke    OpenProcessToken,eax,TOKEN_ADJUST_PRIVILEGES,hToken
            invoke    GetLastError
这里调用OpenProcessToken失败用GelLastError返回998错误内存访问失败。
看了一些资料关于这类错误都是第三个参数引起的,这里需要传递引用过去,但是对于汇编这个参数就是DWORD类型,不知道要怎么弄了。
谁知道哪里有问题说下谢谢了!
搜索更多相关主题的帖子: 内存 信息 资料 
2009-10-05 13:28
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
很简单啊,C++的引用是‘名’指针,故:

hToken是全局变量:
invoke    OpenProcessToken,eax,TOKEN_ADJUST_PRIVILEGES,offset hToken
hToken是局部变量:
invoke    OpenProcessToken,eax,TOKEN_ADJUST_PRIVILEGES,addr hToken

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-05 14:29
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
;szPrivilege        db    'SeDebugPrivilege',0
;local    @stLUIDA:LUID_AND_ATTRIBUTES
;local    @stLUID:LUID
            invoke    GetCurrentProcessId
            invoke    OpenProcess,PROCESS_ALL_ACCESS,FALSE,eax
            push    eax
            invoke    GetLastError
            pop    eax
            invoke    OpenProcessToken,eax,TOKEN_ADJUST_PRIVILEGES,offset hToken
            invoke    GetLastError
            invoke    LookupPrivilegeValue,NULL,addr szPrivilege,addr @stLUID
            mov    @stTokenP.PrivilegeCount,1
            invoke    lstrcpy,addr @stLUIDA.Luid,addr @stLUID
            push    SE_PRIVILEGE_ENABLED
            pop    @stLUIDA.Attributes
            invoke    lstrcpy,addr @stTokenP.Privileges,addr @stLUIDA
            invoke    AdjustTokenPrivileges,hToken,FALSE,addr @stTokenP,sizeof TOKEN_PRIVILEGES,NULL,NULL
            invoke    GetLastError
现在的问题是AdjustTokenPrivileges返回1用GetLastError返回1300:并非所有被引用的特权都指派给呼叫方
看别人说好像是本身权限不够不能提升权限这到底要怎么弄呢,就是想枚举所以进程在XP下的,谁能给个成功的代码么
2009-10-05 16:45
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
程序代码:
如下:

ProcessAdjust proc uses ebx  
 
  LOCAL tp: TOKEN_PRIVILEGES  
  LOCAL RetByte,hToKen: DWORD  
 
  invoke RtlZeroMemory,addr tp,sizeof TOKEN_PRIVILEGES  
 
  invoke GetCurrentProcess  
  mov ecx,eax
  
  invoke OpenProcessToken,ecx,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,\
      addr hToKen  

  mov tp.PrivilegeCount,1  
 
  invoke LookupPrivilegeValue,NULL,CTEXT("SeDebugPrivilege"),\
      addr tp.Privileges[0].Luid  

  push SE_PRIVILEGE_ENABLED  
  pop tp.Privileges[0].Attributes  
 
  invoke AdjustTokenPrivileges,hToKen,FALSE, addr tp,sizeof TOKEN_PRIVILEGES,NULL,addr RetByte 
 
  invoke CloseHandle,hToKen
  
  ret  
 
ProcessAdjust endp  


[ 本帖最后由 东海一鱼 于 2009-10-5 17:58 编辑 ]

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-05 17:50
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
呵成功了可能是赋值有点问题
我用的代码
            Invoke  GetCurrentProcess
            invoke    OpenProcessToken,eax,TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY,offset hToken
            invoke    GetLastError
            invoke    LookupPrivilegeValue,NULL,addr szPrivilege,addr @stLUID
            mov    @stTokenP.PrivilegeCount,1
            push    @stLUID.LowPart
            pop    @stTokenP.Privileges[0].Luid.LowPart
            push    @stLUID.HighPart
            pop     @stTokenP.Privileges[0].Luid.HighPart
            mov    @stTokenP.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED
            invoke    AdjustTokenPrivileges,hToken,FALSE,addr @stTokenP,sizeof TOKEN_PRIVILEGES,NULL,NULL
            invoke    GetLastError
            .if    eax!=ERROR_SUCCESS
                invoke   MessageBox,hWnd,addr szErrToken\
                    ,NULL,MB_OK or MB_ICONEXCLAMATION
            .endif
不过我有个小问题就是在枚举进程的时候我发现,我用Process32first和Process32Next遍历进程,但是显示出来跟资源管理器相比少了两个一个是taskmsg.exe一个是System idle p..
这是为什么呢?枚举的时候权限也要提升?
2009-10-05 18:04
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
哦又有个问题就是我一旦关闭了hToken提升权限的效果就没了,这个是为什么?
2009-10-05 18:19
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
不过我有个小问题就是在枚举进程的时候我发现,我用Process32first和Process32Next遍历进程,但是显示出来跟资源管理器相比少了两个一个是taskmsg.exe一个是System idle p..
这是为什么呢?枚举的时候权限也要提升?

没有发现 taskmsg.exe、System idle枚举缺少的情况,可能跟你的具体代码实现有关。枚举的时候不需要提升权限。


哦又有个问题就是我一旦关闭了hToken提升权限的效果就没了,这个是为什么?

你拿到的是个‘内核对象句柄’,释放了就不能再次访问,除非你再次获得它。就像打开一个文件一样,一旦你关闭了文件句柄,当然无法再访问了。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-05 21:31
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
你拿到的是个‘内核对象句柄’,释放了就不能再次访问,除非你再次获得它。就像打开一个文件一样,一旦你关闭了文件句柄,当然无法再访问了。
你的意思是创建快照的时候他会访问这个对象看权限?如果关闭了他无法访问就当你没有权限是这样理解么?
2009-10-05 23:05
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
又发现问题了不知道是我代码问题还是什么原因,快照csrss,lsass,360,avp等进程提升了SeDebugPrivilege权限仍然返回错误5访问失败。
提升权限应该是成功了,访问别的进程都可以,我用OD加载程序快照也同样失败,这应该不是权限问题了吧?OD是调试级权限啊。
看别人的好像用调试级就可以访问csrss了啊怎么我的失败了额- -!纠结了.........
大大们快来帮忙啊!
2009-10-06 10:15
快速回复:关于OpenProcessToken的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025782 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved