rootkit 直接访问硬件之[一]

[系统安全]Rootkit基础 Rootkit运行在Ring0层的,Ring是x86平台进行访问控制的概念,这个用于访问控制的Ring被分为4个层次,其中权限最高的是Ring0层,称之为内核层,权限最低的为Ring3层,一般称为用户层。系统服务调度表(SSDT)的作用满足处于用户模式下的程序执行系统函数这一个需求,处于用户模式下的程序可以通过系统提供的机制借助SSDT查找用户请求与系统服务的对应关系。系统在检索到PDE时,先检查其U/S位,若该位为0(管理员权限)则只有拥有Ring0~2权限的程序才能访问,若该位为1则任何程序都能访问。 阅读详情
作 者: combojiang
时 间: 2008-03-27,15:14
链 接: http://bbs.pediy.com/showthread.php?t=62020

今天我们一起来学习下如何实现ring3程序直接访问硬件。这部分内容跟windows保护模式中的I/O保护部分有直接的关系。
rootkit直接访问硬件准备写三篇,今天是开篇。后续请大家继续跟贴。高手飘过,呵呵。
我们来看看Windows系统I/O访问保护的方法:
80386采用I/O特权级IPOL和I/O许可位图的方法来控制输入/输出,实现输入/输出保护.
I/O许可位图位于任务状态段TSS中。I/O特权级IPOL就是EFLAGS寄存器中IOPL位。

