僵尸进程的一点玩法

僵尸进程的一点玩法

  • 前言
  • 被忽略的RundownProtection
    • ExAcquireRundownProtection
  • 应用
  • 总结

前言

这几天在看WRK的时候,偶然间发现的一个东西,逆向之后,发现了个僵尸进程的玩法。目前菜鸡一枚,有说的不准确的地方,请大家多多指正!

被忽略的RundownProtection

看过WRK的同学们应该对这个属性不陌生,每当要对某个进程进行操作的时候,总会有一个属性检查,贴上部分代码

ProcessToLock = FromProcess;if (FromProcess == PsGetCurrentProcess()) {ProcessToLock = ToProcess;}//// Make sure the process still has an address space.//if (ExAcquireRundownProtection (&ProcessToLock->RundownProtect) == FALSE) {return STATUS_PROCESS_IS_TERMINATING;}

这是RundownProtect的结构体,可以看到在正常情况下是为0的

  [Type: _EX_RUNDOWN_REF][+0x000] Count            : 0x0 [Type: unsigned __int64][+0x000] Ptr              : 0x0 [Type: void *]

看到WRK的注释之后,便欲探索一下ExAcquireRundownProtection

ExAcquireRundownProtection

.text:00000001400FA630 48 8B 01                                      mov     rax, [rcx]
.text:00000001400FA633 A8 01                                         test    al, 1           ; 判断RunRef.count的位0是否为1,等于则跳转
.text:00000001400FA635 75 13                                         jnz     short loc_1400FA64A ; 返回FALSE
.text:00000001400FA635
.text:00000001400FA637 44 8D 04 12                                   lea     r8d, [rdx+rdx]  ; 参数
.text:00000001400FA637
.text:00000001400FA63B
.text:00000001400FA63B                               loc_1400FA63B:                          ; CODE XREF: ExAcquireRundownProtectionEx+18↓j
.text:00000001400FA63B 49 8D 14 00                                   lea     rdx, [r8+rax]   ; 参数
.text:00000001400FA63F F0 48 0F B1 11                                lock cmpxchg [rcx], rdx ; Compare and Exchange
.text:00000001400FA644 74 07                                         jz      short loc_1400FA64D ; 返回TRUE
.text:00000001400FA644
.text:00000001400FA646 A8 01                                         test    al, 1           ; Logical Compare
.text:00000001400FA648 74 F1                                         jz      short loc_1400FA63B ; 循环
.text:00000001400FA648
.text:00000001400FA64A
.text:00000001400FA64A                               loc_1400FA64A:                          ; CODE XREF: ExAcquireRundownProtectionEx+5↑j
.text:00000001400FA64A 32 C0                                         xor     al, al          ; 返回FALSE
.text:00000001400FA64C C3                                            retn                    ; Return Near from Procedure
.text:00000001400FA64C
.text:00000001400FA64D                               ; ---------------------------------------------------------------------------
.text:00000001400FA64D
.text:00000001400FA64D                               loc_1400FA64D:                          ; CODE XREF: ExAcquireRundownProtectionEx+14↑j
.text:00000001400FA64D B0 01                                         mov     al, 1           ; 返回TRUE
.text:00000001400FA64F C3                                            retn                    ; Return Near from Procedure

经过一番逆向后,发现当RundownProtection的第一个成员的第零位(二进制)为0时,则函数返回TRUE,否则返回FALSE。

应用

如果我们修改RundownProtect为1,那么是否可以实现任何API访问此进程都失败呢,接下来做一下实验。

kd> dt _EPROCESS fffffa8002402710
nt!_EPROCESS+0x000 Pcb              : _KPROCESS+0x160 ProcessLock      : _EX_PUSH_LOCK+0x168 CreateTime       : _LARGE_INTEGER 0x01d7a08a`1c139093+0x170 ExitTime         : _LARGE_INTEGER 0x0+0x178 RundownProtect   : _EX_RUNDOWN_REF+0x180 UniqueProcessId  : 0x00000000`0000057c Void+0x188 ActiveProcessLinks : _LIST_ENTRY [ 0xfffffa80`02b6e5b8 - 0xfffffa80`027b1528 ]+0x198 ProcessQuotaUsage : [2] 0x2680+0x1a8 ProcessQuotaPeak : [2] 0x2c20+0x1b8 CommitCharge     : 0x1f8+0x1c0 QuotaBlock       : 0xfffffa80`010724c0 _EPROCESS_QUOTA_BLOCK+0x1c8 CpuQuotaBlock    : (null) +0x1d0 PeakVirtualSize  : 0x6002000+0x1d8 VirtualSize      : 0x50e7000+0x1e0 SessionProcessLinks : _LIST_ENTRY [ 0xfffffa80`02af5b40 - 0xfffffa80`027b1580 ]+0x1f0 DebugPort        : (null) +0x1f8 ExceptionPortData : 0xfffffa80`01fd5c90 Void+0x1f8 ExceptionPortValue : 0xfffffa80`01fd5c90+0x1f8 ExceptionPortState : 0y000+0x200 ObjectTable      : 0xfffff8a0`021b6d70 _HANDLE_TABLE+0x208 Token            : _EX_FAST_REF+0x210 WorkingSetPage   : 0x22102+0x218 AddressCreationLock : _EX_PUSH_LOCK+0x220 RotateInProgress : (null) +0x228 ForkInProgress   : (null) +0x230 HardwareTrigger  : 0+0x238 PhysicalVadRoot  : 0xfffffa80`00d95bc0 _MM_AVL_TABLE+0x240 CloneRoot        : (null) +0x248 NumberOfPrivatePages : 0x18c+0x250 NumberOfLockedPages : 0+0x258 Win32Process     : 0xfffff900`c2ffd010 Void+0x260 Job              : 0xfffffa80`00d27220 _EJOB+0x268 SectionObject    : 0xfffff8a0`02aeb6e0 Void+0x270 SectionBaseAddress : 0x00000000`00400000 Void+0x278 Cookie           : 0xf2b3718a+0x27c UmsScheduledThreads : 0+0x280 WorkingSetWatch  : (null) +0x288 Win32WindowStation : 0x00000000`0000005c Void+0x290 InheritedFromUniqueProcessId : 0x00000000`00000524 Void+0x298 LdtInformation   : (null) +0x2a0 Spare            : (null) +0x2a8 ConsoleHostProcess : 0+0x2b0 DeviceMap        : 0xfffff8a0`015bff10 Void+0x2b8 EtwDataSource    : (null) +0x2c0 FreeTebHint      : 0x00000000`7efa0000 Void+0x2c8 FreeUmsTebHint   : 0x00000001`00000000 Void+0x2d0 PageDirectoryPte : _HARDWARE_PTE+0x2d0 Filler           : 0+0x2d8 Session          : 0xfffff880`009c9000 Void+0x2e0 ImageFileName    : [15]  "Dbgview.exe"+0x2ef PriorityClass    : 0x2 ''+0x2f0 JobLinks         : _LIST_ENTRY [ 0xfffffa80`00d27248 - 0xfffffa80`00d27248 ]+0x300 LockedPagesList  : (null) +0x308 ThreadListHead   : _LIST_ENTRY [ 0xfffffa80`024b6f80 - 0xfffffa80`02515860 ]+0x318 SecurityPort     : (null) +0x320 Wow64Process     : 0x00000000`7efde000 Void+0x328 ActiveThreads    : 3+0x32c ImagePathHash    : 0xdecf2e47+0x330 DefaultHardErrorProcessing : 1+0x334 LastThreadExitStatus : 0n0+0x338 Peb              : 0x00000000`7efdf000 _PEB+0x340 PrefetchTrace    : _EX_FAST_REF+0x348 ReadOperationCount : _LARGE_INTEGER 0x0+0x350 WriteOperationCount : _LARGE_INTEGER 0x0+0x358 OtherOperationCount : _LARGE_INTEGER 0x0+0x360 ReadTransferCount : _LARGE_INTEGER 0x0+0x368 WriteTransferCount : _LARGE_INTEGER 0x0+0x370 OtherTransferCount : _LARGE_INTEGER 0x0+0x378 CommitChargeLimit : 0+0x380 CommitChargePeak : 0x226+0x388 AweInfo          : (null) +0x390 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO+0x398 Vm               : _MMSUPPORT+0x420 MmProcessLinks   : _LIST_ENTRY [ 0xfffffa80`02b6e850 - 0xfffffa80`027b17c0 ]+0x430 HighestUserAddress : 0x00000000`7fff0000 Void+0x438 ModifiedPageCount : 7+0x43c Flags2           : 0x2d014+0x43c JobNotReallyActive : 0y0+0x43c AccountingFolded : 0y0+0x43c NewProcessReported : 0y1+0x43c ExitProcessReported : 0y0+0x43c ReportCommitChanges : 0y1+0x43c LastReportMemory : 0y0+0x43c ReportPhysicalPageChanges : 0y0+0x43c HandleTableRundown : 0y0+0x43c NeedsHandleRundown : 0y0+0x43c RefTraceEnabled  : 0y0+0x43c NumaAware        : 0y0+0x43c ProtectedProcess : 0y0+0x43c DefaultPagePriority : 0y101+0x43c PrimaryTokenFrozen : 0y1+0x43c ProcessVerifierTarget : 0y0+0x43c StackRandomizationDisabled : 0y1+0x43c AffinityPermanent : 0y0+0x43c AffinityUpdateEnable : 0y0+0x43c PropagateNode    : 0y0+0x43c ExplicitAffinity : 0y0+0x440 Flags            : 0x144d0801+0x440 CreateReported   : 0y1+0x440 NoDebugInherit   : 0y0+0x440 ProcessExiting   : 0y0+0x440 ProcessDelete    : 0y0+0x440 Wow64SplitPages  : 0y0+0x440 VmDeleted        : 0y0+0x440 OutswapEnabled   : 0y0+0x440 Outswapped       : 0y0+0x440 ForkFailed       : 0y0+0x440 Wow64VaSpace4Gb  : 0y0+0x440 AddressSpaceInitialized : 0y10+0x440 SetTimerResolution : 0y0+0x440 BreakOnTermination : 0y0+0x440 DeprioritizeViews : 0y0+0x440 WriteWatch       : 0y0+0x440 ProcessInSession : 0y1+0x440 OverrideAddressSpace : 0y0+0x440 HasAddressSpace  : 0y1+0x440 LaunchPrefetched : 0y1+0x440 InjectInpageErrors : 0y0+0x440 VmTopDown        : 0y0+0x440 ImageNotifyDone  : 0y1+0x440 PdeUpdateNeeded  : 0y0+0x440 VdmAllowed       : 0y0+0x440 CrossSessionCreate : 0y0+0x440 ProcessInserted  : 0y1+0x440 DefaultIoPriority : 0y010+0x440 ProcessSelfDelete : 0y0+0x440 SetTimerResolutionLink : 0y0+0x444 ExitStatus       : 0n259+0x448 VadRoot          : _MM_AVL_TABLE+0x488 AlpcContext      : _ALPC_PROCESS_CONTEXT+0x4a8 TimerResolutionLink : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]+0x4b8 RequestedTimerResolution : 0+0x4bc ActiveThreadsHighWatermark : 6+0x4c0 SmallestTimerResolution : 0+0x4c8 TimerResolutionStackRecord : (null) 

