跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

ProcessHider利用分析


风尘剑心

推荐的帖子

0x00 前言

过程隐藏器能够在任务管理器和流程浏览器之类的监视工具中隐藏指定进程,本文将要介绍实现原理,分析代码细节。

0x01 简介

本文将要介绍以下内容:

过程隐藏器测试

过程隐藏器的实现原理

过程隐藏器的代码分析

过程隐藏器的检测

0x01 简介

过程隐藏器能够在任务管理器和流程浏览器之类的监视工具中隐藏指定进程

地址如下:

https://github.com/M00nRise/ProcessHider

支持以下参数:

pid

进程名

两种启动形式:

可执行程序的扩展名

powershell

过程隐藏器能够自动识别操作系统版本和进程位数,向32位和64位进程分别注入Payload.dll,通过钩子API NtQuerySystemInformation()实现进程隐藏

注入的代码使用动态链接库反射,地址如下:

https://github.com/stephenfewer/ReflectiveDLLInjection

钩的代码使用恩索克京,地址如下:

https://www。代码项目。com/Articles/21414/functional-x86-x64-迷你挂钩引擎

参数实例:

ProcessHider.exe-n ' putty。exe '-x ' proce XP。' exe '

能够在procexp.exe中隐藏进程名putty.exe,并且默认针对以下进程进行隐藏:

Taskmgr.exe

powershell.exe

procexp.exe

procexp64.exe

perfmon.exe

注:

目前不支持对tasklist.exe的进程隐藏

编译时需要注意的问题:

工程过程隐藏器需要编译成32位,不能编译成64位

这是因为工程过程隐藏器包含了针对64位进程的识别和利用代码

0x02 ProcessHider的实现原理

工程过程隐藏器实现流程如下:

1.判断当前操作系统版本

对应代码isSystem64BitWow()

如果是32位系统:

(1)监控进程列表

对应代码启动守护进程(全部注入);

(2)向符合条件的进程注入Payload.dll

对应代码react to process((DWORD)pCurrent-ProcessId,pCurrent-ImageName .缓冲);

注入的代码使用了反射线性投影中的代码

如果是64位系统:

(1)同级目录下释放文件x64Hider.exe,用作64位的守护进程

对应代码copyresourcintofile(x 64文件列表[I]),MAKEINTRESOURCE(x 64资源idint[I])

(2)解析命令行参数

对应代码createCommandLine(argc,argv,buffer,MAX _ command line _ LEN);

(3)启动64位的守护进程x64Hider.exe

对应代码CreateProcessFromLine(buffer,false);

传入启动的参数

示例如下:

c:\ test \ x 64 hider。exe ' '-n ' ' putty。exe ' '-x ' ' cmd。' exe '

(4)将Payload.dll写入x64Hider.exe的进程空间

这个过程不向硬盘写入文件,增加隐蔽性

对应代码写入列表进程(圆周率)

x64Hider.exe的功能如下:

监控64位的进程列表

向符合条件的64位进程注入64位的Payload.dll

(5)监控32位的进程列表

对应代码启动守护进程(全部注入);

(6)向符合条件的32位进程注入32位的Payload.dll

对应代码react to process((DWORD)pCurrent-ProcessId,pCurrent-ImageName .缓冲);

Payload.dll分别对应工程x64有效载荷和x86有效负载

这是基于反射线性投影实现的动态链接库反射

优点是注入成功后在进程空间不存在动态链接库的名称

流程如下:

1.创建互斥量

对应代码hMutex=CreateMutex(0,TRUE,NULL);

2.读取参数

如果参数为空,从固定文件c:\ Program Files \ Internet Explorer \ MDS int。' ISF '读取参数

3.Hook API NtQuerySystemInformation()

隐藏进程的代码:

NTSTATUS WINAPI HookedNtQuerySystemInformation(

_ _ in SYSTEM _ INFORMATION _ CLASS系统信息类,

__inout PVOID系统信息,

_ _在乌龙系统信息长度中,

__out_opt PULONG ReturnLength

)

{

NTSTATUS status=realtqueryfunc(系统信息类,

系统信息,

系统信息长度,

ReturnLength);

if(SystemProcessInformation==系统信息类NT _ SUCCESS(status))

{

//

//遍历进程列表

//

psy system _ PROCESS _ INFO pCurrent=NULL;

PSYSTEM _ PROCESS _ INFO pNext=(PSYSTEM _ PROCESS _ INFO)系统信息;

{

pCurrent=pNext

p next=(PSYSTEM _ PROCESS _ INFO)((PUCHAR)pCurrent pCurrent-NextEntryOffset);

if(是隐藏进程((int)pNext-ProcessId,pNext-ImageName .缓冲剂))

{

if (0==pNext-NextEntryOffset)

{

pCurrent-NextEntryOffset=0;

}

其他

{

pCurrent-NextEntryOffset=pNext-NextEntryOffset;

}

pNext=pCurrent

}

} while(pCurrent-NextEntryOffset!=0);

}

退货状态;

}

这段代码同分包之前开源的代码AppInitGlobalHooks-Mimikatz基本相同

我在之前的文章《利用globalAPIhooks在Win7系统下隐藏进程》中介绍过。

Tee的Github目前无法访问,但我当时叉了他的代码。地址如下:

https://github . com/3g student/AppInitGlobalHooks-Mimikatz/blob/master/AppInitHook/main . CPP # L39

因此,我们可以使用前面的代码实现相同的功能。

1.编译dll

使用代码:

https://github.com/3gstudent/AppInitGlobalHooks-Mimikatz/

编译dll

2.注入dll

在这里,您可以使用我之前编写的dll注入的代码。地址如下:

https://github . com/3g student/home-of-C-Language/blob/master/NtCreateThreadEx+ldrloaddll . CPP

但是需要去掉FreeDll()的函数。

综上所述,ProcessHider的实现原理如下:

HookAPI ntquerystemInformation()通过Dll注入实现进程隐藏。

0x03 ProcessHider的检测

检测中主要识别以下行为:

hremoteprocess

钩子API NtQuerySystemInformation()

0x04 小结

本文介绍了ProcessHider的实现原理和代码细节,分析了利用思路,并给出了检测建议。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...