采用的保护规则是:
(1)若CPL<=IOPL,则直接转步骤(8);
(2)取得I/O位图开始偏移;
(3)计算I/O地址对应位所在字节在I/O许可位图内的偏移;
(4)计算位偏移以形成屏蔽码值,即计算I/O地址对应位在字节中的第几位;
(5)把字节偏移加上位图开始偏移,再加1,所得值与TSS界限比较,若越界,则产生出错码为0的通用保护故障;
(6)若不越界,则从位图中读对应字节及下一个字节;
(7)把读出的两个字节与屏蔽码进行与运算,若结果不为0表示检查未通过,则产生出错码为0的通用保护故障;
(8)进行I/O访问。
其中windows中IOPL值是为0,从第一条规则我们可以了解到为什么ring0下可以直接访问I/O了,因为ring0中CPL = 0 ,完全满足第一条。而ring3下CPL = 3 ,第一条不能满足。
我们知道每个任务使用各自的EFLAGS值和拥有自己的TSS,所以每个任务可以有不同的IOPL。所以想在ring3下访问I/O,最简单的方法当然是修改当前进程IOPL的值为3了。
根据前面了解到IPOL就是EFLAGS寄存器中IOPL位,所以我们尝试下修改eflags寄存器看看。如图:
名称:  图片1.jpg
查看次数: 418
文件大小:  14.3 kb
我们写段代码看看:
#include "stdio.h"
int main(int argc, char* argv[])
{
  _asm
  {
    pushfd
    pop eax   
    or eax,0x3000  //设置iopl = 3
    push eax
    popfd
    pushfd   //看看修改后的效果
    pop eax  //eflags寄存器的值保存到eax中
  }
  return 0;
}
通过上面代码,我们发现不能直接修改eflags中iopl的值。呵呵,继续想办法吧。
每个Windows进程都有一个相对应的执行体进程(EPROCESS),EPROCESS不仅包括了进程的许多属性,还包扩了许多指向其他数据结构的指针,其中包含了大量有用的信息. 
为了找出思路,我们还是先看看进程eprocess吧。
lkd> dt _eprocess
ntdll!_EPROCESS
   +0x000 Pcb              : _KPROCESS
   +0x06c ProcessLock      : _EX_PUSH_LOCK
   +0x070 CreateTime       : _LARGE_INTEGER
   +0x078 ExitTime         : _LARGE_INTEGER
   +0x080 RundownProtect   : _EX_RUNDOWN_REF
   +0x084 UniqueProcessId  : Ptr32 Void
   +0x088 ActiveProcessLinks : _LIST_ENTRY
   +0x090 QuotaUsage       : [3] Uint4B
   +0x09c QuotaPeak        : [3] Uint4B
   +0x0a8 CommitCharge     : Uint4B
   +0x0ac PeakVirtualSize  : Uint4B
   +0x0b0 VirtualSize      : Uint4B
   +0x0b4 SessionProcessLinks : _LIST_ENTRY
   +0x0bc DebugPort        : Ptr32 Void
   +0x0c0 ExceptionPort    : Ptr32 Void
   +0x0c4 ObjectTable      : Ptr32 _HANDLE_TABLE
   +0x0c8 Token            : _EX_FAST_REF
   +0x0cc WorkingSetLock   : _FAST_MUTEX
   +0x0ec WorkingSetPage   : Uint4B
   +0x0f0 AddressCreationLock : _FAST_MUTEX
   +0x110 HyperSpaceLock   : Uint4B
   +0x114 ForkInProgress   : Ptr32 _ETHREAD
   +0x118 HardwareTrigger  : Uint4B
   +0x11c VadRoot          : Ptr32 Void
   +0x120 VadHint          : Ptr32 Void
   +0x124 CloneRoot        : Ptr32 Void
   +0x128 NumberOfPrivatePages : Uint4B
   +0x12c NumberOfLockedPages : Uint4B
   +0x130 Win32Process     : Ptr32 Void
   +0x134 Job              : Ptr32 _EJOB
   +0x138 SectionObject    : Ptr32 Void
   +0x13c SectionBaseAddress : Ptr32 Void
   +0x140 QuotaBlock       : Ptr32 _EPROCESS_QUOTA_BLOCK
   +0x144 WorkingSetWatch  : Ptr32 _PAGEFAULT_HISTORY
   +0x148 Win32WindowStation : Ptr32 Void
   +0x14c InheritedFromUniqueProcessId : Ptr32 Void
   +0x150 LdtInformation   : Ptr32 Void
   +0x154 VadFreeHint      : Ptr32 Void
   +0x158 VdmObjects       : Ptr32 Void
   +0x15c DeviceMap        : Ptr32 Void
   +0x160 PhysicalVadList  : _LIST_ENTRY
   +0x168 PageDirectoryPte : _HARDWARE_PTE_X86
   +0x168 Filler           : Uint8B
   +0x170 Session          : Ptr32 Void
   +0x174 ImageFileName    : [16] UChar
   +0x184 JobLinks         : _LIST_ENTRY
   +0x18c LockedPagesList  : Ptr32 Void
   +0x190 ThreadListHead   : _LIST_ENTRY
   +0x198 SecurityPort     : Ptr32 Void
   +0x19c PaeTop           : Ptr32 Void
   +0x1a0 ActiveThreads    : Uint4B
   +0x1a4 GrantedAccess    : Uint4B
   +0x1a8 DefaultHardErrorProcessing : Uint4B
   +0x1ac LastThreadExitStatus : Int4B
   +0x1b0 Peb              : Ptr32 _PEB
   +0x1b4 PrefetchTrace    : _EX_FAST_REF
   +0x1b8 ReadOperationCount : _LARGE_INTEGER
   +0x1c0 WriteOperationCount : _LARGE_INTEGER
   +0x1c8 OtherOperationCount : _LARGE_INTEGER
   +0x1d0 ReadTransferCount : _LARGE_INTEGER
   +0x1d8 WriteTransferCount : _LARGE_INTEGER
   +0x1e0 OtherTransferCount : _LARGE_INTEGER
   +0x1e8 CommitChargeLimit : Uint4B
   +0x1ec CommitChargePeak : Uint4B
   +0x1f0 AweInfo          : Ptr32 Void
   +0x1f4 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO
   +0x1f8 Vm               : _MMSUPPORT
   +0x238 LastFaultCount   : Uint4B
   +0x23c ModifiedPageCount : Uint4B
   +0x240 NumberOfVads     : Uint4B
   +0x244 JobStatus        : Uint4B
   +0x248 Flags            : Uint4B
   +0x248 CreateReported   : Pos 0, 1 Bit
   +0x248 NoDebugInherit   : Pos 1, 1 Bit
   +0x248 ProcessExiting   : Pos 2, 1 Bit
   +0x248 ProcessDelete    : Pos 3, 1 Bit
   +0x248 Wow64SplitPages  : Pos 4, 1 Bit
   +0x248 VmDeleted        : Pos 5, 1 Bit
   +0x248 OutswapEnabled   : Pos 6, 1 Bit
   +0x248 Outswapped       : Pos 7, 1 Bit
   +0x248 ForkFailed       : Pos 8, 1 Bit
   +0x248 HasPhysicalVad   : Pos 9, 1 Bit
   +0x248 AddressSpaceInitialized : Pos 10, 2 Bits
   +0x248 SetTimerResolution : Pos 12, 1 Bit
   +0x248 BreakOnTermination : Pos 13, 1 Bit
   +0x248 SessionCreationUnderway : Pos 14, 1 Bit
   +0x248 WriteWatch       : Pos 15, 1 Bit
   +0x248 ProcessInSession : Pos 16, 1 Bit
   +0x248 OverrideAddressSpace : Pos 17, 1 Bit
   +0x248 HasAddressSpace  : Pos 18, 1 Bit
   +0x248 LaunchPrefetched : Pos 19, 1 Bit
   +0x248 InjectInpageErrors : Pos 20, 1 Bit
   +0x248 VmTopDown        : Pos 21, 1 Bit
   +0x248 Unused3          : Pos 22, 1 Bit
   +0x248 Unused4          : Pos 23, 1 Bit
   +0x248 VdmAllowed       : Pos 24, 1 Bit
   +0x248 Unused           : Pos 25, 5 Bits
   +0x248 Unused1          : Pos 30, 1 Bit
   +0x248 Unused2          : Pos 31, 1 Bit
   +0x24c ExitStatus       : Int4B
   +0x250 NextPageColor    : Uint2B
   +0x252 SubSystemMinorVersion : UChar
   +0x253 SubSystemMajorVersion : UChar
   +0x252 SubSystemVersion : Uint2B
   +0x254 PriorityClass    : UChar
   +0x255 WorkingSetAcquiredUnsafe : UChar
   +0x258 Cookie           : Uint4B
