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

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

相关文章

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

在Java中将XLS转换为XLSX的实现方案

《在Java中将XLS转换为XLSX的实现方案》在本文中,我们将探讨传统ExcelXLS格式与现代XLSX格式的结构差异,并为Java开发者提供转换方案,通过了解底层原理、性能优势及实用工具,您将掌握... 目录为什么升级XLS到XLSX值得投入?实际转换过程解析推荐技术方案对比Apache POI实现编程

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

使用Python实现网页表格转换为markdown

《使用Python实现网页表格转换为markdown》在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,本文将使用Python编写一个网页表格转Markdown工具,需... 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或