我们看到0x178偏移处,找到了RundownProtect这个属性,接着修改为1(第0位为0的数皆可)。

kd> ed fffffa8002402710+178 1

接着我们进入虚拟机查看效果
在这里插入图片描述
程序正常运行,不会PG。
(测试环境Win7 X64 7600)

总结

这个函数还有很多用处,例如多线程同步等等,还有就是…做完才发现,已经有大佬发过这个思路了~
更早的一篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/43460.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PAT——1094 谷歌的招聘

2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是自然常数 e 中最早出现的 10 位连续…

PTA—7-5 谷歌的招聘

实际上这题是不难的,甚至说有点简单,连我这样的小菜比都可以顺利的AC。 废话不多说来看题目。 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以…

AI对话AI才是正解?KAUST研究团队提出基于角色扮演的大模型交互代理框架CAMEL

电影《盗梦空间》中有这样一句非常经典的台词: “世上最具有可塑性的寄生虫是什么?是人类的想法。人类大脑中一个简单的想法,就可以建立一座庞大的城市。有时一个想法也可以改变世界,并改写一切规则,这就是我为什么要…

chatGpt的快捷使用

首页的界面,非常好看,有我经常使用的入口 第一步:打开edge浏览器 第二步:右上角的扩展程序 第三步:点击 扩展 第四步: 第五步: 第六步: 第七步: 新打开Tab页&#xf…

windows下通过远程桌面访问linux图形界面

一、安装epel库 epel库安装之前无法使用yum install xrdp命令安装xrdp 命令:yum install epel-release之后会自动匹配对应版本的rpm包,并解决依赖关系进行安装。 二、安装xrdp xrdp作为linux的图形化界面 1.命令:yum install xrdp2.开启…

如何在Mac上快速显示桌面以便快速访问

macOS 环境中充满了可用于执行有用任务的快捷方式和手势。其中之一被简单地命名为“显示桌面”。当您打开一大堆应用程序窗口时,这个方便的功能可以为您节省宝贵的时间。一起来看看如何在Mac上快速显示桌面的方法吧。 1.使用触控板手势 触控板手势可能很难描述&…

大牛证券解析恒指大跌800点+全球股市大跌

今日两市差异化或许是像上一年白马抱团强化相同,而本年白马被丢掉,接力的科技与锂电,而这两个板块特别是(成果爆发工作高成长为特性),锂电有宁德时代,比亚迪、容百科技等,芯片&#…

股票大跌期权对冲

