libdislocator原理及afl++的更新
libdislocator原理及afl++的更新
检测原理申请内存通过mmap实现,最低申请两个页(默认4096一个页)last page通过mprotest设置为PROT_OE,无法读写执行代码语言:javascript代码运行次数:0运行复制mprotect(ret + PG_COUT(rlen + 8) * PAGE_SIZE, PAGE_SIZE, PROT_OE)之后将内存指针
libdislocator原理及afl++的更新
检测原理
申请内存通过mmap实现,最低申请两个页(默认4096一个页)
last page通过mprotest设置为PROT_OE,无法读写执行
代码语言:javascript代码运行次数:0运行复制mprotect(ret + PG_COUT(rlen + 8) * PAGE_SIZE, PAGE_SIZE, PROT_OE)
之后将内存指针向右对齐,前面放len和alloc_canry
代码语言:javascript代码运行次数:0运行复制ret += PAGE_SIZE * PG_COUT(rlen + 8) - rlen - 8;
/* Store allocation metadata. */
ret += 8;
PTR_L(ret) = len;
PTR_C(ret) = alloc_canary;
free的时候是将整个内存设置为PROT_OE
那么当程序存在堆溢出的时候,就会访问到PROT_OE内存而出错
free掉的内存因为PROT_OE也不可访问,可以检测uaf
新增特性
1、增加了对mac和FreeBSD 的兼容
代码语言:javascript代码运行次数:0运行复制#ifdef __APPLE__
#include <mach/vm_statistics.h>
#endif
#ifdef __FreeBSD__
#include <sys/param.h>
#endif
2、 不是C11,重新定义max_align_t
代码语言:javascript代码运行次数:0运行复制#if __STDC_VERSIO__ < 201112L || \
(defined(__FreeBSD__) && __FreeBSD_version < 1200000)
// use this hack if not C11
typedef struct {
long long __ll;
long double __ld;
} max_align_t;
#endif
、增加AFL_RADOM_ALLOC_CAARY选项
随机canary
代码语言:javascript代码运行次数:0运行复制__attribute__((ctructor)) void __dislocator_init(void) {
char *tmp = getenv("AFL_LD_LIMIT_MB");
if (tmp) {
char * tok;
unsigned long long mmem = strtoull(tmp, &tok, 10);
if (*tok != '\0' || errno == ERAGE || mmem > SIZE_MAX / 1024 / 1024)
FATAL("Bad value for AFL_LD_LIMIT_MB");
max_mem = mmem * 1024 * 1024;
}
alloc_canary = ALLOC_CAARY;
tmp = getenv("AFL_RADOM_ALLOC_CAARY");
if (tmp) arc4random_buf(&alloc_canary, sizeof(alloc_canary));
alloc_verbose = !!getenv("AFL_LD_VERBOSE");
hard_fail = !!getenv("AFL_LD_HARD_FAIL");
no_calloc_over = !!getenv("AFL_LD_O_CALLOC_OVER");
align_allocati = !!getenv("AFL_ALIGED_ALLOC");
}
4、新增emalloc、ecalloc、erealloc
5、增加TAIL_ALLOC_CAARY(强制对齐的时候)
代码语言:javascript代码运行次数:0运行复制 size_t rlen;
if (align_allocati && (len & (ALLOC_ALIG_SIZE - 1)))
rlen = (len & ~(ALLOC_ALIG_SIZE - 1)) + ALLOC_ALIG_SIZE;
else
rlen = len;
......
......
......
if (rlen != len) {
size_t i;
for (i = len; i < rlen; ++i)
ret[i] = TAIL_ALLOC_CAARY;
}
需要开启AFL_ALIGED_ALLOC
align_allocati = !!getenv("AFL_ALIGED_ALLOC");
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2021-07-09,如有侵权请联系 cloudcommunity@tencent 删除size程序内存原理指针 #感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-24 12:26:42
上一篇:syzkaller的安装与运行
下一篇:afl源码阅读之afl
推荐阅读
留言与评论(共有 16 条评论) |
本站网友 房地产广告文案策划 | 22分钟前 发表 |
PAGE_SIZE | |
本站网友 backtrack | 25分钟前 发表 |
新增emalloc | |
本站网友 高血压的危害 | 7分钟前 发表 |
重新定义max_align_t代码语言:javascript代码运行次数:0运行复制#if __STDC_VERSIO__ < 201112L || \ (defined(__FreeBSD__) && __FreeBSD_version < 1200000) // use this hack if not C11 typedef struct { long long __ll; long double __ld; } max_align_t; #endif | |
本站网友 同传 | 30分钟前 发表 |
新增emalloc | |
本站网友 倭寇 | 17分钟前 发表 |
libdislocator原理及afl++的更新 检测原理申请内存通过mmap实现 | |
本站网友 长春男科 | 11分钟前 发表 |
分享自作者个人站点/博客 | |
本站网友 带头大哥777网易博客 | 14分钟前 发表 |
ecalloc | |
本站网友 更好 | 23分钟前 发表 |
原始发表:2021-07-09 | |
本站网友 污垢 | 28分钟前 发表 |
增加AFL_RADOM_ALLOC_CAARY选项随机canary代码语言:javascript代码运行次数:0运行复制__attribute__((ctructor)) void __dislocator_init(void) { char *tmp = getenv("AFL_LD_LIMIT_MB"); if (tmp) { char * tok; unsigned long long mmem = strtoull(tmp | |
本站网友 江东中心幼儿园 | 0秒前 发表 |
不是C11 | |
本站网友 龙华医院 | 15分钟前 发表 |
libdislocator原理及afl++的更新 检测原理申请内存通过mmap实现 | |
本站网友 英国空姐 | 5分钟前 发表 |
最低申请两个页(默认4096一个页)last page通过mprotest设置为PROT_OE | |
本站网友 脖子除皱 | 10分钟前 发表 |
最低申请两个页(默认4096一个页)last page通过mprotest设置为PROT_OE | |
本站网友 正定电视台 | 29分钟前 发表 |
libdislocator原理及afl++的更新 检测原理申请内存通过mmap实现 | |
本站网友 四川癫痫病 | 18分钟前 发表 |
libdislocator原理及afl++的更新 检测原理申请内存通过mmap实现 |