大致上看了下,没有iopl相关的项,我们继续看看里面的子项内容。
看看 +0x000 Pcb  : _KPROCESS这个结构体。
lkd> dt _kprocess
ntdll!_KPROCESS
   +0x000 Header           : _DISPATCHER_HEADER
   +0x010 ProfileListHead  : _LIST_ENTRY
   +0x018 DirectoryTableBase : [2] Uint4B
   +0x020 LdtDescriptor    : _KGDTENTRY
   +0x028 Int21Descriptor  : _KIDTENTRY
   +0x030 IopmOffset       : Uint2B
   +0x032 Iopl             : UChar
   +0x033 Unused           : UChar
   +0x034 ActiveProcessors : Uint4B
   +0x038 KernelTime       : Uint4B
   +0x03c UserTime         : Uint4B
   +0x040 ReadyListHead    : _LIST_ENTRY
   +0x048 SwapListEntry    : _SINGLE_LIST_ENTRY
   +0x04c VdmTrapcHandler  : Ptr32 Void
   +0x050 ThreadListHead   : _LIST_ENTRY
   +0x058 ProcessLock      : Uint4B
   +0x05c Affinity         : Uint4B
   +0x060 StackCount       : Uint2B
   +0x062 BasePriority     : Char
   +0x063 ThreadQuantum    : Char
   +0x064 AutoAlignment    : UChar
   +0x065 State            : UChar
   +0x066 ThreadSeed       : UChar
   +0x067 DisableBoost     : UChar
   +0x068 PowerState       : UChar
   +0x069 DisableQuantum   : UChar
   +0x06a IdealNode        : UChar
   +0x06b Flags            : _KEXECUTE_OPTIONS
   +0x06b ExecuteOptions   : UChar
