能力值:
( LV4,RANK:50 )
|
-
-
2 楼
思路不错,不过我认为call+pop一样可以避免出现指定特征码.
比如:
00000000 call 00000007
00000006 nop
00000007 inc eax
00000008 pop ecx
变化有n多种,总不可能发现有call后面有pop就报吧.
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
如果你要说只是检测的e8 00 00 xx xx这类的短call,那么我还完全可以结合sc特征搜索或是具体漏洞写个自已补丁出来的
e8 00 00 xx xx
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
call下个地址,然后pop出来,这个特征还是比较明显的,而且E8无法避免,这个的检测已经有人做过了,见中国科学 E辑: 信息科学 2008年 第38卷 第10期 : 《基于动态模拟的多态Shellcode建模与网络层检测》。
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
麻烦楼上把《基于动态模拟的多态Shellcode建模与网络层检测》发来学习下哩...
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
呵呵,传到附件了,共同学习。。话说我发现Flush GetPC方法是有问题的,因为“间隔字节数为4的倍数”好像也不能保证,因为栈顶ESP可能不是DWORD对齐的(当然这个好改),主要是Flush GetPC代码第一个字节也不能保证是DWORD对齐。这样泛洪下来可能覆盖的不对。哎,不知道咋整啊
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
另外,大家觉得shellcode检测与反检测这块从学术角度到技术角度都有什么可做的呢?老实说现在我觉得反检测很占优,而几乎没有什么好的检测手段。本来想写一篇检测shellcode的论文,写着写着写成了反检测了,各种反检测、多态、反仿真,秒杀各种anormaly detection,APE,Virtual Machine..
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
改进了一下,改成了按Byte flush了,搞不清当初为啥要按DWORD flush,范2了。22Bytes -> 19Bytes,这个没有对齐限制了吧
00012481 8BF4 mov esi,esp
00012483 33C0 xor eax,eax
00012485 C606 90 mov byte ptr ds:[esi],0x90
00012488 83C6 01 add esi,0x1
0001248B 40 inc eax
0001248C 83F8 01 cmp eax,0x1
0001248F 74 F2 je Xcalc.00012483
00012491 83C6 0F add esi,0xF
|
能力值:
( LV12,RANK:310 )
|
-
-
9 楼
好多漏洞shellcode运行时都不是在栈上的
|
能力值:
( LV5,RANK:60 )
|
-
-
10 楼
good job 让我想起了SMC
|
能力值:
( LV3,RANK:30 )
|
-
-
11 楼
一招秒杀你们: 禁止数据执行
|
能力值:
( LV11,RANK:190 )
|
-
-
12 楼
正解
|
能力值:
( LV11,RANK:190 )
|
-
-
13 楼
在栈上的shellcode可以做到尽可能的特殊,也就是说没有通用性,用任何检测方法都是无法检测的,可参考realplayer漏洞的shellcode,另外你的Flush GetPC已经是比较好检测的了,shellcode检测只能针对通用的shellcode
|
能力值:
( LV13,RANK:220 )
|
-
-
14 楼
lz可以把你写的shellcode发我检测检测
跪求各种神奇shellcode 跪求blackwhite大牛的shellcode
|
能力值:
( LV3,RANK:20 )
|
-
-
15 楼
我不知道你说的rp漏洞shellcode是不是就是这篇文章
http://bbs.pediy.com/showthread.php?t=113227
如果是的话,我看了一下,他也是用的Call方法进行的GetPC。
Shellcode检测确实是个很难的问题,即使我不提出这种方法。现在有些论文就是从GetPC入手的,我提出这个方法可以说是把问题变得更难了一些。只有用VM遍历执行才可能检测,但是这是不可能的
|
能力值:
( LV11,RANK:190 )
|
-
-
16 楼
是特殊的SEH GETPC不是CALL
|
|
|