編輯:關於Android編程
最近在研究android應用中的安全問題,貌似只有將核心代碼寫到JNI底層才是最安全的。通過底層來判斷簽名是否正確,如果正確則繼續執行核心代碼,否則退出程序,這樣就可以防止別人惡意反編譯,並進行二次打包。所以這裡的關鍵就是如何在JNI中獲得簽名。
我上網查了好多資料,都沒有現成的答案,但是我慢慢的找到了一些思路,於是潛心研究,終於有了結果。不敢獨享,所以過來分享給大家。
大家都知道,在android中的java代碼裡獲得簽名的哈希值,很簡單,過程如下:
try { PackageInfo packageInfo = getPackageManager().getPackageInfo( "com.klxx.as", PackageManager.GET_SIGNATURES); Signature[] signs = packageInfo.signatures; Signature sign = signs[0]; Log.i("test", "hashCode : "+sign.hashCode()); } catch (Exception e) { e.printStackTrace(); }
// 獲得 Context 類 jclass native_clazz = (*env)->GetObjectClass(env, context); // 得到 getPackageManager 方法的 ID jmethodID methodID_func = (*env)->GetMethodID(env, native_clazz, "getPackageManager", "()Landroid/content/pm/PackageManager;"); // 獲得應用包的管理器 jobject package_manager = (*env)->CallObjectMethod(env, thiz, methodID_func); // 獲得 PackageManager 類 jclass pm_clazz = (*env)->GetObjectClass(env, package_manager); // 得到 getPackageInfo 方法的 ID jmethodID methodID_pm = (*env)->GetMethodID(env, pm_clazz, "getPackageInfo", "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;"); // 獲得應用包的信息 jobject package_info = (*env)->CallObjectMethod(env, package_manager, methodID_pm, (*env)->NewStringUTF(env, "com.example.hellojni"), 64);這種方法在java中叫做反射,更多的JNI反射方法可以參考博客《android開發之絕對安全(三) JNI方法集合》。
我將這段代碼傳到了CSDN上,歡迎大家下載,如果有什麼漏洞,也歡迎大家指點一下。
下載地址:http://download.csdn.net/detail/iloveyoueveryday/6909583 。
Android動畫的一個實戰內容,從屏幕底部滑動彈出PopupWindow。 相信這種效果大家在很多APP上都遇到過,比如需要拍照或者從SD卡選擇圖片,再比如需要分享某些
除了常用的畫筆屬性,比如普通的畫筆(Paint),帶邊框、填充的style,顏色(Color),寬度(StrokeWidth),抗鋸齒(ANTI_ALIAS_FLAG)等
shape和selector是Android UI設計中經常用到的,比如我們要自定義一個圓角Button,點擊Button有些效果的變化,就要用到shape和select
URL(Uniform Resource Locator)對象代表統一資源定位器,它是指向互聯網資源的指針。URL由協議名、主機、端口和資源路徑組件,即滿足