股票期权的出世标示着股票能够及时止损, 股票期权能够很好的与股票做对冲,可以把股票亏损的风险降低,减少投资者面对股票行情下跌产生的亏损。 股票期权的上市让股票多了一种对冲方式,投资者买入股票的时候同时买入一手认沽期权&…

美股历史行情数据之日频率数据

美股历史行情日频率数据 全交易所eod数据,阿里云盘分享全历史行情数据,最早数据记录于1970年。数据字段包含OHLC,除权,股息等全部字段阿里云盘订阅数据,数据每天更新。 全交易所eod数据,阿里云盘分享 交易…

洋姜和生姜的区别

1、科属不同 洋姜和生姜的本质区别就是科属不一类,洋姜是菊科的,而生姜属姜科的,虽然都是多年生草本植物,但是科属不同就代表着这两种食材之间是不一样的了。 洋姜生姜属科不同 2、味道不同 可以通过闻的方式和尝的方式来感受…

洋姜的腌制方法 怎样腌制洋姜好吃

怎样腌制洋姜好吃?提到洋姜很多人都很喜欢吃,洋姜吃法很多,但是最广为人知和受欢迎的就是腌洋姜了,味道佳营养丰富。下面本文来讲解一下洋姜的腌制方法: **洋姜的腌制方法**材料:洋姜、水、花椒、丁香、桂皮、食盐 做…

外汇天眼:外汇走势图的三种图表,看外汇图表这三种就够了

在外汇交易中,一个成功的交易缺少不了分析各种图表,经过多方的比对才可以进行外汇交易,所以会看外汇图表是很有必要的,下面给大家介绍一下三种不同的外汇图表。 折线图 一个简单的折线图所描绘的是连接相邻时段收盘价的形态。当把…

国内版 ChatPDF 来了

最近刚看到的https://www.smartread.cc/,跟chatpdf很像,目前国内还能用,而且比chatpdf好的是全中文页面,司马阅(SmartRead),基于新一代人工智能技术,可快速提取、总结PDF文档信息。 通过聊天互动形式&#…

ChatPDF,PDF操作一键完成!

大家注意:因为微信最近又改了推送机制,经常有小伙伴说错过了之前被删的文章,比如前阵子冒着风险写的爬虫,再比如一些限时福利,错过了就是错过了。 所以建议大家加个星标,就能第一时间收到推送。&#x1f44…

ChatPDF解放双手帮你解读PDF文档

一、先介绍一下吧 chatPDF是一个解读pdf文档的AI模型,然后封装出来的工具。如论文、合同、文书、书籍等,只要是PDF都能搞定,可支持120页【2023.3.9】的文件。据说之前支持200页,反正在变 最新爆火的ChatPDF,短短5天就…

计算机视觉安推商汤科技经典,商汤科技人脸实战应用亮相安博会 推动平安城市建设...

为期4天的2016中国国际社会公共安全产品博览会于10月28日落下帷幕,本届博览会以“推进平安中国、创建智慧城市、服务经济社会、保障民生安全”为主题,短短几天内,吸引了众多海内外观众前来观展。商汤科技本次展出多种人脸实战应用场景&#x…

商汤等提出:统一多目标跟踪框架

https://www.toutiao.com/a6654722067419628046/ 2019-02-06 11:20:22 正文 《Multi-Object Tracking with Multiple Cues and Switcher-Aware Classification》 arXiv:https://arxiv.org/abs/1901.06129 作者团队:商汤&北航&悉尼大学 注&am…

商汤科技总裁张文谈人工智能: 未来10年到20年会有巨大爆发 下一个井喷是AI+教育

https://m.thecover.cn/news_details.html?fromweb&id2087288 2019-06-11 19:31 封面新闻记者 秦怡 杨晨 “有一个预测,到2035年人工智能对整个经济的发展会提高40%。这取决于未来10到20年人工智能发展的理论是否会有所突破。” 人工智能的时代已经来临&…

商汤科技汤晓鸥:其实不存在AI行业,唯一存在的是“AI+“行业

https://www.cnblogs.com/DicksonJYL/p/9684671.html 9 月 17 日,2018 世界人工智能大会在上海召开,在上午主论坛大会上,商汤科技联合创始人汤晓鸥发表了题为《人工智能 大爱(AI)无疆》的演讲。他提到,并不…

“学院派”商汤科技:原创技术价值迸发

https://www.toutiao.com/a6651509438320476686/ 2019-01-28 19:33:43 距离李飞飞离职谷歌已经5个月了。 我们熟识的这位AI圈一姐沉寂了一段时间后,终于又听到关于她的消息:领导的斯坦福的团队提出了自动图像语义分割架构。 从这位在谷歌首席科学家和…