你好,我現在能夠用NDK的如下方式寫幾個簡單的文件,然後打包為SO,再用另外的一個.C文件調用SO,然後生成最終的供Android使用的SO文件,具體方式如下:
下載一個從android模擬器里取system lib的工具busybox,然後調用命令
$adb push busybox /dev/sample/busybox
$adb shell chmod 777 /dev/sample/busybox
$adb shell ./dev/sample/busybox tar -cf /dev/sample/libs.tar /system/lib
$adb pull /dev/sample/libs.tar libs.tar
這樣就將模擬器下的 /system/lib 目錄的所有庫(so)文件打包並下載下來了,解壓libs.tar就得到了我們所需要的所有庫文件。
接著將所有的文件 到 $(NDK)\build\prebuilt\windows\arm-eabi-4.2.1\lib\gcc\arm-eabi\4.2.1,這個時候基本的配置工作就結束了。
然後建立tutorial01.c調用tutorial02.c中的方法,通過寫makefile文件將之打包為SO
CC = /cygdrive/e/android-ndk-1.5_r1/build/prebuilt/windows/arm-eabi-4.2.1/bin/arm-eabi-gcc
CFLAGS = -g -O2 -fPIC -DANDROID -I ./ -I ../ -I /cygdrive/e/android-ndk-1.5_r1/build/platforms/android-1.5/arch-arm/usr/include
SDFLAGS = -nostdlib -Wl,-T,armelf.xsc -Wl,-soname,$@ -Wl,-shared,-Bsymbolic -lc
CRT_OBJS= -lz -lm
# source files:
SRCS= tutorial01.c tutorial02.c tutorial02.h
all: libtutorial.so
libtutorial.so: tutorial01.o tutorial02.o
$(CC) $(SDFLAGS) -o $@ tutorial01.o tutorial02.o $(CRT_OBJS)
tutorial01.o: tutorial02.h
tutorial02.o: tutorial02.h
clean:
rm -f libtutorial.so *.o
然後make,這個時候會報錯 can't find "armelf.xsc", 在ndk的目錄里搜索一下,搜到之後 到$(NDK)\build\prebuilt\windows\arm-eabi-4.2.1\lib\gcc\arm-eabi\4.2.1,然後make,成功。
接著建立一個文件test01.c,動態載入so文件,然後寫一個makefile文件,最後make成功。
建立一個Android工程 testapp來測試其運行情況,實驗表明是能夠正確運行的。
❷ 怎樣防止Android apk被反編譯,用什麼加密方法來保護dex源碼文件不被注入惡意代碼杜絕二次打包的出現
1、混淆java代碼。增加無用代碼,或者重命名,使反編譯後的源代碼難於看懂。
2、關鍵代碼使用jni調用本地代碼,用c或c++編寫,相對於class文件,so相對比較難於反編譯。 需要開發者熟悉如何寫c或c++代碼。
3、如果自身時間或者技術有局限的話,現在國內有第三方加密平台。最近有家叫做 愛加密的非常活躍建議一試而且是免費的。
總的來說APP加密保護是一項比較難精的技術,易學的安全性能不佳。技術也在不斷的更新,是沒有絕對安全的。到不如直接交給專業的處理。
❸ 安卓加密要怎麼做特別是針對二次打包與dex文件保護的加密。
防止Android
apk被反編譯的方法:
判斷apk簽名是否與原版簽名是否一致;
代碼混淆,將混淆的級別設置高點,混淆出來以後代碼全部變亂;
使用NDK編程,將核心演算法用c/c++來編寫,打包成so庫供java層調用
。
❹ Android APP加密方法都有哪些
1 偽加密是Android4.2.x系統發布前的Android加密方式之一,通過java代碼對APK(壓縮文件)進行偽加密,其修改原理是修改連續4位位元組標記為」P K 01 02」的後第5位位元組,奇數表示不加密偶數表示加密。
2 混淆保護
把原來有具體含義的類名,變數名,方法名,修改成讓人看不懂的名字,例如方法名getUserName編程了方法名。
混淆保護只是增加了代碼閱讀難度,對於破解基本上是沒有實質性作用的
運行時驗證,主要是指在代碼啟動的時候本地獲取簽名信息然後對簽名信息進行檢驗來判斷自己的應用是否是正版,如果簽名信息不是正版則提示盜版或者直接崩潰。當然你可以把必要的數據放在伺服器端。Android APP加密方法都有哪些?破解:找到smali文件中,判斷是否相等的部分。改為常量true,即失效。
總之,反編譯一些apk之後,只要是java代碼寫的總會有smil文件。對於smil文件,如果耐心讀的話,還是可以查看到一些關鍵代碼的。
相較於應用來說,游戲apk因為採用cocos2d-x或者 unity3D,採用的是c++和c# 編寫的跨平台程序,在apk採用JNI的方式。所以沒有smali,可以防止靜態被破解apk包。
當然游戲包apk在運行的時候,會把.*so載入到內存中。動態也是可以在內存中抓取相應的數據。只不過NDK相對於smali破解來說,根部不是一個層級的關系。
3 使用第三方Android加密平台