在这里,我们找到了Iopl和IopmOffset 这两项。其中IopmOffset指该进程I/O许可位图在tss区域的偏移,也就是TSS中的IoMapBase值。而Iopl是一个布尔值,该值决定了进程中线程切换时,EFLAGS寄存器中IOPL位是设置为0还是为3。 如果进程Iopl值为TRUE,
则EFLAGS寄存器中IOPL值为3,如果进程Iopl值为FALSE,则EFLAGS寄存器中IOPL值为0.
到这里我们更进了一步。呵呵,离成功不远了。

接下来我们发现在ntdll.dll中有一个导出函数NtSetInformationProcess。
我们可以在ring3下直接调用NtSetInformationProcess函数的ProcessUserModeIOPL功能将进程中Iopl值为TRUE。但是有个前提,需要当前用户具有SeTcbPrivilege这个权限才行,并且当前用户必须是administrator.

SeTcbPrivilege表示当前用户的操作代表了系统的操作。并且这个权限只有system有,Administrator都没有这个权限。因此,我们需要首先得到这个权限,并且将这个权限使能。然后再调用NtSetInformationProcess的ProcessUserModeIOPL功能。思路很清晰了,这个我们在ring3下就能实现。贴代码:
#include <string.h>
#include <windows.h>
#include <tchar.h>
#include <ntsecapi.h>
#include <process.h>

BOOL EnablePrivilege(PTCHAR Privilege)
{

    BOOL rc = FALSE;
    HANDLE hToken;
    LUID luid;
    TOKEN_PRIVILEGES tokenPrivilege;
  DWORD dwProcID = GetCurrentProcessId();
  HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcID);
    //
    //  Open the current process' token.
    //
    rc = OpenProcessToken(
            GetCurrentProcess(),
            TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
            &hToken);

    if (rc)
    {
        rc = LookupPrivilegeValue(NULL, Privilege, &luid);
        if (rc)
        {
            tokenPrivilege.PrivilegeCount = 1;
            tokenPrivilege.Privileges[0].Luid = luid;
            tokenPrivilege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

            //
            //  Assign the given privilege.
            //
            rc = AdjustTokenPrivileges(
                    hToken, 
                    FALSE, 
                    &tokenPrivilege, 
                    sizeof(tokenPrivilege), 
                    NULL, 
                    NULL);
        }

    }
    if (hToken)
    {
        CloseHandle(hToken);
    }
   
  if(hProc)
    CloseHandle(hProc);

    return rc;

}

BOOL EnableProcPrivilege()
{
  BOOL rc = TRUE;
  LSA_HANDLE PolicyHandle;
  PSID Sid=0;
  DWORD cbSid=0;
  LPTSTR ReferencedDomainName=0;
  DWORD cbReferencedDomainName=0;
  SID_NAME_USE peUse;
  PUNICODE_STRING UserRights=0; //UnicodeString Pointer to PRIVILEGE
  ULONG Count=0; //
  HANDLE token=0;
  PTOKEN_PRIVILEGES TokenInformation=0;
  BOOL owned=0;
  OSVERSIONINFO osv;
  char username[30];
  DWORD cb = 30;
  LSA_OBJECT_ATTRIBUTES ObjectAttributes;
  ZeroMemory(&ObjectAttributes,sizeof(ObjectAttributes));
  ZeroMemory(&osv,sizeof(osv));
  osv.dwOSVersionInfoSize = sizeof(osv);
  //
  //判断当前系统是否为nt及以上
  //
  GetVersionEx(&osv);
  if(!(osv.dwPlatformId & VER_PLATFORM_WIN32_NT))
  {
      rc = FALSE;
  }
  //
  // 判断当前用户是否为administrator
  //
  GetUserName(username,&cb);
  if(stricmp(username,"administrator"))
  {
        rc = FALSE;
  }

  //
  //First open LSA policy database
  //the call returns a NTSTATUS. NTSTATUS 0 means everything is OK.
  //
  if (LsaOpenPolicy(
          0,
          &ObjectAttributes,
          GENERIC_EXECUTE|GENERIC_READ|GENERIC_WRITE,
          &PolicyHandle
          ))
  {
    rc = FALSE;
  }

  Sid=new char[500];
  ReferencedDomainName=new CHAR[100];
  cbSid=500;
  cbReferencedDomainName=100;

  //
  //Show Administrator SID
  //
  if (!LookupAccountName(
              0,
              "Administrator",
              Sid,
              &cbSid,
              ReferencedDomainName,
              &cbReferencedDomainName,
              &peUse
              ))
  {
      rc =  FALSE;
  }

  //
  //Add SeTchPrivilege to Administrator if not owned yet!
  //
  UserRights=new LSA_UNICODE_STRING;
  UserRights->Buffer=L"SeTcbPrivilege";
  UserRights->MaximumLength=28;
  UserRights->Length=28;

  if (LsaAddAccountRights(
              PolicyHandle,
              Sid,
              UserRights,
              1
              ))
  {
    rc = FALSE;
  }

  if(Sid)
    delete Sid;
  if(ReferencedDomainName)
    delete ReferencedDomainName;
  if (UserRights) 
    delete UserRights;
  if (TokenInformation)
    delete TokenInformation;
  if (token)
    CloseHandle(token);
  if (PolicyHandle) 
    LsaClose(PolicyHandle);

  rc = EnablePrivilege(SE_TCB_NAME);
  return rc;

}

