应用软件安全编程--25考虑对函数指针进行加密

在某些情况下,攻击者可以通过修改内存甚至函数指针来执行任意代码。为了减少这类攻击的影 响,函数指针应该在运行时进行加密,并在执行程序时才进行解密。

对于考虑对函数指针进行加密的情况,示例1给出了不规范用法(C/C++   语言)示例。示例2给 出了规范用法(C/C++   语言)示例。

示例1:int(*log  fn)(const    char    *,..)=    printf;/*..*/log  fn("foo");

这个不规范的代码示例将 printf()函 数 赋 给 log fn 函数指针,并且它能够分配在栈的数据段里。

如果允许攻击者修改 log fn 函数指针,则将出现可攻击点,例如缓冲区溢出或者内存任意写入。

攻击者可能用本地的任意函数覆盖 printf的 值 。

示例2(Windows):#include<Windows.h)void   *   log  fn   =EncodePointer(printf);/*..  */int(*fn)(const fn("foo");Microsoftchar     ,.)=(int(*)(const                  char     ,.))DecodePointer(log  fn);

Windows提供了EncodePointer()和DecodePointer()函数对指针进行加密和解密,确保只对给定的程序调用。

注意,DecodePointer()没有返回成功或者失败。如果攻击者能够重写指针包括 log fn, 那么将会返回非法的指针并且会导致程序崩溃。但是,与给攻击者提供执行任意代码的能力相比,这种情况的安全风险更低。

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

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

相关文章

Unity UI设计 软件构造实验报告

实验1: 仿真系统的UI主界面设计 1.实验目的 &#xff08;1&#xff09;熟悉Unity中UI界面的设计与编写&#xff1b; &#xff08;2&#xff09;熟悉UI界面中场景转换,UI与场景内容相互关联的方式。 &#xff08;3&#xff09;熟悉Unity中MySQL数据库的操作 2.实验内容 新建…

设计模式—单一职责原则

1.背景 单一职责原则&#xff08;SRP&#xff1a;Single responsibility principle&#xff09;又称单一功能原则&#xff0c;面向对象五个基本原则&#xff08;SOLID&#xff09;之一。它规定一个类应该只有一个发生变化的原因。该原则由罗伯特C马丁&#xff08;Robert C. Ma…

生成式AI与大语言模型,东软已经准备就绪

伴随着ChatGPT的火爆全球&#xff0c;数以百计的大语言模型也争先恐后地加入了这一战局&#xff0c;掀起了一场轰轰烈烈的“百模大战”。毋庸置疑的是&#xff0c;继方兴未艾的人工智能普及大潮之后&#xff0c;生成式AI与大语言模型正在全球开启新一轮生产力革新的科技浪潮。 …

【C语言】深入理解指针(四)

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 ✏️真正相信奇迹的家伙&#xff0c;本身和奇迹一样了不起啊&#xff01; 欢迎大家关注&#x1f50d;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;>希望看完我的文章对你有小小的帮助&am…

帝国cms开发一个泛知识类的小程序的历程记录

#帝国cms小程序# 要开发一个泛知识类的小程序&#xff0c;要解决以下几个问题。 1。知识内容的分类。 2。知识内容的内容展示。 3。知识内容的价格设置。 4。用户体系&#xff0c;为简化用户的操作&#xff0c;在用户进行下载的时候&#xff0c;请用户输入手机号&#xff…

【HarmonyOS】API6上JS实现视频播放全屏播放时,会回到之前界面

【关键字】 API6 / 视频播放 / 全屏播放异常 【问题现象】 开发者在API6上用JS实现视频播放器点全屏播放后&#xff0c;不是全屏效果&#xff0c;实际效果是变成了横屏并返回到首页。 具体代码实现是参考video媒体组件指南。 【问题分析】 JS实现视频播放器有Codelab代码示…

DedeBIZ 管理系统 DedeV6 v6.2.6 社区版 免费授权版

DedeBIZ 系统&#xff1a;开源、安全、高效的 DedeV6 v6.2.6 社区版 DedeBIZ 系统是基于 PHP 7 版本开发的&#xff0c;具有强大的可扩展性&#xff0c;并且完全开放源代码。它采用现流行的 Go 语言设计开发&#xff0c;不仅拥有简单易用、灵活扩展的特性&#xff0c;还具备更…

ElasticSearch之Health API

查看当前集群全部健康指标的信息&#xff0c;执行如下命令&#xff1a; curl -X GET "https://localhost:9200/_health_report?pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下&#xff1a; {&quo…

Niushop 开源商城 v5.1.7:支持PC、手机、小程序和APP多端电商的源码

