編寫自己的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.pswp.cn/news/163402.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163402.shtml
英文地址,請注明出處:http://en.pswp.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進行數據傳輸。 …