BOOL EnableUserModeHardwareIO()
{

    typedef ULONG (__stdcall* pfn_ZwSetInformationProcess)(
                              HANDLE, 
                              ULONG, 
                              PVOID, 
                              ULONG);


    BOOL rc = FALSE;
    HMODULE hNtDll = NULL;
    ULONG IOPL = 1;
    INT ProcessUserModeIOPL = 16;
    pfn_ZwSetInformationProcess ZwSetInformationProcess;
    DWORD dwProcessID = GetCurrentProcessId();
    HANDLE   hProc= OpenProcess(   PROCESS_ALL_ACCESS,   TRUE,dwProcessID); 
    hNtDll = GetModuleHandle("ntdll.dll");
    if (hNtDll)
    {
        ZwSetInformationProcess = (pfn_ZwSetInformationProcess) 
                                  GetProcAddress(hNtDll, "ZwSetInformationProcess");


        if (ZwSetInformationProcess)
        {
            //
            //  Enable SeTcbPrivilege
            //
            rc = EnableProcPrivilege();
            if (rc)
            {
                //
                //  Grant user mode hardware IO access.
                //                 
                rc = ZwSetInformationProcess(
                        hProc, 
                        ProcessUserModeIOPL, 
                        &IOPL, 
                        sizeof(IOPL));           
                //
                //  An NTSTATUS is returned, so zero is success.
                //
                if (!rc)
                {
                    rc = TRUE;
                }
            }
        }
    }
    CloseHandle(hProc);
    return rc;
}



int __cdecl main(int argc, char* argv[])
{
    if (EnableUserModeHardwareIO())
    {
        //
        //  直接给键盘发一个指令,让机器重启
        //
        __asm mov dx, 0x64
        __asm mov al, 0xFE
        __asm out dx, al
    }
    return 0;
}

毕竟ring3下访问还是比较费劲,后面附上一个ring3通过驱动访问硬件的例子。由于驱动加载部分代码网上很多,就不再罗嗦了。
注:本机环境 winxp sp2.
机器人坐标系转换从局部坐标系转换到世界坐标系 【代码】机器人坐标系转换从局部坐标系转换到世界坐标系。 阅读详情

相关推荐

“双枪”木马病毒的进化史

自2017年首次被360安全发现以来,“双枪”木马病毒进行了多次变种,感染了逾10万台电脑设备,直至2020年5月,360安全联合百度捣毁了数十万“肉鸡”构成的僵尸网络,才让我们得知,僵尸网络的规模如此巨大,在我们看不见的地方,正与邪的对抗无时不在激烈的交锋。接下来,小编就盘点一下,“双枪“病毒的三代进化史。...

不忘初心,护天下安全! 1338

rootkit直接访问硬件之一 ----修改IOPL

