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

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

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

这里我们主要以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更新(每日视频福利,限时福利,签到,经验翻倍,领起点币,抽奖)

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

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

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

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

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

    2024年04月09日
    浏览(32)
  • 【完善中】CTF逆向Reverse题的玩法

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

    2024年02月05日
    浏览(28)
  • 算法题的ACM模式与核心代码模式

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

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

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

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

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

    2024年02月08日
    浏览(31)
  • 堆积如山:探索数据结构中的堆

    前言 欢迎来到小K的数据结构专栏的第十一小节,本节将为大家带来堆的详解并带来堆题目的讲解(✨当然也为大家准备了完整的源码 )~希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🐾 ✨ 在讲堆之前我们先看看满二叉树和完全二叉树~ 一、满二叉树 我们

    2024年02月08日
    浏览(37)
  • 探索数据结构:单链表的实战指南

    ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:数据结构与算法 贝蒂的主页:Betty‘s blog 在上一章节中我们讲解了数据结构中的顺序表,知道了顺序表的空间是连续存储的,这与数组非常类似,为我们随机访问数据提供了便利的条件。但

    2024年03月09日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包