如何修改一个提权后的程序的内存

pig4210 2008-01-21 04:11:35
遇到某程序,经确定,它使用AdjustTokenPrivileges提权,使其它工具无法调试,读写其内存。
权限分别是
szT_ld db 'SeLoadDriverPrivilege',0
szT_Dg db 'SeDebugPrivilege',0
用OD加载,在AdjustTokenPrivileges下断,修改代码,运行。权限不再。使用其它工具可以读写它了。
现在我写一段程序,需要修改这个进程的内存。
尝试自己也用AdjustTokenPrivileges提权。提权如下:

Tokenhookin proc
LOCAL @stToken:TOKEN_PRIVILEGES
invoke GetCurrentProcess
test eax,eax
jz @F
mov hProcess,eax
invoke OpenProcessToken,hProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_ALL_ACCESS or TOKEN_WRITE or TOKEN_READ,addr hToken
test eax,eax
jz @F
push 1
pop @stToken.PrivilegeCount
push SE_PRIVILEGE_ENABLED
pop @stToken.Privileges.Attributes
invoke LookupPrivilegeValue,0,addr szT_ld,addr @stToken.Privileges.Luid
test eax,eax
jz @F
invoke AdjustTokenPrivileges,hToken,0,addr @stToken,0,0,addr nowTokenlen
test eax,eax
jz @F
invoke LookupPrivilegeValue,0,addr szT_Dg,addr @stToken.Privileges.Luid
test eax,eax
jz @F
invoke AdjustTokenPrivileges,hToken,0,addr @stToken,0,0,addr nowTokenlen
test eax,eax
jz @F
invoke hookin
ret
@@: invoke MessageBox,hWinMain,addr szErrorToken,0,MB_OK
ret

Tokenhookin endp

仍然,结果是OpenProcess还是无法打开那个进程。提权我不是很熟悉,是我做错了,还是应该使用其它办法????

又有一个想法,用invoke CreateProcess,addr fname,@lpcmdline,0,0,0,CREATE_SUSPENDED...运行这个程序,在开始时就挂起。挂起后准备修改AdjustTokenPrivileges代码。
然而,即使这个程序刚开始就挂起,但是OD还是无法实时调试,这是为什么???
ResumeThread后,这个进程出错。
CREATE_SUSPENDED不是在文件载入内存后在入口点挂起么?程序都还没有开始运行,那为什么OD就无法衬里调试了??它的权限在什么时候就提升了??

现在我只想在这个进程中插一段代码。那么,对这个进程的读写权限我如何获取???
请指教,谢谢!

。。。准备重金发帖,结果“您无权发这么多的可用分”。。。200分不让发,150分也不让发。。。。
...全文
120 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
大熊猫侯佩 2008-01-23
  • 打赏
  • 举报
回复
哦,原来如此!
pig4210 2008-01-23
  • 打赏
  • 举报
回复
是啊,用A打开有特权的B。
现在发现这个B用了驱动级的.sys与vxd。我晕。算了。用受限帐户运行它算了。这样就可以为所欲为了。。。
反正问题已经被折衷地解决了。嘿嘿。
谢谢mydo的指点。
大熊猫侯佩 2008-01-23
  • 打赏
  • 举报
回复
你是要提升你自己的程序A去打开具有特权的程序B,是么?

我的意思是用ollydbg打开A,使A提权。

pig4210 2008-01-21
  • 打赏
  • 举报
回复
谢谢!
使用了你给的代码段后,情况依然。还是不能OpenProcess。与我之前的代码是一样的。
如果用OD附加的话,这个进程OD根本就看不到。只能用OD运行,先在LoadLibrary下断,直到AdvAPI32.dll被载入后,修改AdjustTokenPrivileges retn 18直接返回不操作。这样这个进程才没有被提权。
还有,我跟踪了AdjustTokenPrivileges,它只修改了SeLoadDriverPrivilege与SeDebugPrivilege。而且,都是SE_PRIVILEGE_ENABLED修改,照理说,这么修改不是没有什么权限改变么?但是不废掉AdjustTokenPrivileges函数,其它工具根本就无法操作这个进程。
真不知道是什么情况,唉。

直接手术PE文件吧。竟然还有文件校验。。。
AdvAPI32.dll又是关键动态库,不能改它。。。
郁闷了我一天
最后用了一个折衷的办法。。兼容Windows95运行它。结果这家伙提不了权了。。。嘿嘿。

但有没有更好的办法哩?如果再没有更好的办法,结帖喽。...
大熊猫侯佩 2008-01-21
  • 打赏
  • 举报
回复
其中有 :

SE_DEBUG_NAME0 			db 	'SeDebugPrivilege',0
大熊猫侯佩 2008-01-21
  • 打赏
  • 举报
回复
试一下我写的提升DEBUE特权的例程:


_EnableDebugPrivilege proc _isEnable
local htoken:HANDLE
local uid:LUID
local tp:TOKEN_PRIVILEGES
local isSuccess

mov isSuccess,FALSE

invoke GetCurrentProcess
lea ebx,htoken
invoke OpenProcessToken,eax,TOKEN_ADJUST_PRIVILEGES,\
ebx
invoke LookupPrivilegeValue,NULL,addr SE_DEBUG_NAME0,\
addr uid

mov tp.PrivilegeCount,1
push uid.LowPart
pop tp.Privileges[0].Luid.LowPart
push uid.HighPart
pop tp.Privileges[0].Luid.HighPart
.if _isEnable
mov tp.Privileges[0].Attributes,\
SE_PRIVILEGE_ENABLED
.else
mov tp.Privileges[0].Attributes,0
.endif

invoke AdjustTokenPrivileges,htoken,FALSE,addr tp,\
sizeof tp,NULL,NULL

invoke GetLastError
.if eax == ERROR_SUCCESS
mov isSuccess,TRUE
.endif

invoke CloseHandle,htoken
mov eax,isSuccess
ret

_EnableDebugPrivilege endp



或者你用ollydbg 调试运行一下,ollydbg调试运行环境应该包括你所说的特权。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