编写自己的CA和TA与逆向

参考内容《手机安全和可信应用开发》
https://note.youdao.com/s/MTlG4c1w

介绍

TA的全称是Trust Application, 即可信任应用程序。 CA的全称是Client Applicant, 即客户端应用程序。 TA运行在OP-TEE的用户空间, CA运行在REE侧。 CA执行时代入特定的UUID和命令ID参数就能实现请求特定TA执行特定操作的需求, 并将执行结果返回给CA。 通过CA对TA的调用可实现在REE侧对安全设备和安全资源的操作。 普通用户无法知道TA的具体实现, 例如操作使用了什么算法、 操作了哪些资源、 获取了哪些数据等, 这也就确保了相关资源和数据的安全。

编写自己的第一个TA程序

在这里插入图片描述
Android.mk是安卓编译,
host/main.c==>CA:共五步:1.初始化上下文;2.打开会话;3.发送命令和参数;4.关闭会话;5.结束上下文。
hello_world_ta.c==>TA,分别对应CA五步的入口操作

CA


int main(void)
{
//1.--------------------------------------------------------------------------------------------    res = TEEC_InitializeContext(NULL, &ctx);if (res != TEEC_SUCCESS)errx(1, "TEEC_InitializeContext failed with code 0x%x", res);
//2.--------------------------------------------------------------------------------------------res = TEEC_OpenSession(&ctx, &sess, &uuid,TEEC_LOGIN_PUBLIC, NULL, NULL, &err_origin);if (res != TEEC_SUCCESS)errx(1, "TEEC_Opensession failed with code 0x%x origin 0x%x",res, err_origin);
//3.--------------------------------------------------------------------------------------------    memset(&op, 0, sizeof(op));op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INOUT, TEEC_NONE,TEEC_NONE, TEEC_NONE);op.params[0].value.a = 42;printf("Invoking TA to increment %d\n", op.params[0].value.a);res = TEEC_InvokeCommand(&sess, TA_HELLO_WORLD_CMD_INC_VALUE, &op,&err_origin);command if (res != TEEC_SUCCESS)errx(1, "TEEC_InvokeCommand failed with code 0x%x origin 0x%x",res, err_origin);printf("TA incremented value to %d\n", op.params[0].value.a);
//4.---------------------------------------------------------------------------------------------TEEC_CloseSession(&sess);
//5.--------------------------------------------------------------------------------------------TEEC_FinalizeContext(&ctx);return 0;
}

TA


TEE_Result TA_CreateEntryPoint(void)
{DMSG("has been called");return TEE_SUCCESS;
}void TA_DestroyEntryPoint(void)
{DMSG("has been called");
}TEE_Result TA_OpenSessionEntryPoint(uint32_t param_types,TEE_Param __maybe_unused params[4],void __maybe_unused **sess_ctx)
{uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_NONE,TEE_PARAM_TYPE_NONE,TEE_PARAM_TYPE_NONE,TEE_PARAM_TYPE_NONE);DMSG("has been called");if (param_types != exp_param_types)return TEE_ERROR_BAD_PARAMETERS;(void)&params;(void)&sess_ctx;IMSG("Hello 0xCC!\n");return TEE_SUCCESS;
}void TA_CloseSessionEntryPoint(void __maybe_unused *sess_ctx)
{(void)&sess_ctx; /* Unused parameter */IMSG("Goodbye! 0xCC \n");
}static TEE_Result inc_value(uint32_t param_types,TEE_Param params[4])
{uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INOUT,TEE_PARAM_TYPE_NONE,TEE_PARAM_TYPE_NONE,TEE_PARAM_TYPE_NONE);DMSG("has been called");if (param_types != exp_param_types)return TEE_ERROR_BAD_PARAMETERS;IMSG("Got value: %u from NW", params[0].value.a);params[0].value.a += 10;  ///42+10 = 52IMSG("Increase value to: %u", params[0].value.a);return TEE_SUCCESS;
}static TEE_Result dec_value(uint32_t param_types,TEE_Param params[4])
{uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INOUT,TEE_PARAM_TYPE_NONE,TEE_PARAM_TYPE_NONE,TEE_PARAM_TYPE_NONE);DMSG("has been called");if (param_types != exp_param_types)return TEE_ERROR_BAD_PARAMETERS;IMSG("Got value: %u from NW", params[0].value.a);params[0].value.a--;IMSG("Decrease value to: %u", params[0].value.a);return TEE_SUCCESS;
}TEE_Result TA_InvokeCommandEntryPoint(void __maybe_unused *sess_ctx,uint32_t cmd_id,uint32_t param_types, TEE_Param params[4])
{(void)&sess_ctx; /* Unused parameter */switch (cmd_id) {case TA_HELLO_0xCC_CMD_INC_VALUE:return inc_value(param_types, params);case TA_HELLO_0xCC_CMD_DEC_VALUE:return dec_value(param_types, params);default:return TEE_ERROR_BAD_PARAMETERS;}
}

TA属性说明


#ifndef USER_TA_HEADER_DEFINES_H
#define USER_TA_HEADER_DEFINES_H/* To get the TA UUID definition */
#include <hello_0xcc_ta.h>#define TA_UUID                TA_HELLO_0xCC_UUID
TA识别号
/** TA properties: multi-instance TA, no specific attribute* TA_FLAG_EXEC_DDR is meaningless but mandated.*/
#define TA_FLAGS            TA_FLAG_EXEC_DDR
表示TA是否支持多个会话实例
/* Provisioned stack size */
#define TA_STACK_SIZE            (2 * 1024)
TA运行时栈大小
/* Provisioned heap size for TEE_Malloc() and friends */
#define TA_DATA_SIZE            (32 * 1024)
TA运行时堆空间大小 TEE_Malloc就是从这个空间中分配
/* The gpd.ta.version property */
#define TA_VERSION    "1.0"
版本信息
/* The gpd.ta.description property */
#define TA_DESCRIPTION    "Example of OP-TEE Hello 0xCC Trusted Application"
TA的描述字段
/* Extra properties */
#define TA_CURRENT_TA_EXT_PROPERTIES \{ "org.linaro.optee.examples.hello_world.property1", \USER_TA_PROP_TYPE_STRING, \"Some string" }, \{ "org.linaro.optee.examples.hello_world.property2", \USER_TA_PROP_TYPE_U32, &(const uint32_t){ 0x0010 } }
通过宏定义描述gp.ta.description和gp.ta.version
#endif /* USER_TA_HEADER_DEFINES_H */

运行结果

在这里插入图片描述
在这里插入图片描述

逆向

将uuid.ta的程序逆向,可以看到是跟编写的代码一致的,一般是从TA_InvokeCommandEntryPoint函数开始看起,因为大部分功能是从这里来的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

前端 Ajax 技术有哪些优缺点?

Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种基于前端 JavaScript 技术的异步通信技术&#xff0c;可以在不刷新整个页面的情况下向服务器发送请求和接收响应&#xff0c;以实现动态加载内容和交互效果。下面是 Ajax 技术的优缺点&#xff1a; 优点&am…

css实现三行,溢出显示省略号(后有js实现逻辑)

css实现代码&#xff1a; .text-container {display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;overflow: hidden;text-overflow: ellipsis; }解释&#xff1a; 1.-webkit-box 和 -webkit-box-orient 属性将容器元素设置为一个垂直方向的弹性盒子&…

需求调研计划及用户需求调研单

1.目的 2.概述 3.需求调研计划 3.1调研目的 3.2调研范围 3.2.1.调研的职能范围 3.2.2.调研的业务范围 3.2.3.调研的地点范围 3.3调研方式 3.4调研阶段 3.5具体时间安排 软件开发全文档获取&#xff1a;点我获取 1、需求调研计划 2、用户需求调研单 项目名称 客…

C++ auto的作用

auto的作用 保护变量的值不被修改&#xff0c;防止意外的错误操作&#xff1b;声明函数参数为常量引用&#xff0c;以避免函数修改参数的值&#xff1b;声明类的成员函数为常量成员函数&#xff0c;以确保函数不修改对象的状态。 1 const关键字用于声明一个常量&#xff0c;…

【EI会议投稿】第九届电子技术和信息科学国际学术会议(ICETIS 2024)

第九届电子技术和信息科学国际学术会议&#xff08;ICETIS 2024&#xff09; The 9th International Conference on Electronic Technology andInformation Science&#xff08;ICETIS 2024&#xff09; ICETIS会议始于2016年&#xff0c;先后吸引众多来自国内外高等院校、科…

2023亚太杯数学建模竞赛C题新能源电动汽车数据分析与代码讲解

C题论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模型的建立和求解、问题3模型的建立和求解、问题4模型的建立和求解、问题5模型的建立和求解&#xff09;、模型的评价等等&#xff0c; 视频讲解如下&…

组件库篇 | EUI | 按钮

组件库篇 | EUI | 按钮 前言 从本章开始,我将会一一演示所有组件所有函数的调用代码,以方便读者掌握组件的具体用法。但这并不意味着在实际使用中要用到所有的函数,请读者按需取用。 基本介绍 EUI提供了三种类型的按钮,如下: 常规按钮 Button文字按钮 TextButton图标按钮…

《洛谷深入浅出基础篇》P1113 杂物——DAG

上链接&#xff1a;P1113 杂务 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1113 上题干&#xff1a; 题目描述 John 的农场在给奶牛挤奶前有很多杂务要完成&#xff0c;每一项杂务都需要一定的时间来完成它。比如&#xff1a;他们要将奶牛…

