|
<
僵尸过程的一面弄法
序言
那几天正在看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会见此过程皆失利呢,接下去做一下尝试。
我们看到0x178偏偏移处,找到了RundownProtect那个属性,接着修正为1(第0位为0的数皆可)。
- kd> ed fffffa8002402710+178 1
复造代码 接着我们进进假造机检察结果
程序一般运转,没有会PG。
(测试情况Win7 X64 7600)
总结
那个函数另有许多用途,比方多线程同步等等,另有便是…做完才发明,曾经有年夜佬收过那个思绪了~
更早的一篇
免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作! |
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请发帖留言提供原创证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
|