首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏漏斗社区

    CTF| 攻击取证之内存分析

    解题思路 斗哥根据近来做题心得以及前人经验,明白了内存取证三步曲:解析Windows/Linux/Mac OS的内存结构、分析进程等内存数据、根据题目提示寻找线索和思路,提取分析指定进程的特定内存数据。 斗哥认为暂时可以不用,只要我们在拿到内存数据文件时,能够判断该内存是哪种格式的。常见的内存文件格式有img、dmp、raw、vmem等。 知道了内存格式之后呢,就需要开始分析内存数据了,通过对应格式下的内存所在的对应的系统,我们可以使用对应的工具去进行分析。最后根据题目提示,进行针对性的去提取我们所需要的内存数据。 从内存中转储指定的密码hash memdump 转储出可寻址的内存数据 hivedump 打印内存中指定的注册表信息 dumpfiles 提取内存映射以及缓存文件 procdump 将进程转储到可执行文件中 2. 得到配置文件后,我们可以使用对应的配置文件进行相应的查询 a.

    8K41发布于 2019-04-29
  • 来自专栏有价值炮灰

    Linux内存管理与KSMA攻击

    KSMA的全称是Kernel Space Mirror Attack,即内核镜像攻击。本文主要记录对该攻击方法的原理分析以及Linux内核中相关内存管理部分。 vs物理内存 程序员一般都知道,CPU的寻址空间和寄存器的位数有关,在32位CPU中,寻址空间为0 ~ 2^32-1 (4GB),在64位中更是不得了,最大寻址空间为2^64-1= 16EB。 扯远了,总之目前就是内存管理单元,或者说内存管理模块,实现虚拟地址到物理地址的转换。 = bits[29:21] = 0x0 index3 = bits[20:12] = 0x175 offset = bits[11:0] = 0x770 对于KSMA攻击而言,我们需要关注的是D_Block 实现 要实现KSMA攻击,首先需要初始化一个新的映射关系。指定一片未被使用的虚拟地址空间为mirror_base,令其映射到内核加载虚拟地址对应的物理地址页kernel_phys。

    1.9K50编辑于 2023-02-12
  • 来自专栏张高兴的博客

    RowHammer 攻击内存的隐形威胁

    今天看了一篇 IT 之家关于AMD 处理器受 RowHammer 内存攻击影响的报道,心血来潮了解了一下 RowHammer 攻击的原理,把了解到的知识记录下来。 通过在一定模式下的高频率反复内存访问,攻击者可以在其原本无权访问的内存区域引发存储值的变化。这种攻击可以导致权限提升、数据泄漏和拒绝服务等安全问题。 在内存如“白菜”价的今天,不改变内存电路板面积大小的前提下,为了能存储更多的数据,只能将存储单元排列的越来越近,密度大幅度增加。虽然芯片的制程有所提升,但每个电容之间的隔离不是完全的。 这种比特翻转可以被恶意利用,攻击者可以通过精心设计的内存访问模式来控制比特翻转的位置和结果。 更何况程序在访问内存数据时,并不会直接使用内存中的真实地址,而是使用虚拟地址映射的方式进行访问。

    62220编辑于 2025-05-21
  • 来自专栏量子位

    新型内存攻击,专治制程提高的芯片

    研究人员发现了一种“半双工”的新型Rowhammer攻击技术(下文简称“R攻击”),它可以通过操纵计算机内存芯片DRAM (动态随机存取存储器)中的电荷来破坏或泄露数据。 ? 提到这种R攻击的问题,还得从技术上说起。 R攻击技术原理 其实,2014年的一篇论文就在当时主流的DDR3内存中就首次讨论了R攻击的可能性。 由于被攻击的单元格的值发生了变化,它导致相邻行的数据也发生变化。 这意味着在理论上,攻击者可以改变内存中任何比特的值,通过翻转足够多的比特,攻击者甚至可以操纵目标系统。 这是因为又有了一些新变化: 目前的R攻击技术主要采用了“半双工”技术。 此前通过重复访问一个内存地址,只可以访问相邻行的 DRAM 地址。 参考链接: [1]https://www.wired.com/story/rowhammer-half-double-attack-bit-flips/ [2]https://www.vusec.net

    57330发布于 2021-06-17
  • 来自专栏黑白天安全团队

    sql注入攻击sqlmap-2

    sql注入攻击sqlmap-2 cn0sec 2020-02-28 access注入 sqlmap.py -u "url" ==检测 sqlmap.py -u "url" --tables –level 参数且数值>=2的时候也会检查cookie的参数,当>=3的时候将检查User-agent和Referer。 (注意:2是两秒的意思,也就是说2秒访问一次) 第二种方法:sqlmap.py -u url --safe-freq 3 (注意:3是3次的意思) 可以组合使用 sqlmap.py -u url -- delay 2 --safe-freq 3 利用文件来注入 GET /? 主要两个脚本: space2hash.py ,对于MYSQL数据库 4.0, 5.0注入 space2morehash.py ,对于MYSQL数据库 >= 5.1.13 和 MySQL 5.1.41 注入

    1.1K20发布于 2020-03-10
  • 来自专栏C语言讲解

    动态内存管理(2

    ,存在内存泄漏的问题(而且出了GetMemory函数之后想释放也释放不了,因为p所在的那块内存空间已经被销毁了,已经还给操作系统了)。 void* p2) { return ((PeoInfo*)p1)->age - ((PeoInfo*)p2)->age; } void SortContact(Contact* pc) { assert sizeof 返回的这种结构大小不包括柔性数组的内存。 包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。 所以,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。 如果你在内存空间中多次开辟空间,内存碎片(内存内存之间留下的缝)就越多,这些内存碎片就可能不能被很好地利用,内存的利用率就越低;同时,访问速度也会变低。

    28910编辑于 2024-02-08
  • 来自专栏嵌入式学习

    结构体内存对齐——2

    colormap; char bgcolor; char ratio; }__attribute__ ((aligned(4))); 对齐到4字节 = 3+3+2+ 4+1+1+1+1 = 16 struct gif_hdr v1 = {1,2,3,4,5,6,7,8,9,10,11}; struct gif_hdr *dsptr;

    51320发布于 2020-09-07
  • 来自专栏我的计算机成长

    动态内存管理(2

    NULL; GetMemory(&str); strcpy(str, "hello world"); printf(str); free(str); str = NULL; } 4.2 题目2: 栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。 2. sizeof 返回的这种结构大小不包括柔性数组的内存。 包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。   像柔性数组就有两个好处: 第一个好处是:方便内存释放 如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户。 所以,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。

    26610编辑于 2024-01-23
  • 来自专栏QQ音乐技术团队的专栏

    全民K歌内存2——虚拟内存浅析

    《全民K歌内存篇1——线上监控与综合治理》 《全民K歌内存2——虚拟内存浅析》 《全民K歌内存篇3——native内存分析与监控》 一、简介 在多任务操作系统中,每个进程都拥有独立的虚拟地址空间,通过虚拟地址进行内存访问主要具备以下几点优势 进行了压缩,但仍会占用部分内存 二、地址空间大小 2.1 32位的地址空间 ARM 32位的CPU架构可使用的地址空间大小为2^32=4GB,并需要保留一部分给内核使用。 在Linux实现里,提供了三种虚拟地址空间分配的参数:VMSPLIT_3G、VMSPLIT_2G、 VMSPLIT_1G,代表用户态可访问的虚拟地址空间大小,如下: ? 512GB; 2:大量申请物理内存导致内存紧张时,后台应用及服务会逐一被LowMemoryKiller杀死,继续申请时,前台应用亦不能幸免,表现为闪退,但无法被Bugly捕获。 对merge1.txt和merge2.txt中相同的mapping内容进行增量计算,并分类汇总。

    4.7K30发布于 2021-03-04
  • 来自专栏linux驱动个人学习

    Linux-3.14.12内存管理笔记【构建内存管理框架(2)】

    前面构建内存管理框架,已经将内存管理node节点设置完毕,接下来将是管理区和页面管理的构建。 usable_startpfn, zone_movable_pfn[nid]) : usable_startpfn; } goto out2; usable_nodes--; if (usable_nodes && required_kernelcore > usable_nodes) goto restart; out2: min(usable_startpfn, zone_movable_pfn[nid]) : usable_startpfn; } goto out2; } 而在out2的标签内的代码则是用于将movable管理区的起始地址做MAX_ORDER_NR_PAGES对齐操作。 末尾out的标签则仅是恢复node_states[]而已。

    1.1K20发布于 2019-10-08
  • 内存攻击新威胁:Rowhammer攻击的全面防护指南与腾讯云主机安全解决方案

    一、 Rowhammer攻击:硬件漏洞的软件化利用 Rowhammer攻击的核心原理是通过高频次访问特定内存行(攻击行),引发相邻行(受害行)的电荷泄漏,导致比特翻转(bit flip)。 目标行刷新(TRR):内存控制器主动监控并刷新频繁访问行的相邻行,防止电荷积累导致的比特翻转。 增加刷新频率:将内存刷新率提升至标准值的3倍可有效阻止凤凰攻击,尽管会带来约8.4%的性能开销。 软件与系统层面 访问模式监控:操作系统和驱动程序可检测异常高频内存访问,当单位时间内访问同一行超过阈值时触发限速或进程隔离。 内存分配策略:将敏感数据与易受攻击区域隔离,降低攻击成功率。 攻击者若尝试通过内存破坏执行木马,文件查杀模块可立即隔离并清除威胁。 多维度入侵检测:实时监控异常登录、密码破解、恶意请求、高危命令、本地提权、反弹Shell等攻击行为,形成纵深防御体系。 立即访问腾讯云官网了解主机安全产品详情,为您的服务器筑造铜墙铁壁,从容应对包括Rowhammer在内的各类内存攻击威胁。

    22410编辑于 2026-03-12
  • 来自专栏Ms08067安全实验室

    攻击域控丝滑小连招(2

    2、mimikatz也可以直接在域控制器上运行,通过转储lsass.exe进程dump Hash。 2. 基于Meterpreter会话获取域账号和域Hash 这里没有域控制器的Meterpreter会话,首先获得一个Meterpreter会话,打开msf,依次输入如下命令。 图6-46域内所有用户的hash 总结 我们在上述列举了多种方法导出用户Hash,得到Hash后,可以进行PTH(Pass The Hash),又名哈希传递攻击,我们可以将抓取到的Hash通过psexec

    63620编辑于 2023-11-15
  • 来自专栏学而时习之

    go源码剖析2 内存分配2 初始化

    初始化时的虚拟地址空间: 因为内存分期和垃圾回收算法都依赖要连续的地址, 所以在初始化阶段, 预先保留了很大的一段虚拟地址空间. 保留地址空间, 并不会分配内存. 三个区域: 上述的虚拟的地址空间被划分成了三个区域: 页所属span指针数组 GC标记位图 用户内存分配区域 spans 512M bitmap 32GB arena 512GB 简单的说, 就是用三个数组组成了一个高性能内存管理结构 使用arena地址向操作系统申请内存, 其大小决定了可分配用户内存的上限.

    51240发布于 2020-05-19
  • 来自专栏ES排障

    ES 节点2G内存分析

    报错现象 ES在如存在2G内存的数据节点,在生产环境使用过程中会经常出现节点离线现象。导致集群频繁异常。 所以2G内存的集群,只能用于开发测试使用,切忌在生产环境中使用。 报错解析经过实际测试发现,对于2G内存的数据节点,系统实际可以使用的内存大约为1800MB左右。图片系统内存占用大约为 750MB左右。ES进程JVM设置大约为700MB左右。 这样,剩余系统内存大约为1800-1500=300MB。300MB在ES写入查询量较大时,会占用部分固定的堆外内存空间,导致系统剩余内存空间不足。 图片从而导致操作系统杀死内存占用较大的进程释放内存,也就是所说的OOM。 ES进程被杀死后就会出现节点离线现象。解决方案 升级ES节点内存配置,生产环境至少使用4G内存节点。

    1.6K30编辑于 2022-08-04
  • 来自专栏大数据进阶

    JVM(2): 逃逸分析和内存分配

    一个是Java虚拟机进行的逃逸分析,一个是根据逃逸分析原理去优化自己的代码 我们先来说下Java虚拟机的逃逸分析 1.堆对象变成栈对象,一个方法中的对象没有发生逃逸,那么该对象就很有可能被分配在栈上 2. 3.矢量替代,逃逸分析如果发现对象的内存存储结构不需要连续进行的话,就可以将对象的部分甚至全部都保存在CPU寄存器内 下面我们来说下对象的内存分配 为对象分配空间的任务等同于把一块确定大小的内存从Java 指针碰撞和空闲列表 指针碰撞对于垃圾收集算法为Serial,ParNew等带compact过程的收集器,该分配算法是假设堆中内存是决对规整的,空闲的在一边,非空闲的在另一边,中间有个指针作为指示器,再要进行内存分配时 空闲列表只是对于垃圾收集算法为CMS这种基于Mark-sweep算法的收集器,该分配算法是假设堆中的内存是纵横交错的,空闲的和非空闲的交错在一起,对于这种虚拟机就必须维护一个列表,记录那些块是可用的,在要进行内存分配时

    74710发布于 2019-09-17
  • 来自专栏多线程

    2.什么是JAVA内存模型?

    2)不同的操作系统windows、linux的指令集不一样。 老王: 所以JAVA语言为了应对上述的问题:不同的系统、不同的计算机厂商的底层实现不同。 那就是每个线程都有自己的工作内存,线程操作共享变量的时候需要从主内存读取到自己的工作内存,然后在传递给工作线程使用,共享变量修改后先刷新到工作内存,然后再刷新回主内存;这个JAVA内存模型是基于我们上一讲 unlock(解锁):把主内存的变量从线程独享的lock状态中解除出来 read(读取):把主内存的一个共享变量传输工作内存中 load(载入):把从主内存传输到工作内存的共享变量, (2)B线程的变量副本失效之后,运行时候用到,需要到主内存重新读取(执行read、load操作放入工作内存);发现该主内存的变量被锁定了,读取失败;此时相当于线程A拥有该变量的独享操作 (3)线程A执行 2.什么是JAVA内存模型? 3.线程安全之可见性、有序性、原子性是什么? 4.什么是MESI缓存一致性协议?怎么解决并发的可见性问题?

    46830编辑于 2023-10-16
  • 数据在内存中的存储(2

    ,解引用后就是多了一个字节的地址的数据,但这是小端存储,就要还原该有的数据,就是02000000 浮点数在内存中的存储 常见的浮点数:3.14159、1E10等,浮点数家族包括:float,double 但是,我 们知道,科学计数法中的E是可以出现负数的,所以IEEE754规定,存⼊内存时E的真实值必须再加上 ⼀个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。 m就是01100000000000000000000,补够32个比特位 //所以01000000101100000000000000000000(十六进制:40B00000)就是我们存到内存中的值 return 0; } 说明这里是小端存储,但是不是所有浮点数都可以准确的存储在内存中,必定会有差值 浮点数取的过程 现在我们回到当开始的代码 #define _CRT_SECURE_NO_WARNINGS 站在pFloat的角度,它认为它指向的是一个float类型的数据0 00000000 00000000001001,此时它的视角就是s=0,e=00000000,m=00000000001001 当内存中的

    9810编辑于 2026-01-23
  • 来自专栏c语言,c++

    字符串和内存函数(2

    字符串函数 strtok函数 strtok函数的规则: 1.参数1是指定一个字符串,它包含0个或多个由参数2字符串中一个或多个分隔符分割的标记 2.参数2是个字符串 内存函数 memcpy函数 memcpy函数跟strcpy函数有相似之处,不过memcpy可以拷贝任何类型。 前面的拷贝是不重叠内存的拷贝,可以用memcpy。如果是重叠内存的拷贝,可以用memmove函数。 memset函数 memset函数是用来设置内存的,以字节为单位进行设置。如上图,参数1是起始地址,参数2是要设置的内容,参数3是设置的字节个数。 如上图,我们比较大小的时候,不能单纯比较数字,而要看他们在内存中是怎样的,这样才能得出正确结果。

    26310编辑于 2024-01-19
  • 来自专栏用户4480853的专栏

    volatile与内存屏障 发布于 2

    写屏障] Write2[写操作 2] ReadBarrier1[读屏障] VolatileRead[volatile读操作] ReadBarrier2[读屏障] WriteBarrier2 --> Write2 Write2 --> ReadBarrier1 ReadBarrier1 --> VolatileRead VolatileRead --> ReadBarrier2 ReadBarrier2 --> Read1 在实际中,不是所有的读写操作都必须穿越内存屏障。 通过官方的解释可以得到更详细且严谨的4种内存屏障操作的解释: LoadLoad:确保 Load1 完成后再执行 Load2 以及所有后续的 load 操作。 Store1 之前的存储操作不能下浮到 Load2 和所有后续的加载操作之后。 两个进一步的内存屏障操作是:acquire和release。

    75140编辑于 2023-10-21
  • 来自专栏C语言讲解

    数据在内存中的存储(2

    浮点型在内存中的存储 常见的浮点数: 3.14159 1E10 ------ 1.0 * 10^10 浮点数家族包括: float、double、long double 类型 浮点数表示的范围: 因此,我们可以推出:整型和浮点型在内存中的存储方式是有差异的! 3.2 浮点数存储规则 num 和 *pFloat 在内存中明明是同一个数,为什么浮点数和整数的解读结果会差别这么大? 但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。 int main() { float f = 5.5; //101.1 //1.011 * 2^2 //(-1)^0 * 1.011 * 2^2 //S = 0 //M = 1.011 / /E = 2 //01000000101100000000000000000000 //0x40b00000 return 0; } 然后,指数E从内存中取出还可以再分成三种情况: E不全为0或不全为

    36610编辑于 2024-01-22
领券