Niushop 系统是一款基于 ThinkPHP6 开发的电商系统&#xff0c;提供了丰富的功能和完善的商品机制。该系统支持普通商品和虚拟商品&#xff0c;并且针对虚拟商品还提供了完善的核销机制。同时&#xff0c;它也支持新时代的商业模式&#xff0c;如拼团、分销和多门店砍价等营销活…

Platform Issues 平台问题

Set processing does not behave the same on every database platform. On some platforms, set processing can encounter performance breakdowns. Some platforms do not optimize update statements that include subqueries. 集处理在每个数据库平台上的行为并不相同。在…

Log4j

通过Log4j&#xff0c;我们可以控制日志信息输送到目的地是控制台、文件、GUI组件&#xff0c;甚至是套接口服务器、NT的事件记录器。我们可以控制每一条日志的输出格式。通过定义每一条日志信息的级别&#xff0c;能更加细致地控制日志的生成过程。 1 log4j、log4j2与SLF4J …

【Vue3从入门到项目实现】前置知识及Vue基础

概念 理论基础 MVC 架构&#xff08;以JavaWeb举例&#xff09; M &#xff1a;Model&#xff0c;&#xff08;pojo、service、dao等&#xff09;V &#xff1a;View&#xff0c;&#xff08;JSP, HTML等&#xff09;C&#xff1a;Controller (servlet) MVVC 架构&#xff…

C/C++ 使用API实现数据压缩与解压缩

在Windows编程中&#xff0c;经常会遇到需要对数据进行压缩和解压缩的情况&#xff0c;数据压缩是一种常见的优化手段&#xff0c;能够减小数据的存储空间并提高传输效率。Windows提供了这些API函数&#xff0c;本文将深入探讨使用Windows API进行数据压缩与解压缩的过程&#…

【Rust日报】2023-11-21 如何将 Rust 的编译效率提高 75%

这是一篇来自 https://benw.is/posts/how-i-improved-my-rust-compile-times-by-seventy-five-percent 的总结和翻译&#xff0c;我去掉了一些不太重要的章节&#xff0c;保留了所有关键技术点。 Rust经常被提到的一个痛点是编译时间较慢。为了享受借用检查器、安全性和零成本抽…

pikachu靶场Table pikachu.member doesn’t exist:解决

背景&#xff1a; 第一次搭建pikachu靶场&#xff0c;搭建好后访问index.php后&#xff0c;尝试练习&#xff0c;发现界面显示Table pikachu.member doesn t exist&#xff0c;后来找了很多教程&#xff0c;没有解决&#xff0c;后来发现是自己没有进行初始化&#xff0c;给大家…

VMware 系列:ESXI6.7升级7.0

ESXI6.7升级7.0 一、下载补丁二、上传文件三 启用Shell四、登录Shell后台五、删除不兼容驱动六、正常升级最近,将一台使用ESXI6.7的虚拟机升级到了7.0版本,下面记录一下自己的升级过程。 升级条件 首先确保硬件是否能升级到7.0版本,物理网卡驱动为e1000e不能升级,如果是ig…

不到十个例题带你拿下c++双指针算法(leetcode)

移动零问题 https://leetcode.cn/problems/move-zeroes/submissions/ 1.题目解析 必须在原数组进行修改&#xff0c;不可以新建一个数组 非零元素相对顺序不变 2.算法原理 【数组划分】【数组分块】 这一类题会给我们一个数组&#xff0c;让我们划分区间&#xff0c;比如…

【机器学习】Nonlinear Independent Component Analysis - Aapo Hyvärinen

Linear independent component analysis (ICA) x i ( k ) ∑ j 1 n a i j s j ( k ) for all i 1 … n , k 1 … K ( ) x_i(k) \sum_{j1}^{n} a_{ij}s_j(k) \quad \text{for all } i 1 \ldots n, k 1 \ldots K \tag{} xi​(k)j1∑n​aij​sj​(k)for all i1…n,k1…K()…

VUE语法-$refs和ref属性的使用

1、$refs和ref属性的使用 1、$refs:一个包含 DOM 元素和组件实例的对象&#xff0c;通过模板引用注册。 2、ref实际上获取元素的DOM节点 3、如果需要在Vue中操作DOM我们可以通过ref和$refs这两个来实现 总结:$refs可以获取被ref属性修饰的元素的相关信息。 1.1、$refs和re…

PS_魔幻

首先打开一个背景图片 然后ctrl j复制一层背景 在调整中将图片改成黑白颜色 点击调整中的 色相/饱和度 调整明度 点击画笔工具&#xff0c;并且设置画笔模板 调节画笔大小&#xff0c;将笔记本电脑涂个概况 然后再新建色相/饱和度 勾选着色 调节背景颜色至喜欢 右键混合选项 …