資料介紹
軟件簡介
Android 使用 so 文件存儲私密數(shù)據(jù),并增加簽名防盜機(jī)制。
0x00 實(shí)際項(xiàng)目中引出的一些需求問題
有時(shí)你需要在客戶端存放一些保密的數(shù)據(jù),比如某些授權(quán) Key ,如果直接寫在 Java 中,會很容易被反編譯看到,那么我們可以把這些數(shù)據(jù)存在 so 文件中,來增加反編譯難度,并且增加 APP 簽名防盜機(jī)制來防止別人盜用 so 文件。
0x01 一些準(zhǔn)備工作
-
配置 NDK 開發(fā)環(huán)境,看這里 → Android Studio NDK 開發(fā)安裝配置
-
有必要的了解一下 NDK 開發(fā)基礎(chǔ)(此例子使用的是 CMake)、最好學(xué)習(xí)一下 C/C++ 基礎(chǔ),不然代碼看起來很費(fèi)勁
0x02 編寫配置文件、Java、C/C++ 代碼
1、新建 JNIKey.class 并聲明 native 方法
public?class?JNIKey?{ ????static?{ ????????System.loadLibrary("Key"); ????} ????/** ?????*?初始化并判斷當(dāng)前?APP?是否為合法應(yīng)用,只需調(diào)用一次 ?????* ?????*?@return?返回?true?則初始化成功并當(dāng)前?APP?為合法應(yīng)用 ?????*/ ????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、根據(jù)生成的 class 文件生成 .h 文件,進(jìn)入 Terminal 命令窗口輸入以下命令
javah?-d?jni?-classpath?D:\Android\Workspace\JNIKeyProtection\Key\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes?me.key.protection.JNIKey
注意路徑不要寫錯(cuò)了,生成的 .h 文件里包含自動(dòng)生成的一些方法,方法名稱一一應(yīng)對 Java native 方法,如果在 .cpp 代碼里用的是動(dòng)態(tài)注冊的方式,這步可以忽略不做,因?yàn)閯?dòng)態(tài)注冊方法名可以隨便寫,具體看 .cpp 里的代碼
4、在 src\main 目錄下新建 cpp 目錄,新建 Key.cpp 文件在這里編寫 C++ 代碼,.cpp 表示 C++ 文件, .c 表示 C 文件
5、在 Module 根目錄下新建 CmakeLists.txt 文件,配置 JNI 相關(guān)參數(shù)
#?指定編譯器版本 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:靜態(tài)庫,是目標(biāo)文件的歸檔文件,在鏈接其它目標(biāo)的時(shí)候使用 ????????#?SHARED:動(dòng)態(tài)庫,會被動(dòng)態(tài)鏈接,在運(yùn)行時(shí)被加載 ????????#?MODULE:模塊庫,是不會被鏈接到其它目標(biāo)中的插件,但是可能會在運(yùn)行時(shí)使用dlopen-系列的函數(shù)動(dòng)態(tài)鏈接 ????????SHARED ????????#?資源文件,可以多個(gè),資源路徑是相對路徑,相對于本CMakeLists.txt所在目錄 ????????src/main/cpp/Key.cpp) #?依賴?NDK?中的?log?日志庫 find_library( ????????log-lib ????????log) #?關(guān)聯(lián)?log?庫到本地庫。如果你本地的庫(DecryptKey)想要調(diào)用log庫的方法,那么就需要配置這個(gè)屬性 target_link_libraries( ????????#?目標(biāo)庫 ????????Key ????????#?依賴庫 ????????${log-lib})
注意是 Module 根目錄,不是 Project 根目錄
6、修改對應(yīng) Module 的 build.gradle 文件添加配置參數(shù)
-
defaultConfig 標(biāo)簽里添加如下配置
externalNativeBuild?{ ????????cmake?{ ????????????cppFlags?"-frtti?-fexceptions" ????????} ????} ????//?平臺架構(gòu)支持 ????ndk?{ ????????abiFilters?'arm64-v8a',?'armeabi',?'armeabi-v7a',?'x86',?'x86_64' ????}
-
android 標(biāo)簽里添加如下配置
externalNativeBuild?{ ????cmake?{ ????????path?"CMakeLists.txt" ????} }
7、在 cpp 文件夾下新建 Key.cpp 文件里面放 c++ 代碼
完整代碼 → Key.cpp
0x03 調(diào)用生成的 .so 文件
-
默認(rèn) .so 文件生成目錄,復(fù)制出來放到 libs 目錄下,即可使用
{項(xiàng)目目錄}\JNIKey\build\intermediates\cmake\debug\obj\
-
你可以對生成的庫文件封裝一個(gè) Jar 包,這樣 .so 就不必放在特定的包下,Jar 包的生成必須要 Module 里,默認(rèn) Jar 包生成目錄
{項(xiàng)目目錄}\JNIKey\build\intermediates\intermediate-jars\debug\classes.jar
- Cx51用戶指南之數(shù)據(jù)存儲格式數(shù)據(jù)存儲格式 2次下載
- 基于FPGA塊存儲器的多位反轉(zhuǎn)容錯(cuò) 19次下載
- USB 3.0存儲發(fā)展歷史及展望綜述 42次下載
- 可提高隱私數(shù)據(jù)安全性的可搜索加密方案 10次下載
- 結(jié)合云存儲與區(qū)塊鏈的高可信存儲模型 7次下載
- 云數(shù)據(jù)的存儲安全審計(jì)機(jī)制綜述 6次下載
- 基于預(yù)分區(qū)策略的分布式數(shù)據(jù)存儲方法 18次下載
- 一種數(shù)據(jù)流內(nèi)存索引及存儲方法 8次下載
- 多云存儲技術(shù)的相關(guān)研究、挑戰(zhàn)及發(fā)展前景 7次下載
- 基于哈希存儲與事務(wù)加權(quán)的Apriori算法 10次下載
- 西門子PLC培訓(xùn)資料之數(shù)據(jù)塊中的數(shù)據(jù)存儲詳細(xì)說明 15次下載
- 如何使用圖形數(shù)據(jù)庫的DBLP數(shù)據(jù)存儲解決復(fù)雜關(guān)聯(lián)關(guān)系的數(shù)據(jù)存儲問題 5次下載
- 單片機(jī)存儲器的工作原理和結(jié)構(gòu)與半導(dǎo)體存儲器的分類說明
- 如何使用FPGA設(shè)計(jì)高速實(shí)時(shí)數(shù)據(jù)采集存儲系統(tǒng)的資料概述 22次下載
- PIC24F系列參考手冊之具有擴(kuò)展數(shù)據(jù)空間(EDS)的數(shù)據(jù)存儲器
- 示波器怎么存儲數(shù)據(jù) 701次閱讀
- GaussDB數(shù)據(jù)庫存儲過程介紹 1054次閱讀
- 大數(shù)據(jù)生態(tài)系統(tǒng)最底層的數(shù)據(jù)存儲 3444次閱讀
- 云計(jì)算與數(shù)據(jù)存儲的混亂怎樣處理 570次閱讀
- 該如何提高云存儲大數(shù)據(jù)的安全性 839次閱讀
- 本地存儲VS云存儲 區(qū)別不只是數(shù)據(jù)存放位置 1534次閱讀
- 對象存儲是什么?塊存儲又是什么? 1.8w次閱讀
- 列式存儲是數(shù)據(jù)分析性能殺手锏 1306次閱讀
- 串行外設(shè)接口(SPI)擴(kuò)展大容量數(shù)據(jù)存儲器 4786次閱讀
- 淺談外部程序存儲器數(shù)據(jù)存儲器操作命令 5260次閱讀
- 分享一些相對簡單的方法來提升自己的數(shù)據(jù)安全性 6812次閱讀
- 破解元數(shù)據(jù)存儲與管理難題,是浪潮軟件定義存儲馳騁海量數(shù)據(jù)時(shí)代的關(guān)鍵 5695次閱讀
- 數(shù)據(jù)存儲技術(shù)應(yīng)用詳解:RAID工作模式 849次閱讀
- 網(wǎng)絡(luò)附屬存儲:用于無線數(shù)據(jù)傳輸和數(shù)據(jù)存儲的設(shè)計(jì)和構(gòu)建NAS系統(tǒng) 1521次閱讀
- 鐵電存儲器在驗(yàn)光儀數(shù)據(jù)存儲系統(tǒng)中的應(yīng)用 1748次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評論
查看更多