利用global API hooks在Win7系统下隐藏进程

本文讲的是利用global API hooks在Win7系统下隐藏进程


0x00 前言

在之前的文章《Powershell tricks::Hide Process by kd.exe》介绍过通过kd.exe隐藏进程的技巧,最大的缺点是需要开启Local kernel debugging模式,等待重启才能生效 

这次介绍另外一个隐藏进程的方法——利用global API hooks 
优点是即时生效,不需要等待系统重启

0x01 简介

本文将要参照Sergey Podobry的文章,对该方法进行介绍,分析实际测试中需要注意的细节,并补全在64位下具体的参数设置

参考链接:

https://www.codeproject.com/articles/49319/easy-way-to-set-up-global-api-hooks?display=print

https://github.com/subTee/AppInitGlobalHooks-Mimikatz

0x02 原理

在用户层,通过global API hooks将测试dll注入到系统的所有进程,实现对指定进程的隐藏

hook方式

修改注册表键值AppInit_DLLs

位置:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWindows

参数说明:

LoadAppInit_DLLs:
(REG_DWORD) Value that globally enables or disables AppInit_DLLs.
    ·0x0 – AppInit_DLLs are disabled.
    ·0x1 – AppInit_DLLs are enabled.
AppInit_DLLs:
(REG_SZ) Space - or comma -separated list of DLLs to load. The complete path to the DLL should be specified using short file names. C:PROGRA~1TestTest.dll
RequireSignedAppInit_DLLs:
(REG_DWORD) Require code-signed DLLs.
   ·0x0 – Load any DLLs.
   ·0x1 – Load only code-signed DLLs.

代码实现

通过Mhook library实现API hooking

优点:

开源

支持x86和x64

使用简便

参考地址:

http://codefromthe70s.org/mhook22.aspx

0x03 实际测试

测试环境:Win7x86

1.设置注册表键值AppInit_DLLs

参照代码:

https://github.com/subTee/AppInitGlobalHooks-Mimikatz/blob/master/AppInit.reg

.reg文件如下:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWindows]
"AppInit_DLLs"="C:ToolsAppInitHookx64.dll,C:ToolsAppInitHook.dll"
"LoadAppInit_DLLs"=dword:00000001
"RequireSignedAppInit_DLLs"=dword:00000000

表示

AppInit_DLLs are enabled
Load any DLLs,do not need code-signed DLLs
DLL path:C:ToolsAppInitHookx64.dll,C:ToolsAppInitHook.dll

注:

设置的路径不能存在空格,否则失效

2.编译生成AppInitHook.dll并放在C:Tools下

参照工程:

https://github.com/subTee/AppInitGlobalHooks-Mimikatz

3.运行mimikatz.exe

任务管理器进程列表不存在mimikatz.exe

Process Explorer不存在mimikatz.exe

Tasklist.exe不存在mimikatz.exe

注:

此处没有完全隐藏进程,是将进程名设置为conhost.exe,这是因为mimikatz是控制台应用程序

如果换成putty.exe或calc.exe这种Win32项目,则不存在这个问题,能够完全隐藏进程

使用Process Explorer查看新建的进程,均加载了AppInitHook.dll,如图

注:

管理员权限运行Process Explorer,可查看高权限进程加载的dll

4.Win7x64测试

64位系统同32位系统的区别在注册表也有所体现

注:

详情可参考之前的文章《关于32位程序在64位系统下运行中需要注意的重定向问题》

64位程序对应注册表位置:

HKEY_LOCAL_MACHINESOFTWAREMicrosoft

32位程序对应注册表位置:

HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoft

所以,如果要hook 64位系统下的所有进程(32位和64位),需要修改两处注册表键值

64位的注册表键值位置:

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionWindows]

32位的注册表键值位置:

[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindows NTCurrentVersionWindows]

具体修改代码已上传至github,地址如下:

https://github.com/3gstudent/AppInitGlobalHooks-Mimikatz/blob/master/AppInit64.reg

修改后使用Process Explorer查看如图

成功注入32位和64位进程

0x04 补充

该方法只支持Win7 和 Windows Server 2008 R2,不支持更高版本如Win8、Server2012

如上图,在Win8系统,虽然成功加载AppInitHook.dll,但是无法隐藏进程

原因如下:

从Win8系统开始,微软对AppInit_DLLs做了限制:bios中默认开启的secure boot将会禁用AppInit_DLLs,使其失效

0x05 防御

只针对Win7 和 Windows Server 2008 R2及以下系统

1.查看注册表键值

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionWindows]
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindows NTCurrentVersionWindows]

AppInit_DLLs项有无可疑dll路径

2.通过Process Explorer查看进程有无加载可疑的dll

0x06 小结

本文对利用global API hooks在Win7系统下隐藏进程的方法做了介绍,结合利用思路,帮助大家对这种利用方式进行更好的防御。当然,利用global API hooks能做的还有更多

原文发布时间为:2017年5月7日

本文作者:3gstudent

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-11-08 18:13:53

利用global API hooks在Win7系统下隐藏进程的相关文章

查看Win7系统下各进程内存消耗情况的方法

