堆喷射

堆喷射主要用于绕过ASLR。下面演示堆喷射分析与效果。

1.代码

void heap_spray()
{
  char chunk[LEN] = { 0 };
  memset(chunk, 0x90, LEN - 10);
  strcat(chunk, "shellcode");
  for (int i = 0;i < 100;i++)
  {
    void *p = malloc(LEN);
    strcpy((char *)p, chunk);
    printf("spray %d\n", i);
  }
}

2.windbg分析

  •  !heap -stat:堆统计信息

_HEAP 002a0000
  Segments 00000001
  Reserved bytes 00100000
  Committed bytes 0009c000
  VirtAllocBlocks 00000000
  VirtAlloc bytes 00000000
_HEAP 00020000...

  •  !heap -stat -h 002a0000//查看segement 2a0000堆块大小统计情况

    group-by: TOTSIZE max-display: 20
    size #blocks total ( %) (percent of total busy bytes)
    1000 65 - 65000 (94.88)//大小为0x1000,共0x65个,占比94.88%,可见堆喷射效果较好
    20 6e - dc0 (0.81)
    c00 1 - c00 (0.70)
    bec 1 - bec (0.70...

  •   !heap -flt s 1000:列出所有大小为0x1000的堆块

    _HEAP @ 2a0000
    HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
    002c9e50 0201 0000 [00] 002c9e58 01000 - (busy)
    002cae58 0201 0201 [00] 002cae60 01000 - (free)
    002cbe60 0201 0201 [00] 002cbe68 01000 - (busy)
    002cce68 0201 0201 [00] 002cce70 01000 - (busy)
    002cde70 0201 0201 [00] 002cde78 01000 - (busy)
    002cee78 0201 0201 [00] 002cee80 01000 - (busy)

 

  • 0:000> dc 0032df90+0x1000-10//验证到顺序分配,并且相临。同时包含0x8的堆头。一个堆块大小为0x1000+0x8.
    0032ef80 90909090 68739090 636c6c65 0065646f ......shellcode.
    0032ef90 1a394b70 88000000 90909090 90909090 pK9.............
    0032efa0 90909090 90909090 90909090 90909090 ................

  •  !address:使用address查看内存属性

    BaseAddr EndAddr+1 RgnSize Type State Protect Usage
    -----------------------------------------------------------------------------------------------
    + 0 10000 10000 MEM_FREE PAGE_NOACCESS Free
    + 10000 20000 10000 MEM_MAPPED MEM_COMMIT PAGE_READWRITE Heap [ID: 1; Handle: 00010000; Type: Segment]
    + 20000 30000 10000 MEM_MAPPED MEM_COMMIT PAGE_READWRITE Heap

   Type:

MEM_IMAGE映射的文件属于可执行映像一部分的内存。
MEM_MAPPED映射的文件不属于可执行映像一部分的内存。这种内存包含哪些从页面文件映射的内存。
MEM_PRIVATE私有的(即不和其他进程共享)并且未用来映射任何文件的内存。

  

 

 

   State

MEM_COMMIT当前已提交给目标使用的所有内存。已经在物理内存或者页面文件中为这些内存分配了物理的存储空间。
MEM_RESERVE所有为目标以后的使用保留的内存。这种内存还没有分配物理上的存储空间。
MEM_FREE目标虚拟地址空间中所有可用内存。包括所有未提交并且未保留的内存。该Filter 值和RegionUsageFree一样。

   

 

 

           Protect:

Filter valueMemory regions displayed

PAGE_NOACCESS

Memory that cannot be accessed.

PAGE_READONLY

Memory that is readable, but not writable and not executable.

PAGE_READWRITE

Memory that is readable and writable, but not executable.

PAGE_WRITECOPY

Memory that has copy-on-write behavior.

PAGE_EXECUTE

Memory that is executable, but not readable and not writeable.

PAGE_EXECUTE_READ

Memory that is executable and readable, but not writable.

PAGE_EXECUTE_READWRITE

Memory that is executable, readable, and writable.

PAGE_EXECUTE_WRITECOPY

Memory that is executable and has copy-on-write behavior.

PAGE_GUARD

Memroy that acts as a guard page.

PAGE_NOCACHE

Memory that is not cached.

PAGE_WRITECOMBINE

Memory that has write-combine access enabled.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • !address 0032df90

    Usage: Heap
    Base Address: 002a0000
    End Address: 0033c000
    Region Size: 0009c000 ( 624.000 kB)
    State: 00001000 MEM_COMMIT//已经在物理内存中分配
    Protect: 00000004 PAGE_READWRITE//可读写,但不可执行
    Type: 00020000 MEM_PRIVATE
    Allocation Base: 002a0000
    Allocation Protect: 00000004 PAGE_READWRITE

  • 修改寄存器命令 
    r @eax=1  //将eax置为1

    修改内存命令
    ed 80505648 00001234

转载于:https://www.cnblogs.com/studyskill/p/7404450.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大华管理平台用户名_智能财务引领商业与管理变革——浙大EMBA首席财务官研习社走进大华股份...

杭商传媒记者 周 珂/文 徐青青/摄编辑 何影丹当前经济环境和市场需求瞬息万变&#xff0c;企业竞争日益激烈&#xff0c;盈利持续下降&#xff0c;产品、服务同质化严重&#xff0c;这不仅对业务部门提出了挑战&#xff0c;也对传统的财务管理产生了巨大的冲击。财务不能高…

【深度】韦东山:一文看尽 linux对中断处理的前世今生

作者&#xff1a;韦东山前言&#xff1a;本文&#xff0c;4200字&#xff0c;研究代码花了一天&#xff0c;写出来花了一天&#xff1b;录视频估计又得花半天&#xff1b;真怀念以前简单粗暴的生活啊&#xff1a;拿起话筒就录视频&#xff0c;先画好图&#xff1f;那是不需要的…

数据结构(6)二叉树

文章目录二叉树二叉树三种遍历二叉树知中及先或后序&#xff0c;求二叉树二叉树 class Node(object):""""""def __init__(self, item):self.elem itemself.lchild Noneself.rchild Noneclass Tree(object):"""二叉树"&qu…

鼠标中间无法打开新标签_还记得鼠标有几个键?Win10环境鼠标中键的妙用

大家经常使用鼠标&#xff0c;但有多少人还能意识到&#xff0c;其实鼠标是有三个键的&#xff1f;除了常用的左键右键&#xff0c;鼠标中间的滚轮也可以按下去&#xff0c;然而鼠标的这个中键&#xff0c;却日常坐冷板凳&#xff0c;几乎被人所遗忘。其实&#xff0c;鼠标中键…

vue技术栈

1 vue 说明:vue生命周期&#xff1a;技术点&#xff1a;1&#xff1a;常用的API:computed&#xff0c;methods&#xff0c;props&#xff0c;mounted&#xff0c;created&#xff0c;components 2vue-cli说明:vue绞手架&#xff0c;用于快速搭建项目&#xff0c;并管理项目技术…

python中pillow库怎么使用_Python 图像库Pillow使用

需求是将一张含有透明度的图片和一张正常图片进行常规合并&#xff0c;并在图片上添加文字&#xff0c;代码如下&#xff1a;from PIL import Imageimport cv2base_image Image.open(图片的绝对路径) # 有透明度的图片target Image.new(RGB, base_image.size, (0, 0, 0, 0)) …

找不到问题的核心,你永远解决不了问题。

上学那会儿&#xff0c;我是个数学常拿60分的人&#xff08;满分150分&#xff09;&#xff0c;我却喜欢做几何题。根据已知的条件&#xff0c;推导出所需的其他条件&#xff0c;所有需要的条件得出后&#xff0c;再根据正确的公式算出所求的值。这个不断求解的过程其实挺有意思…

.net MVC路由

首先&#xff0c;在MVC应用程序的入口函数Application_Start()中(在事件在GLOBAL文件中)&#xff0c;通过RouteConfig.RegisterRoutes(RouteTable.Routes)注册路由集合信息。RouteTable.Routes是一个公开的路由集对象&#xff0c;用于保存路由信息集合信息&#xff0c;类型问Ro…

浏览器访问pdf 的url怎么加密_怎么解决加密的pdf文件?

加密版的PDF文件我们每次打开时都需要输入密码才能进行阅读&#xff0c;而且一般不能直接进行复制和打印&#xff0c;这样会非常的麻烦。那如果我门想要解决这一问题呢就要将pdf文件的密码进行解除&#xff0c;可是如果是平民的我们不会解决怎么办呢&#xff1f;毕竟我们又不是…

范文100篇(2)

文章目录Should College Students Follow Fashion?思路翻译词汇句型Should College Students Follow Fashion? Today’s college students live in a word of fashion and some of them are keen on pursuing all the time.In fact, it is not uncommon to see some college…

Linux Storage入门学习

前言本文大量代码基于linux 0.11&#xff0c;因为早期linux的版本更加适合初学者入门。虽然代码比较早&#xff0c;但是不妨碍我们学习Linux Storage的精髓。一、hello world1.1 Demo#include<stdio.h> #include<unistd.h> #include<sys/types.h> #include&l…

地铁客流检测训练问题记录

一 报错&#xff1a; File "/home/jz/py-faster-rcnn/tools/../lib/datasets/pascal_voc.py", line 183, in _load_pascal_annotation tree ET.parse(filename) File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1182, in parse tree.parse(sou…

python价值观测试程序例子_PyBrains学习迷宫的例子。国家价值观与全球政策

现在我添加了另一个约束-通过在迷宫.py现在我在1000次跑步后得到了这种行为&#xff0c;每次跑步有200次互动&#xff1a;现在哪种方式有意义-机器人试图从另一边绕墙&#xff0c;避开状态(1&#xff0c;7)所以&#xff0c;我得到了奇怪的结果&#xff0c;因为特工过去总是从随…

记一次和摄像头的摩擦经历

因为时间的原因&#xff0c;这次点亮摄像头的时间特别短&#xff0c;昨天下午模组到公司&#xff0c;今天下午点亮。几个人一起调试&#xff0c;发现的问题也很多&#xff0c;今天下午发现有一个怀疑的问题&#xff0c;我马上驱车几十公里去模组厂调试&#xff0c;回来的时候&a…

算法题

简单题 整数反转 给出一个 32 位的有符号整数&#xff0c;你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储得下 32 位的有符号整数&#xff0c;则其数值范围…

ES6箭头函数(节选自《ECMAScript 6 入门》)

基本用法 ES6 允许使用“箭头”&#xff08;>&#xff09;定义函数。 var f v > v; 上面的箭头函数等同于&#xff1a; var f function(v) {return v; }; 如果箭头函数不需要参数或需要多个参数&#xff0c;就使用一个圆括号代表参数部分。 var f () > 5; // 等同于…

声明为指针,定义为数组,声明为数组,定义为指针

之前写发的那篇指针和数组的文章&#xff0c;有网友评论觉得不是很舒服&#xff0c;我自己看了&#xff0c;觉得很不满意。所以想再写写&#xff0c;尽量把这个东西讲清楚。#定义为数组&#xff0c;声明为指针1.c中#include "stdio.h" char array[] "abcd"…

python部落稿酬_Python之父考虑重构Python解释器

作者&#xff1a;佚名来源&#xff1a;Python部落7月22日&#xff0c;Python之父Guido在Medium上发表了他的第一篇博文《PEG Parser》。在该文中&#xff0c;Guido说他正在考虑使用PEG Parser代替现有的类LL(1) Parser(名为pgen)&#xff0c;来重构Python解释器。原因是现在的 …

f2fs存储结构初探

前言学习文件系统的第一步&#xff0c;先搞清楚文件系统在设备上的存储结构&#xff0c;先来简单了解一下。F2FS空间布局图和描述选自《F2FS技术拆解》https://mp.weixin.qq.com/s/k1ibtWF_TRQi8wbqUGjMrgF2FS空间布局F2FS空间布局整个存储空间被划分为6个区域&#xff1a;超级…

Android系统驱动【转】

本文转载自&#xff1a;http://www.hovercool.com/en/%E6%B7%BB%E5%8A%A0%E9%A9%B1%E5%8A%A8%E6%A8%A1%E5%9D%97#a_.E5.9B.9B.E3.80.81.E9.85.8D.E7.BD.AE.E7.B3.BB.E7.BB.9F.E7.9A.84autoconfig 一、编写驱动核心程序 这里说的驱动核心程序是指运行在内核空间的&#xff0c;完…