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

这篇具有很好参考价值的文章主要介绍了探索堆题的起点——修改结构体。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

这里我们主要以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 是加了一个整数类型

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

2.创造结构体

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

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

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

我们去拟定我们的代码

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

如下图所示:

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

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

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

3.修改数据类型

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

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

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

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

修改数组内容如下:

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

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

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

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

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

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

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

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

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

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

到此,你就已经完成了一次结构体的创建与修复。文章来源地址https://www.toymoban.com/news/detail-711726.html

到了这里,关于探索堆题的起点——修改结构体的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 起点读书日签脚本-5.1更新(每日视频福利,限时福利,签到,经验翻倍,领起点币,抽奖)

    起点读书日签脚本-5.1更新(每日视频福利,限时福利,签到,经验翻倍,领起点币,抽奖)

    基于auto.js或autox.js的起点7.9.312.1076版本app日签脚本 理论上是兼容所有版本的起点app的,但代码是基于起点7.9.312.1076版本进行开发的,有问题请更新或注明起点版本(也请不要老是更新,每次起点更新的东西你用的到吗?那就是产品经理为了让自己显的有作用加的乱七八糟东西

    2024年01月19日
    浏览(62)
  • 如何克服Leetcode做题的困境

    如何克服Leetcode做题的困境

    明明自觉学会了不少知识,可真正开始做Leetcode题目时,却还是出现了“一支笔,一双手,一道力扣(Leetcode)做一宿”的窘境。题型不算很难,看题解也能弄明白,可一到自己做就变成了与题面面相觑无从下手。这种困境如今正烦恼着您是否也有过这样的经历? 实践与理论

    2024年02月16日
    浏览(11)
  • 探索数据结构:特殊的双向队列

    探索数据结构:特殊的双向队列

    ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:数据结构与算法 贝蒂的主页:Betty’s blog **双向队列(double‑ended queue)**是一种特殊的队列,它允许在队列的队尾与队头插入与删除元素。根据其定义,我们也可以理解为两个栈在栈底相连。

    2024年04月09日
    浏览(13)
  • 算法题的ACM模式与核心代码模式

    身为一名程序员,刷题网站系统我们应该再熟悉不过了,除了针对竞赛的 OJ 系统,比如:POJ;还有很多专为求职提供的刷题 OJ 系统,比如:leetcode、牛客网 等。 这两类 OJ 在刷题模式上有些区别,一般竞赛的 OJ 系统是针对 ACM 模式的,而求职的 OJ 系统是针对核心算法模式的

    2024年02月14日
    浏览(43)
  • 【完善中】CTF逆向Reverse题的玩法

    【完善中】CTF逆向Reverse题的玩法

    链接:https://pan.baidu.com/s/1yy3Wtg9sCY8IfFrrAOqOSg?pwd=pr1s  提取码:pr1s    常见算法与数据结构 二叉树的恢复和推测 加密算法以及其魔改 可以通过ida7.7 2、。 3、识别加密算法与哈希算法代码特征,识别算法中魔改的部分。 4、代码混淆, 代码虚拟化, 修改代码流程, 反调试等。 5、软

    2024年02月05日
    浏览(9)
  • 电赛仪器仪表题的赛前准备(软件)

    电赛仪器仪表题的赛前准备(软件)

    比赛时候每个赛题有多个任务,按点得分。因此在不同任务的时候,我们需要通过单片机控制硬件切换不同的电路。最简单的切换方式就是设立一个任务标志变量task_num,然后主程序为一个while(1)死循环,里面通过多个while判断进行任务几。每次按下按键后task_num加一切换到下

    2024年02月16日
    浏览(13)
  • Go结构体深度探索:从基础到应用

    Go结构体深度探索:从基础到应用

    在Go语言中,结构体是核心的数据组织工具,提供了灵活的手段来处理复杂数据。本文深入探讨了结构体的定义、类型、字面量表示和使用方法,旨在为读者呈现Go结构体的全面视角。通过结构体,开发者可以实现更加模块化、高效的代码设计。这篇文章旨在为您提供关于结构

    2024年02月08日
    浏览(7)
  • 【数据结构】--- 探索栈和队列的奥秘

    【数据结构】--- 探索栈和队列的奥秘

    关注小庄 顿顿解馋૮(˶ᵔ ᵕ ᵔ˶)ა 💡个人主页:9ilk 💡专栏:数据结构之旅 上回我们学习了顺序表和链表,今天博主来讲解两个新的数据结构 — 栈和队列 , 请放心食用 对于这么坨书,我们要拿到最下面的书是不是要最后才能拿到;而对于最上面的书它是最晚放上去的

    2024年04月13日
    浏览(12)
  • 探索数据结构:解锁计算世界的密码

    探索数据结构:解锁计算世界的密码

    ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:数据结构与算法 贝蒂的主页:Betty‘s blog 随着应用程序变得越来越复杂和数据越来越丰富,几百万、几十亿甚至几百亿的数据就会出现,而对这么大对数据进行搜索、插入或者排序等的操作

    2024年03月09日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包