win7系统自带有Windows任务管理器,不但能帮助用户快捷查看系统进程或软件所占的物理内存大小,还能帮助用户快速查看软件所占虚拟内存的大小,下面小编给大家带来的是惠普笔记本win7系统下怎样查看软件所耗虚拟内存.具体操作方法如下: 1.按"ctrl+alt+delete"组合键打开"windows 任务管理器"窗口,点击菜单栏的"查看-选择列"命令. 2.在打开的"选择进程页列"窗口中,选中"内存--提交大小&q

win7系统怎么隐藏administrator帐户

  有些使用Win7系统下载安装盘安装完系统后,就直接使用系统默认administrator帐户登录系统.直接使用administrator帐户登录系统,有一定的风险性,因为笔记本专用win7系统下载UAC功能直接被避开,而UAC功能可以有效地抵御了没有数字签名的一些恶意软件.今天,小编给各位系统用户带来在Win7系统下隐藏系统登录administrator 帐号的方法. 1.直接使用Win+R键调出运行对话框,然后在运行窗口中输入Regedit命令,打开注册表编辑器; 2.接着在笔记本win7

利用资源管理器在win7系统下打开ftp站点的方法

新建一个记事本,把下面内容复制进去, 然后,把记事本的后缀名.txt改为 .reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOTftp] @="URL:File Transfer Protocol" "EditFlags"=dword:00000002 "ShellFolder"="{63da6ec0-2e98-11cf-8d82-444553540000}"

VB.net 在64位win7系统下,调用API函数,在传址时为什么总会发生异常。。

问题描述 请帮教各位高人,VB.net在64位win7系统下,调用API函数,在传址时为什么总会发生异常..函数声明:DeclareSubdmc_move_line3Lib"DMC.dll"(ByRefaxisAsShort,ByValDist1AsInteger,ByValDist2AsInteger,ByValDist3AsInteger,ByValposi_modeAsShort)函数调用:DimAxisArray(3)AsShortDimLineEndArray(3)AsInt

win7系统下利用chkdsk命令快速恢复丢失的磁盘簇的技巧

  1.首先点击Ghost win7系统下的"开始--搜索",在搜索框中输入cmd.exe,然后回车并打开命令提示符窗口; 2.在打开的命令提示符窗口中,输入chkdsk E:/f,并按回车键; 3.这时候就会发现校验E盘上的簇及显示相关结果了. PS:若用户需要找回的簇,磁盘正被使用时,是不能执行上述操作的,在出现的提示信息后输入"Y"强制卸除该卷,并按回车键,此时将会自动开始校验文件和文件夹,校验完成后,便可查看相关结果了.

Win7系统下CAD不能正常安装的解决方法

雨林木风Win7系统下CAD不能正常安装的解决方法: CAD指利用计算机及其图形设备帮助设计人员进行设计工作. 在设计中通常要用计算机对不同方案进行大量的计算.分析和比较,以决定最优方案;各种设计信息,不论是数字的.文字的或图形的,都能存放在计算机的内存或外存里,并能快速地检索;设计人员通常用草图开始设计,将草图变为工作图的繁重工作可以交给计算机完成;由计算机自动产生的设计结果,可以快速作出图形,使设计人员及时对设计作出判断和修改;利用计算机可以进行与图形的编辑.放大.缩小.平移和旋转等有关的图

ylmf Win7系统下如何才能保留盘的隐藏方式

ylmf Win7系统下如何才能保留盘的隐藏方式:Windows Vista/7出于安全考虑,在新装Windows Vista/ylmf Win7系统过程中,如果利用光盘的分区工具给硬盘分区时,系统默认的将一部分(100-200M)的空间划分出来,不分配盘符(你在系统下看到的诸如C.D.E...之类的字母),用于存放系统引导文件(电脑启动时需要首先读取的一部分具有特殊功能的文件).一般来说,100MB的系统保留分区只有在以下两种情况都发生时才会产生:系统系统保留盘的隐藏流程分享给大家.系统保留盘

解决win7系统下安全弹出U盘出现电脑重启的问题方法

  U盘是一种能够方便用户便携式存储数据的设备,U盘在我们的生活中较为广泛被使用,不过有些用户在win7系统下使用U盘时进行备份或转移资料后,在不使用U盘时,使用安全弹出U盘时出现电脑自动重启的问题,对于该奇葩问题很多用户表示不解,故此小编针对遇到该问题的用户提供了解决方法,需要的用户赶快试试吧! 解决win7系统下安全弹出U盘出现电脑重启的问题方法 1.返回到桌面位置,找到"这台电脑"图标,直接鼠标右键点击这台电脑,在出现的菜单里面选中选择设备管理器选项. 2.这样就能够打开win8

win7系统下批量重命名文件的方法

  在win7下我们对于同类文件来说,如果想要以数字编号的形式命名文件的话,是无需借助第三方软件即可完成修改的,不过很多不知道如何操作,故此小编为大家带来了Win7如何同时重命名多个文件的方法,需要的用户赶快学习下吧! win7系统下批量重命名文件的方法 1.在保存文件的时候可以采用系统自动分配名字的方法,即保存的时候系统显示的什么名字,就让它默认为什么名字,这样的名字也不会重名,保存起来相当的快. 2.选中文件夹中所有需要重命名的文件,直接按组合键ctrl+a就行,然后按F2,接下来输入希望设