今天我们一起来探索下如何实现ring3程序直接访问硬件。这部分内容跟windows保护模式中的I/O保护部分有直接的关系。 我们来看看Windows系统I/O访问保护的方法: 80386采用 I/O特权级IPOL 和 I/O许可位图 的方法来控制输入/输出,实现输入/输出保护. I/O许可位图位于 任务状态段TSS中。 I/O特权级IPOL就是EFLAGS寄存器

combojiang的专栏 9301

New Blue Pill硬件级Rootkit源码解析与实战

Rootkit是一类旨在隐藏自身或其它恶意程序存在、并维持对系统长期控制的技术集合。其名称源于“root”(超级用户权限)与“kit”(工具包),最早用于Unix/Linux系统,如今广泛适用于Windows、移动设备及嵌入式系统。Rootkit并不直接执行破坏行为,而是为恶意软件提供隐身平台,使其逃避常规安全检测机制。虚拟化技术是现代计算机系统中不可或缺的一部分,它允许在同一台物理设备上运行多个独立的操作系统环境。Intel VT-x作为x86平台上的硬件级虚拟化解决方案,为虚拟化提供了底层支持。

weixin_36369848的博客 1172

R3下,遍历所有进程的伪句柄表,关闭指定句柄

之所以产生这个想法,是在删除文件的时候有时会提示文件被占用了,然后让我们先关闭之后在来删除,但是我怎么知道哪个进程打开了我的文件? 于是就去网上了找了一份代码然后改了改,接着来说说是怎么实现功能的。首先我们需要遍历所有的进程,所有要找到遍历进程的代码。 //遍历进程 WCHAR * szServerName = NULL; HANDLE WtsServerHandle = WTSOp...

被遗弃的庸才博客 1899

【数据结构】平行四边形数量

平行四边形个数,哈希表,散列

cyy010617的博客 4010

避开这些坑!Kaggle数据集下载常见问题及解决方案(含Header Editor插件配置)

本文针对Kaggle数据集下载过程中的常见难题,提供了系统性的解决方案。重点解决了验证码无法显示、API安装失败、密钥文件配置错误及下载命令执行问题,并详细介绍了使用Header Editor插件配置请求头以绕过验证码障碍的实战方法,帮助用户高效获取数据。

weixin_29043895的博客 303

Cisco IOS Rootkit工具该怎么写

virustracker · 2015/11/03 12:24文章来源:https://www.exploit-db.com/docs/38466.pdf0x01 介绍本文主要以Cisco IOS为测试案例,讲解了如何对固件镜像进行修改。大多数人认为,做这样的一件事需要掌握一些尖端的知识,或者需要一些国家级别的资源,而事实上,这是一种普遍的误解。我认为,人们之所以这样想的一个主要原因是没有文章或教...

weixin_34246551的博客 1553

DOA估计算法从原理到仿真——CBF、Capon、MUSIC算法

从原理出发理解并实现经典的DOA估计算法

m0_55845774的博客 1万+

什么是 Rootkit?

常见的rootkit定义是一种恶意软件程序,它使网络犯罪分子能够在不被检测到的情况下访问和渗透计算机中的数据。它涵盖了旨在感染计算机,为攻击者提供远程控制并长时间保持隐藏的软件工具箱。因此,Rootkit是最难发现和删除的恶意软件之一,并且经常用于窃听用户和对计算机发起攻击。Rootkit恶意软件可以包含多个恶意工具,其中通常包括用于启动分布式拒绝服务(DDoS)攻击的机器人;可以禁用安全软件,窃取银行和信用卡详细信息以及窃取密码的软件;和击键记录器。Rootkit 通常为攻击者提供进入计算机的后门,使他们

南北极之间 6826

YOLOv5改进——添加SimAM注意力机制

这样可以使注意力机制看到整个backbone部分的特征图,将具有全局视野,类似于一个小的transformer结构。注意:很多改进教程都是将代码直接复制到common.py文件,如果改进机制多了容易造成混乱。在models文件夹下新建modules文件夹,在modules文件夹下新建一个py文件。这里为simam.py。在models文件夹下,复制yolov5s.yaml文件,粘贴并重命名为yolov5s-simam.yaml。运行yolo.py,出现刚刚加入的SimAM注意力机制,说明加入成功。

