資料介紹
軟件簡介
Android 使用 so 文件存儲私密數據,并增加簽名防盜機制。
0x00 實際項目中引出的一些需求問題
有時你需要在客戶端存放一些保密的數據,比如某些授權 Key ,如果直接寫在 Java 中,會很容易被反編譯看到,那么我們可以把這些數據存在 so 文件中,來增加反編譯難度,并且增加 APP 簽名防盜機制來防止別人盜用 so 文件。
0x01 一些準備工作
-
配置 NDK 開發環境,看這里 → Android Studio NDK 開發安裝配置
-
有必要的了解一下 NDK 開發基礎(此例子使用的是 CMake)、最好學習一下 C/C++ 基礎,不然代碼看起來很費勁
0x02 編寫配置文件、Java、C/C++ 代碼
1、新建 JNIKey.class 并聲明 native 方法
public?class?JNIKey?{
????static?{
????????System.loadLibrary("Key");
????}
????/**
?????*?初始化并判斷當前?APP?是否為合法應用,只需調用一次
?????*
?????*?@return?返回?true?則初始化成功并當前?APP?為合法應用
?????*/
????public?static?native?boolean?init();
????/**
?????*?獲取?Key
?????*
?????*?@return?return?key
?????*/
????public?static?native?String?getKey();
}
2、Build → Rebuild Project 生成 class 文件,生成目錄一般在如下目錄
JNIKey\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes\me\key\protection\
3、根據生成的 class 文件生成 .h 文件,進入 Terminal 命令窗口輸入以下命令
javah?-d?jni?-classpath?D:\Android\Workspace\JNIKeyProtection\Key\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes?me.key.protection.JNIKey
注意路徑不要寫錯了,生成的 .h 文件里包含自動生成的一些方法,方法名稱一一應對 Java native 方法,如果在 .cpp 代碼里用的是動態注冊的方式,這步可以忽略不做,因為動態注冊方法名可以隨便寫,具體看 .cpp 里的代碼
4、在 src\main 目錄下新建 cpp 目錄,新建 Key.cpp 文件在這里編寫 C++ 代碼,.cpp 表示 C++ 文件, .c 表示 C 文件
5、在 Module 根目錄下新建 CmakeLists.txt 文件,配置 JNI 相關參數
#?指定編譯器版本
cmake_minimum_required(VERSION?3.4.1)
#?存放生成?so?庫的目錄
#?set(CMAKE_LIBRARY_OUTPUT_DIRECTORY?${PROJECT_SOURCE_DIR}/libs/${ANDROID_ABI})
#?配置?so?庫信息
add_library(
????????#?生成的?so?庫名稱,此處生成的?so?文件名稱是libKey.so
????????Key
????????#?STATIC:靜態庫,是目標文件的歸檔文件,在鏈接其它目標的時候使用
????????#?SHARED:動態庫,會被動態鏈接,在運行時被加載
????????#?MODULE:模塊庫,是不會被鏈接到其它目標中的插件,但是可能會在運行時使用dlopen-系列的函數動態鏈接
????????SHARED
????????#?資源文件,可以多個,資源路徑是相對路徑,相對于本CMakeLists.txt所在目錄
????????src/main/cpp/Key.cpp)
#?依賴?NDK?中的?log?日志庫
find_library(
????????log-lib
????????log)
#?關聯?log?庫到本地庫。如果你本地的庫(DecryptKey)想要調用log庫的方法,那么就需要配置這個屬性
target_link_libraries(
????????#?目標庫
????????Key
????????#?依賴庫
????????${log-lib})
注意是 Module 根目錄,不是 Project 根目錄
6、修改對應 Module 的 build.gradle 文件添加配置參數
-
defaultConfig 標簽里添加如下配置
externalNativeBuild?{
????????cmake?{
????????????cppFlags?"-frtti?-fexceptions"
????????}
????}
????//?平臺架構支持
????ndk?{
????????abiFilters?'arm64-v8a',?'armeabi',?'armeabi-v7a',?'x86',?'x86_64'
????}
-
android 標簽里添加如下配置
externalNativeBuild?{
????cmake?{
????????path?"CMakeLists.txt"
????}
}
7、在 cpp 文件夾下新建 Key.cpp 文件里面放 c++ 代碼
完整代碼 → Key.cpp
0x03 調用生成的 .so 文件
-
默認 .so 文件生成目錄,復制出來放到 libs 目錄下,即可使用
{項目目錄}\JNIKey\build\intermediates\cmake\debug\obj\
-
你可以對生成的庫文件封裝一個 Jar 包,這樣 .so 就不必放在特定的包下,Jar 包的生成必須要 Module 里,默認 Jar 包生成目錄
{項目目錄}\JNIKey\build\intermediates\intermediate-jars\debug\classes.jar
- Cx51用戶指南之數據存儲格式數據存儲格式 2次下載
- 基于FPGA塊存儲器的多位反轉容錯 19次下載
- USB 3.0存儲發展歷史及展望綜述 44次下載
- 可提高隱私數據安全性的可搜索加密方案 10次下載
- 結合云存儲與區塊鏈的高可信存儲模型 7次下載
- 云數據的存儲安全審計機制綜述 6次下載
- 基于預分區策略的分布式數據存儲方法 18次下載
- 一種數據流內存索引及存儲方法 8次下載
- 多云存儲技術的相關研究、挑戰及發展前景 7次下載
- 基于哈希存儲與事務加權的Apriori算法 10次下載
- 西門子PLC培訓資料之數據塊中的數據存儲詳細說明 15次下載
- 如何使用圖形數據庫的DBLP數據存儲解決復雜關聯關系的數據存儲問題 5次下載
- 單片機存儲器的工作原理和結構與半導體存儲器的分類說明
- 如何使用FPGA設計高速實時數據采集存儲系統的資料概述 22次下載
- PIC24F系列參考手冊之具有擴展數據空間(EDS)的數據存儲器
- 示波器怎么存儲數據 2.9k次閱讀
- GaussDB數據庫存儲過程介紹 2.3k次閱讀
- 大數據生態系統最底層的數據存儲 4k次閱讀
- 云計算與數據存儲的混亂怎樣處理 740次閱讀
- 該如何提高云存儲大數據的安全性 1.2k次閱讀
- 本地存儲VS云存儲 區別不只是數據存放位置 2.5k次閱讀
- 對象存儲是什么?塊存儲又是什么? 1.9w次閱讀
- 列式存儲是數據分析性能殺手锏 1.5k次閱讀
- 串行外設接口(SPI)擴展大容量數據存儲器 1w次閱讀
- 淺談外部程序存儲器數據存儲器操作命令 5.7k次閱讀
- 分享一些相對簡單的方法來提升自己的數據安全性 7.3k次閱讀
- 破解元數據存儲與管理難題,是浪潮軟件定義存儲馳騁海量數據時代的關鍵 6.3k次閱讀
- 數據存儲技術應用詳解:RAID工作模式 1k次閱讀
- 網絡附屬存儲:用于無線數據傳輸和數據存儲的設計和構建NAS系統 1.9k次閱讀
- 鐵電存儲器在驗光儀數據存儲系統中的應用 2.2k次閱讀
下載排行
本周
- 1新一代網絡可視化(NPB 2.0)
- 3.40 MB | 1次下載 | 免費
- 2冷柜-電氣控制系統講解
- 13.68 MB | 1次下載 | 10 積分
- 3MDD品牌三極管MMBT3906數據手冊
- 2.33 MB | 次下載 | 免費
- 4MDD品牌三極管S9012數據手冊
- 2.62 MB | 次下載 | 免費
- 5LAT1218 如何選擇和設置外部晶體適配 BlueNRG-X
- 0.60 MB | 次下載 | 3 積分
- 6LAT1216 Blue NRG-1/2 系列芯片 Flash 操作與 BLE 事件的互斥處理
- 0.89 MB | 次下載 | 3 積分
- 7收音環繞擴音機 AVR-1507手冊
- 2.50 MB | 次下載 | 免費
- 8MS1000TA 超聲波測量模擬前端芯片技術手冊
- 0.60 MB | 次下載 | 免費
本月
- 1愛華AIWA HS-J202維修手冊
- 3.34 MB | 37次下載 | 免費
- 2PC5502負載均流控制電路數據手冊
- 1.63 MB | 23次下載 | 免費
- 3NB-IoT芯片廠商的資料說明
- 0.31 MB | 22次下載 | 1 積分
- 4UWB653Pro USB口測距通信定位模塊規格書
- 838.47 KB | 5次下載 | 免費
- 5蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 6蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
- 0.08 MB | 2次下載 | 1 積分
- 7100W準諧振反激式恒流電源電路圖資料
- 0.09 MB | 2次下載 | 1 積分
- 8FS8025B USB的PD和OC快充協議電壓誘騙控制器IC技術手冊
- 1.81 MB | 1次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191439次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發燒友App





創作
發文章
發帖
提問
發資料
發視頻
上傳資料賺積分
評論