首页 > 其他分享 >探索堆题的起点——修改结构体

探索堆题的起点——修改结构体

时间:2023-09-26 15:23:08浏览次数:39  
标签:struct 探索 堆题 修改 hacknote notelist 我们 起点 结构

探索堆的起点——修改结构体

这里我们主要以CTF wiki 上UAF的例题hacknote为例 去创建一个结构体 探索堆题代码结构的真相 让pwn师傅少点逆向的痛

题目:ctf-challenges/pwn/heap/use_after_free/hitcon-training-hacknote/hacknote at master · ctf-wiki/ctf-challenges (github.com)

引用:IDA 分析技巧记录 - F0und

1.分析程序

分析程序 我们发现 主要有这几个需要添加结构体来便于我们分析 首先我们要知道的是

**(&notelist + i) 存的其实是print_note_content这个函数的指针

*(v0 + 4) 存的其实是content_chunk的指针值

((&notelist + i) + 1) 这个位置 存储的其实是content的内容

下面我们来讨论一个问题:

我们要区分 *(v0 + 4) 和 ((&notelist + i) + 1) 里的4 1分别是什么型?

根据指针的运算 我们知道

其实这里的4 是四个字节 而这里的1 是加了一个整数类型

image-20230926112444800

2.创造结构体

根据分析内容 我们开始尝试去创建结构体

我们可以直接使用shift+F1 来进入struct的页面 ida里允许我们直接去写一段c代码的struct来插入(我们只需要在struct界面敲insert键)

image-20230926113317228

我们去拟定我们的代码

# 我们创建一个名叫hacknote的结构体 并且起了一个简写名称叫note
typedef struct note{
	char * print_ptr;
	char * content;
}hacknote;

如下图所示:

image-20230926113708054

我们成功的添加进入了 两个结构体

image-20230926113745669

3.修改数据类型

我们先修改第一块内容的&notelist+i的内容 按“Y”键查看 ida本来给他识别的数据类型

image-20230926145358287

按照循环我们知道 应该是会创建5个notelist数组 这里我们能直接修改数组内容

image-20230926145638994

修改数组内容如下:

image-20230926145754188

我们可以看到 notelist数组已经被修的十分完美了

image-20230926145850975

接下来我们来使用我们的结构体

同样的 我们选中notelist数组 修改类型

image-20230926150042763

这里我们看到这个类型为void型 我们可以改成我们的结构类型note

image-20230926150206058

修完后 我们就可以很清楚的发现我们的代码更清晰了

image-20230926150308428

到此,你就已经完成了一次结构体的创建与修复。

标签:struct,探索,堆题,修改,hacknote,notelist,我们,起点,结构
From: https://www.cnblogs.com/w0lf-KP/p/17730151.html

相关文章

  • 超越内存限制:深入探索内存池的工作原理与实现
    本文分享自华为云社区《超越内存限制:深入探索内存池的工作原理与实现》,作者:LionLong。一、引言为什么需要内存池?在系统应用层面,程序开发使用的都是虚拟内存。物理内存是底层的,只有底层程序(比如驱动、固件等)可以接触到。程序通常能管理的内存主要是堆和共享内存(mmap)。应用层所......
  • Soul深度探索布局社交元宇宙,为行业发展提供新思路
    近年来,随着线上社交的高速发展,通过线上社交平台认识新朋友,成为Z世代群体的主流选择。数据显示,Z世代用户社交活跃占比高达83.6%,中国近70%的Z世代用户倾向线上社交。在此背景下,主打构建年轻人社交元宇宙的SoulApp,通过创新兴趣图谱建立关系和游戏化的产品设计,为用户打造一个......
  • 代码层面探索前端性能 | 京东云技术团队
    前言最近在做性能优化,具体优化手段,网上铺天盖地,这里就不重复了。性能优化可分为以下几个维度:代码层面、构建层面、网络层面。本文主要是从代码层面探索前端性能,主要分为以下4个小节。使用CSS替代JS深度剖析JS前端算法计算机底层使用CSS替代JS这里主要从动画和CSS组件两......
  • 代码层面探索前端性能
    前言最近在做性能优化,具体优化手段,网上铺天盖地,这里就不重复了。性能优化可分为以下几个维度:代码层面、构建层面、网络层面。本文主要是从代码层面探索前端性能,主要分为以下4个小节。使用CSS替代JS深度剖析JS前端算法计算机底层使用CSS替代JS这里主要......
  • 探索Navicat Premium 16:卓越的数据库管理软件解决方案 mac+win版
    在当今的数据驱动时代,一款高效、便捷的数据库管理软件对于企业、机构以及个人用户来说至关重要。NavicatPremium16,作为一款备受赞誉的数据库管理软件,正在满足这一需求,以其独特的功能和优势吸引着广大用户。→→↓↓载NavicatPremium16mac/win版一、NavicatPremium16的核......
  • 单例注册表模式探索
    MazeFactory单例工厂,维护一个单例注册表,每种迷宫子类维护一个单例,这种方式不用破坏原来的代码结构,将单例实现搬到外面,如果维持全局的单例,无论属于何种迷宫均算作一种,,那么就需要提供迷宫的销毁方法,并在getInstance方法中控制单例的交替。还有一种方式是将每个子类设计为单例模式,并......
  • 创新数据科学探索:DataSpell 2023,专业数据科学家的首选IDE
    在日新月异的数据科学领域,为专业数据科学家提供先进、便捷的工具有着至关重要的意义。2023年,一个备受瞩目的集成开发环境(IDE)——DataSpell,正以其独特的功能与优势,重新定义数据科学家的“瑞士军刀”。→→↓↓载DataSpell2023mac/win版一、DataSpell的主要特性数据科学全流......
  • 文档图像处理:大模型的突破与新探索
    前言随着数字化时代的到来,文档图像处理技术在各行各业扮演着越来越重要的角色。在2023第十二届中国智能产业高峰论坛(CIIS 2023)的专题论坛上,合合信息智能技术平台事业部副总经理、高级工程师丁凯博士分享了当前文档图像处理面临的困难,并讨论大模型在该领域的突破和新探索。虚竹哥把......
  • 异常检测:探索数据深层次背后的奥秘《下篇》
    异常检测:探索数据深层次背后的奥秘《下篇》异常检测——高维数据异常检测:孤立森林在实际场景中,很多数据集都是多维度的。随着维度的增加,数据空间的大小(体积)会以指数级别增长,使数据变得稀疏,这便是维度诅咒的难题。维度诅咒不止给异常检测带来了挑战,对距离的计算,聚类都带来了难题。......
  • 异常检测:探索数据深层次背后的奥秘《下篇》
    异常检测:探索数据深层次背后的奥秘《下篇》异常检测——高维数据异常检测:孤立森林在实际场景中,很多数据集都是多维度的。随着维度的增加,数据空间的大小(体积)会以指数级别增长,使数据变得稀疏,这便是维度诅咒的难题。维度诅咒不止给异常检测带来了挑战,对距离的计算,聚类都带来了难题......