2302_80099075的博客 1654

Jacobi正交多项式在数值分析中的应用与实现

本文深入探讨了Jacobi正交多项式在数值分析中的核心应用与实现。作为最通用的正交多项式族,Jacobi多项式通过参数α和β的调节,可退化为切比雪夫、勒让德等经典多项式,为函数逼近、奇异积分和微分方程求解提供了统一框架。文章重点解析了其在加权高斯积分(高斯-雅可比积分)和谱方法求解微分方程中的关键作用,并提供了基于递归关系和SciPy的稳定高效实现方案,帮助读者掌握这一强大的数值计算工具。

weixin_29306011的博客 246

rootkit概述

这个是摘自微信公众号里面的文章; rootkit是一个复合词,由root和kit两个词组成。root是用来描述具有计算机最高权限的用户。另一方面,kit被Merrian-Webster定义为工具和实现的集合。因此,rootkit是一组能获得计算机系统root或者管理员权限对计算机进行访问的工具。但在恶意软件领域,我们将rootkit定义为一组在恶意软件中获得root访问权限、完全控...

小冰球 1万+

Rockchip平台之RK3566/3568 OS02N10

文章摘要 本文主要介绍了200W摄像头传感器OS02N10在RK3566平台上的兼容与适配过程。作者基于之前的400W摄像头兼容经验,针对200W摄像头进行了类似的适配工作。文章详细阐述了RK3566芯片的特性和OS02N10传感器的技术参数,包括分辨率、接口和功耗等。适配过程分为三个关键部分:DTS设备树文件配置(定义I2C地址、电源域和GPIO控制等)、驱动文件开发(寄存器初始化和操作)以及XML和JSON配置文件调整(图像参数设置)。作者特别强调了初始化数组中空寄存器终止条件的重要性,并分享了兼容过程

different_xzh的博客 2412

Rootkit介绍

本文主要介绍了Rootkit相关知识。

#7的博客 2305

从0到1搭建StarRocks3.4.1存算一体架构(VM 虚拟机版)

本文详细介绍了如何在VM虚拟机上从零搭建StarRocks 3.4.1存算一体架构。首先阐述了StarRocks作为高性能分布式SQL数据仓库的优势,重点讲解了其存算一体架构的设计原理。随后提供完整的安装指南,包括环境准备(3台CentOS 8虚拟机配置)、网络互通验证、Java环境配置、软件包解压安装等关键步骤。文章特别详细说明了FE和BE节点的配置文件修改(fe.conf和be.conf)以及必要的防火墙端口开放配置。通过图文并茂的方式,帮助开发者和运维人员快速掌握StarRocks集群部署方法,为后续

小 tom的博客 1334

代谢组数据分析(五):代谢组的功能富集分析

本文介绍了代谢组数据分析中的功能分析,包括代谢物富集分析、GSEA和ssGSEA方法。文章详细阐述了分析原理、应用背景、数据准备、统计方法以及结果解释,强调了在代谢通路和代谢物ID对应关系建立、差异代谢物筛选、富集程度计算等方面的关键步骤。通过这些方法,可以揭示差异代谢物在生物过程中的作用,为疾病研究和药物开发提供依据。

专注生信领域 5984

Rootkit

rootkit介绍 Rootkit可以隐藏文件,进程,甚至程序,就如同他们没有在计算机上安装。也可以用来隐藏用户的文件,甚至可以隐藏操作系统本身,故Rootkit最大的功能就是隐藏文件,可以躲过杀毒软件的查杀。 一般使用Rootkit进行提权,记录键盘,安装后门,以及其他的恶意任务。之所以能躲过检测,是因为Rootkit运行在操作系统中的内核,可以与用户进行的交互软件,通常其功能是在系统中较高层上实现的。 有些Rootkit深埋在操作系统的内部,可以通过拦截软件和操作系统之间的请求进行工作。 Rootkit

