出于数据保护的结构体指针强制转换和字段截断

2023-10-12 22:38

本文主要是介绍出于数据保护的结构体指针强制转换和字段截断,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/*人为地在更改结构体指针的类型,从而手动地实现结构体指针在读取第一个字段之后便被截断,可以用来隐藏不想暴露的其他信息*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>void foo(){printf("inSide foo function\n");
}typedef void (* Func)();typedef struct _hidden_Node{int value;char name[20];Func childFunc;
}Hidden,* PHidden;typedef struct _simple_Node{int value;
}Simple, * PSimple;int main(int argc, char** argv){PHidden node =(PHidden)malloc(sizeof(Hidden));node->value = 10;strcpy(node->name, "hidden node");node->childFunc = foo;PSimple pnode = (PSimple)node;/*Simple fakenode = {value: node->value};(Simple *) simpleP = &(Simple fakenode);(Simple *) simpleP = (Simple *) node;*///p = (PSimple) node;printf("******inside the real hidden node***********\n");printf("value = %d\n", node->value);printf("name = %s\n", node->name);node->childFunc();printf("******inside the simple node****************\n");printf("value = %d\n",  pnode ->value);//printf("name = %s\n", pnode->name);//node->childFunc;return 0;
}

这种结构体强制截断的应用前提是结构中数据是按照初始化顺序存放的,故而只要从起始地址开始的数据是相同,那么结构体指针是可以强制转化,从而可以实现人为截断结构体暴露出的字段。这中方式是一种很简单但很有效的加密暴露机制。只要对方不知道目标结构体的所有的真实字段内容和排序(可人为地在字段中添加无效字段,以增加对方暴力破解的难度),那么是很难攻破这种看似简单实际很有效的保护手段。

printf("value = %d\n", pnode->value);
...error C2039:"name"不是_simple_node的成员,请参见_simple_node的声明

这篇关于出于数据保护的结构体指针强制转换和字段截断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/198913

相关文章

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON: