スタックバイパスチェックソースコード解析技術のhousr_of_spirit

御霊のハウス

  聖霊の家はMaleficarumの技術です。この技術のコアは、目標位置のチャンクfastbin偽造し、指定されたチャンクに割り当てられたアドレスを達成するように、それを解放しています。

スピリット検出バイパスハウス

偽チャンク、解放fastbin構成も望ましい場合には、必要な試験の一部バイパスする必要がfastbin対応するリンクされたリストに入れることができます。

偽チャンク的ISMMAP

#if HAVE_MMAP   
    if (chunk_is_mmapped(p))       /* release mmapped memory. */
    {     /* see if the dynamic brk/mmap threshold needs adjusting */
        if (!mp_.no_dyn_threshold
            && p->size > mp_.mmap_threshold         
            && p->size <= DEFAULT_MMAP_THRESHOLD_MAX)       
        {         
            mp_.mmap_threshold = chunksize (p);
            mp_.trim_threshold = 2 * mp_.mmap_threshold;       
        }     
        munmap_chunk(p);     
    return;   
    }
 #endi

  あなたが見ることができる、MMAPのビットが0に設定する必要がある、またはこのチャンクアンマップ自由意志、コールmunmap_chunk()関数ではなく、fastbinを入力する目的。

偽チャンク的サイズ

if (*fb != NULL
    && __builtin_expect (fastbin_index(chunksize(*fb)) != idx, 0))               
    {         
        errstr = "invalid fastbin entry (free)";         
        goto errout;       
    }

  偽のチャンクサイズはfastbinに対応するインデックスのサイズを満足する必要があるが、また、整列する必要があります。

FACKチャンク的次のチャンク

if (__builtin_expect (chunk_at_offset (p, size)->size <= 2 * SIZE_SZ, 0)
    || __builtin_expect (chunksize (chunk_at_offset (p, size))>= av->system_mem, 0))       
    { 
#ifdef ATOMIC_FASTBINS         
    /* We might not have a lock at this point and concurrent modifications
       of system_mem might have let to a false positive.  Redo the test
       after getting the lock.  */
    if (have_lock
        || ({ assert (locked == 0);
              mutex_lock(&av->mutex);
              locked = 1;
              chunk_at_offset (p, size)->size <= 2 * SIZE_SZ                     
              || chunksize (chunk_at_offset (p, size)) >= av->system_mem;               
            })) 
#endif           
            {             
                errstr = "free(): invalid next size (fast)";             
                goto errout;           
            } 
#ifdef ATOMIC_FASTBINS         
            if (! have_lock)           
                {             
                    (void)mutex_unlock(&av->mutex);             
                    locked = 0;           
                } 
#endif       
    } 

 &EMSP、バイパスへの決意が、我々は次のチャンクのサイズを作成する必要がある場合は2以上* size_szですが、また、AV-> system_memを超えることはできません。

偽のチャンクに対応するリストのヘッドfastbin

if (__builtin_expect (*fb == p, 0))       
    {         
        errstr = "double free or corruption (fasttop)";         
        goto errout;       
    } 

 &EMSPは、fastbinリストを、対応する偽チャンクは、二重フリーケースを構成していない、すなわち、偽チャンクの先頭ではありません。

アドレスのFACKチャンク

  偽のチャンクアドレスはMALLOC_ALIGN_MASK、整列する必要があります

コンテンツソース

CTF-ウィキ-fastbin

おすすめ

転載: www.cnblogs.com/luoleqi/p/12357190.html