weixin_44666439的博客 1229

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Rootkit技术的主要原理

文章作者:hackisle信息来源:邪恶八进制信息安全团队(www.eviloctal.com)rootkit的主要分类:应用级->内核级->硬件级早期的rootkit主要为应用级rootkit,应用级rootkit主要通过替换login、ps、ls、netstat等系统工具,或修改.rhosts等系统配置文件等实现隐藏及后门;硬件级rootkit主要指bios rootkit,可以在系统加载前获

葉落堂 950

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

rootkit 直接访问硬件之

http://bbs.pediy.com/archive/index.php?t-62020.html

xDragonx的专栏 614

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

HyperPlatform高级应用:构建基于硬件虚拟化的Rootkit检测系统

HyperPlatform是一款基于Intel VT-x技术的轻量级虚拟机监控程序(hypervisor),专为Windows系统设计,能够监控包括内核API调用、内存访问在内的多种系统事件。本文将详细介绍如何利用HyperPlatform的硬件虚拟化能力,构建一个高效的Rootkit检测系统,帮助安全研究者和系统管理员实时监控并防御内核级恶意软件。 ## 为什么选择HyperPlatform进

gitblog_00258的博客 1106

rootkit

 在网络安全中经常会遇到rootkit,NSA安全和入侵检测术语字典( NSA Glossary of Terms Used in Security and Intrusion Detection)对rootkit的定义如下:A hacker security tool that captures passwords and message traffic to and from a comput

hanwei_1049的专栏 642

内核级Rootkit技术入门

内核级Rootkit技术入门(1) 2006-09-05 12:54 宇文 51CTO.com 我要评论(1) 字号:T | T 本文介绍了Windows下的内核级Rootkit的最基础性的东西,以及利用驱动程序将代码导入到内核的方法。虽然我们还没有涉及到真正的Rootkit,但这些内容是我们掌握Rootkit的必经之路,就像我们要建一座6层的楼房,却不能撇开基础和低层

心之所向,身之所往 1818

【转】内核级Rootkit技术入门(一)

Rootkit是一种奇特的程序,它具有隐身功能:无论静止时(作为文件存在),还是活动时,(作为进程存在),都不会被察觉。换句话说,这种程序可能一直存在于我们的计算机中,但我们却浑然不知,这一功能正是许多人梦寐以求的——不论是计算机黑客,还是计算机取证人员。黑客可以在入侵后置入Rootkit,秘密地窥探敏感信息,或等待时机,伺机而动;取证人员也可以利用Rootkit实时监控嫌疑人员的不法行为,它不仅

annhf的专栏 792

ROOTKIT与BOOTKIT技术全解析:从底层潜伏到内核统治的攻防博弈

BOOTKIT与ROOTKIT是黑客世界的“顶级武器”,但它们的攻击逻辑并非“无懈可击”。白帽黑客的核心使命,是通过理解攻击技术的底层原理,设计更强大的防御策略——从固件安全到内核防护,从静态检测到动态监控,每一步都需要“深度思考”与“实战验证”。

fearhacker的专栏 1902

Linux Rootkit 详解

Linux Rootkit 详细解析

hj06112的博客 1375

固件ROOTKIT技术深度研究:从底层渗透到持久化统治的全维度解析

本文探讨了固件ROOTKIT的攻防技术,指出其位于网络安全威胁链顶端,能绕过操作系统防护实现持久化攻击。文章首先分析了固件的分层架构(平台/管理引擎/外设固件)及其漏洞,阐述了固件ROOTKIT通过早期执行、隐蔽存储和硬件操控等优势实现的攻击路径。随后详细解析了从漏洞利用到持久化驻留的攻击链,并提出了分层检测(静态分析、动态监控)和主动防御(安全设计、供应链管理)的对抗策略。最后指出RISC-V架构和开源固件带来的新挑战,强调需要构建"全栈可信"的防御体系。

fearhacker的专栏 1302
上一篇: 发一个下载者代码
下一篇: inline hook和IDT hook结合
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值