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

/*人为地在更改结构体指针的类型,从而手动地实现结构体指针在读取第一个字段之后便被截断,可以用来隐藏不想暴露的其他信息*/
#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的声明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值