找回密码
 加入
搜索
查看: 3926|回复: 6

[系统综合] AU3如何正确调用API函数 TerminateProcess?

  [复制链接]
发表于 2011-4-9 00:42:32 | 显示全部楼层 |阅读模式
本帖最后由 cutyourchicken 于 2011-4-9 00:54 编辑

如题,尝试了好几次都不行!请大虾指点下!~~~

送上问题代码
Func _TerminateProcess($process)

$processid = ProcessExists($process)

If $processid Then
        

    $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)

   $re=  DllCall('KERNEL32.DLL', 'bool','TerminateProcess','HANDLE',$ai_Handle,'INT',0)


Endif

EndFunc



_TerminateProcess("cmd.exe")
发表于 2011-4-9 02:46:57 | 显示全部楼层
首先你得给你的脚本本身搞高权限才行:EnablePrivilege(SE_DEBUG_NAME,true)
然后还得通知系统进程权限修改了:AdjustTokenPrivileges( hToken,FALSE,&tkp,sizeof tkp,NULL,NULL )

接着就可以用:OpenProcess(............)
                     TerminateProcess(...........)
发表于 2011-4-9 06:35:08 | 显示全部楼层

本帖最后由 netegg 于 2011-4-9 06:36 编辑

没开权限吧,用adjustprevilige(?)把权限改了
发表于 2011-4-9 07:26:40 | 显示全部楼层
本帖最后由 pusofalse 于 2011-4-9 07:28 编辑

网上的EnablePrivilege函数其实是个自定义函数,它会在其内部调用AdvApi32.AdjustTokenPrivileges函数开启SeDebugPrivilege特权,函数的功能本就是修改令牌权限,何来 通知系统进程权限已修改?~ 调整令牌权限不同于创建进程,在创建进程时,在最后的(貌似是倒数第二步)步骤中 父进程必须要调用Ntdll.CsrClientCallServer函数通知系统进程csrss.exe 子进程的创建。

当然,当目标进程的访问控制列表 不允许特定的访问时,直接OpenProcess会返回系统错误号5,首先调用AdjustTokenPrivileges开启SeDebugPrivilege特权就能绕过去,HOOK API除外。

楼主的代码出错是因为第10行的$ai_Handle,DllCall的返回值是数组,把$ai_Handle改成$ai_Handle[0]就可以了。另外,如果只是要结束进程,而不对进程进行其他的 例如读写内存的访问操作,把OpenProcess的第1个参数0x1f0fff改成1就行了,这样可以确保在  目标进程的访问控制列表允许进程被中止,但不允许进行其他操作的情况下,仍然可以成功调用OpenProcess取得进程句柄。
发表于 2011-4-9 07:43:45 | 显示全部楼层
提高权限吧
发表于 2011-4-9 13:09:51 | 显示全部楼层
p版果然是一代大家风范!
发表于 2011-4-10 08:23:51 | 显示全部楼层
学习了,大家
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-20 03:29 , Processed in 0.082480 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表