编写SQL语句,场景:从一张表中查询某字段是逗号分隔的集合值,需要遍历集合内每个值,将其作为条件去查询另一张表,最终返回列表

目录 场景编写SQL分页获取该开票单号下的所有订单列表使用子查询和 in 字句使用 find_in_set 场景 从一张表中查询某字段是逗号分隔的集合值&#xff0c;需要遍历集合内每个值&#xff0c;将其作为条件去查询另一张表&#xff0c;最终返回列表 编写SQL 分页获取该开票单号下…

羊大师详解羊奶如何帮助控制血压

羊大师详解羊奶如何帮助控制血压 羊奶是一种珍贵的天然饮品&#xff0c;不仅具有丰富的营养成分&#xff0c;还被证实对血压具有调控作用。很多人在了解到羊奶的功效后&#xff0c;都对其与血压之间的关系产生了浓厚的兴趣。接下来&#xff0c;小编羊大师将为大家详细介绍羊奶…

Linux基本命令与系统题目

1.linux 2.6.* 内核默认支持的文件系统有哪些&#xff1f;[多选] A.ext3 B.ext2 C.ext4 D.xfs E.ufs 2.linux查看cpu占用的命令是什么&#xff1f; A.top B.netstat C.free D.df 3.在Linux系统中, 为找到文件try_grep含有以a字母为行开头的内容, 可以使用命令&…

算法复杂度分析

文章目录 有数据范围反推算法复杂度以及算法内容一般方法递归 有数据范围反推算法复杂度以及算法内容 c一秒可以算 1 0 7 10^7 107~ 1 0 8 10^8 108次 一般方法 看循环 有几层循环就可以初步分析O( n i n^i ni) 双指针算法除外O(n) 递归 公式法 根据公式的形式&#xff0…

ARM 汇编基础

我们在学习 STM32 的时候几乎没有用到过汇编&#xff0c;可能在学习 UCOS 、 FreeRTOS 等 RTOS 类操作系统移植的时候可能会接触到一点汇编。但是我们在进行嵌入式 Linux 开发的时候是绝 对要掌握基本的 ARM 汇编&#xff0c;因为 Cortex-A 芯片一上电 SP 指针还…

关于前端上传

类似于 上面的传参form-data形式&#xff0c;第一个参数为上传的文件&#xff0c;第二个参数为json格式

一篇搞定Java注解

参考&#xff1a;https://blog.csdn.net/yeahPeng11/article/details/120394276 https://blog.csdn.net/yeahPeng11/article/details/120330630 https://www.cnblogs.com/CF1314/p/16580232.html 通过现有注解&#xff0c;明白注解是什么东东。 在 SpringBoot中&#xff0c;我…

G320E是一种低荣声、固定频率的电荷泵型DC/DC转换器

G320E 低噪声电荷泵DC/DC转换器 产品概述&#xff1a; G320E是一种低荣声、固定频率的电荷泵型DC/DC转换器&#xff0c;在输入电压范围在2.7V到5.0V的情况下&#xff0c;该器件可以产生5V的输出电压&#xff0c;最大输出电流达到300mA.G320E外部元件少&#xff0c;非常适合于…

IP定位揭秘:如何揪出SEM、百度竞价恶意点击

在当今的数字营销领域&#xff0c;搜索引擎营销&#xff08;SEM&#xff09;和百度竞价成为了企业推广的重要手段。然而&#xff0c;随着这些渠道的普及&#xff0c;恶意点击现象也日益严重。恶意点击主要来自竞争对手&#xff0c;或是竞价服务的提供商&#xff0c;他们通过点击…

亚信安慧AntDB MTK数据同步工具之数据稽核

数据稽核是一种用于确保表数据准确性和一致性的重要方法&#xff0c;它涉及到检查数据的完整性、一致性、有效性和合法性&#xff0c;以及与预期规范的匹配程度等多个方面。随着大数据时代的到来&#xff0c;通过有效的数据稽核&#xff0c;组织可以提高决策的准确性和效率&…

浅谈安科瑞直流电表在荷兰光伏充电桩系统中的应用

摘要&#xff1a;本文介绍了安科瑞直流电表在荷兰光伏充电桩系统中的应用。主要用于充电桩的电流电压电能的计量。 Abstract: This article introduces the application of Acrel DC meters in PV charging pile system in Netherlands.The device is measuring current,volt…

Modbus-RTU协议讲解与实战

1、背景 工作需要,需要使用Modbus-RTU实现RS485通信,于是简单学习并实践了一下。 2、参考资料 一文看懂Modbus协议 3、协议说明 3.1、协议类型 当前设备采用Modbus-RTU协议,采用CRC-16_Modbus校验算法,数据链路层使用用标准串口协议,物理层采用RS485进行数据传输。 …