亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

學徒淺析Android開發——SO文件的混淆

2019-11-09 18:30:25
字體:
來源:轉載
供稿:網友

 

.so(SharedObject)作用等同于windows環境下的.dll(dynamic link library)文件,我們在引用第三方SDK時,也會遇到需要調用相應的.so文件的情況,.so文件本事更多的是集成公共處理方法,當然有事也會用來保存重要的數據信息。

對于應用的編譯與反編譯過程中,本地混淆一直是有效的方法。對于.so文件,同樣也適用于混淆,.so文件雖然在使用破解工具IDA打開后看到的是匯編數據,但仍然存在著規律可循,不妨礙專業人員的閱讀,所以掌握對.so文件的混淆也是必須的。

.so文件的混淆是從兩方面入手:

1:方法名混淆

2:數據混淆

方法名混淆

我們在創建構建.so文件所需的.c和.h文件時,NDK會幫助我們自動生成native方法名,這個方法名是格式化,該方法名同時也是索引表中的索引名。因其特殊性,在IDA瀏覽時,可以通過索引表快速查看到。比如我們創建一個TestSimple,在里面聲明一個native方法showDsc(),最終得到的方法名是:      java_com_example_xx_TestSimple_showDsc

生成的.so文件在經過IDA反編譯后,可以在函數索引表中清楚的看到:

好在NDK提供了修改的方法,幫助我們隱藏掉這種顯眼的名字。首先說一下兩個基礎方法:1、簡化方法名,該方法如下:

   繼續以TestSimple為例,聲明

#defineJNIFUNCTION_NATIVE(sig)  Java_com_example_xx_TestSimple_##sig

   將函數名前邊的路徑剔除掉,只顯示函數名,避免顯得直接。

  

 JNIEXPORT void JNICALL JNIFUCTION_NATIVE (showMath(JNIEnv *env, jobject obj));

   該方法只能用來簡化方法名,在編輯時有用,但是在破解中,對隱藏沒有作用,修改后,在IDA中依然可以查看到:

 

2、替換section索引名,該方法如下:

__attribute__((section(".XXXX")))

其中XXXX表示自定義的索引名,需要在指定的函數名前 聲明該方法, 例如:

__attribute__((section (".xxxsimple")))  JNICALL jstring show(JNIEnv *env, jclass obj){         return realShow(env,obj);}

實際效果圖如下:

 

該方法通過改變屬性類型,影響破解后相關代碼段解析順序,

 

NDK的方法名混淆就是將1和2 兩種方法通過配合RegisterNatives()注冊的方式混合使用,RegisterNatives()可以實現與類關聯的本地方法,這步操作必須在調用之前完成,也就是庫加載過程中。一般是用JNI_Onload這個函數來完成。通過RegisterNatives()進行關聯,將實際執行函數由聲明的類函數轉變成本地函數,達到隱藏的效果,調用步驟如下:

 

步驟一:

聲明待替換的方法集合JNINativeMethod,是一個方法類型集合,

//指針操作,將java層的showDsc函數指向到Native層的show()函數上static JNINativeMethodgetMethods[] = {        {"showDsc","()Ljava/lang/String;",(void*)show},};

其中JNINativeMethod的結構定義如下:

typedef struct{   char *name;// 待指向函數名   char *signature;// 待指向函數和形參類型   void *fnPtr//函數指針,實際執行函數}

 

聲明待注冊的類名

#define JNIREG_CLASS"com/example/xx/Test"

步驟二:

在實際執行函數前標記自定義屬性名稱

__attribute__((section(".xxxfirst"))) JNICALL jstring show(JNIEnv *env, jclass obj){        return realShow(env,obj);}

步驟三:

在實際執行函數完成操作。

jstringrealShow(JNIEnv *env, jclass obj){     return (*env)-> NewStringUTF(env,“10086”);}

步驟四:

執行RegisterNatives(),注冊與指定類相關聯的方法

static int registerNativeMethods(JNIEnv* env, const char* className,JNINativeMethod* gMethods, int numMethods){    jclass clazz;    clazz = (*env)->FindClass(env, className);    if (clazz == NULL) {        return JNI_FALSE;    }    if ((*env)->RegisterNatives(env, clazz, getMethods, numMethods) < 0) {        return JNI_FALSE;    }    return JNI_TRUE;}

步驟五:對指定的類進行指定方法名注冊,注冊成功則返回0,失敗為1。

static intregisterNatives(JNIEnv* env){if(!registerNativeMethods(env,JNIREG_CLASS,getMethods, sizeof(getMethods) /sizeof(getMethods[0]))){           return JNI_FALSE;}    return JNI_TRUE;}

 

步驟六:

在JNI_OnLoad中執行注冊操作

JNIEXPORT jintJNI_OnLoad(JavaVM* vm, void* reserved){    JNIEnv* env = NULL;jint result = -1;    if ((*vm)->GetEnv(vm,(void**) &env, JNI_VERSION_1_4) != JNI_OK) {//GetEnv()用以獲得一個JNIEnv全局對象        return -1;    }    assert(env != NULL);    if (!registerNatives(env)) {        return -1;    }    result = JNI_VERSION_1_4;    return result;}

構建成功之后,我們可以看到,在方法名索引表中找不到調用的函數名稱。只有找到自定的section區域才能進行下一步解析。

 

數據混淆

通常情況下,在.so庫中放置的是方法集合,但是如果存在文本內容時,就需要考慮數據混淆了,一旦使用聲明常量的方式設置文本數據,這些數據在使用過程中會被基本類型完整保存,這些數據在通過破解后,會直白的出現在破解者面前。這種設置讓匯編程序在進行地址指引時,指向的是一個數據源,而非指針地址時。如果我們對外提供文本數據時,對數據采取數組拼接的方式,指向數組獲得的是一個指針地址,這樣破解者看到的是地址標記而非直白的數據源。下面是兩組對比。

直接以文本形式輸出:

JNIEXPORT jstring JNICALLJava_com_example_xx_Test_showC(JNIEnv *env, jobject obj){      charsha[100];              nstrcpy(sha,H, A, C, E, J, F, NULL);      return(*env)-> NewStringUTF(env, sha);}

使用數組組合的形式:

JNIEXPORT jstring JNICALLJava_com_example_xx_Test_showB(JNIEnv *env, jobject obj){          char str[15];          str[0]= O[1];          str[1]= N[4];          str[2]= P[0];          str[3]= N[2];          str[4]= D[0];          str[5]= Q[0];          str[6]= Q[2];          str[7]= O[1];          str[8]= D[0];          str[9]= P[3];          str[10]= '/0';      return(*env)-> NewStringUTF(env, str);}

 

最后,說一下,其實沒有破解不了的保護,只有破解不了的人心,不管安全軟件機構如何宣傳,碰到有心人士也是無解,我們做開發的,只是在增加破解難度而已。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情久久久| 久久精品91久久香蕉加勒比| 欧美日韩国产区| 国产精品视频在线观看| 正在播放亚洲1区| 久久精品国产综合| 日韩中文字幕久久| 在线观看精品国产视频| 欧美综合国产精品久久丁香| 性欧美xxxx交| 欧美亚洲在线视频| 91av视频在线免费观看| 中文字幕在线国产精品| 黑人巨大精品欧美一区二区三区| 在线观看日韩www视频免费| 91亚洲人电影| 国产精品草莓在线免费观看| 九九久久久久99精品| 91欧美激情另类亚洲| 日本精品久久久久影院| 色婷婷亚洲mv天堂mv在影片| 欧美成人精品不卡视频在线观看| 中文字幕国产亚洲2019| 欧美中文字幕在线播放| 欧美中文字幕视频| 久久夜色精品国产欧美乱| 亚洲欧美一区二区精品久久久| xvideos国产精品| 日韩精品中文字幕有码专区| 一区二区三区高清国产| 亚洲色图国产精品| 性亚洲最疯狂xxxx高清| 高清日韩电视剧大全免费播放在线观看| 麻豆精品精华液| 在线观看91久久久久久| 国产精品视频久| 精品偷拍各种wc美女嘘嘘| 欧美日韩国产色| 欧美激情综合亚洲一二区| 欧美成人手机在线| 成人黄色av网| 久久久久久成人精品| 久久久久99精品久久久久| 欧美在线中文字幕| 亚洲精品永久免费精品| 亚洲成人动漫在线播放| 国产伊人精品在线| 在线精品播放av| 一区二区三区美女xx视频| 韩国欧美亚洲国产| 欧美激情一区二区三级高清视频| 7m第一福利500精品视频| 狠狠躁18三区二区一区| 国产亚洲视频在线观看| 精品亚洲永久免费精品| 亚洲a∨日韩av高清在线观看| 久久久久久综合网天天| 国产欧美久久一区二区| 日韩av综合网站| 成人精品视频99在线观看免费| 亚洲精品一区二区三区不| 国产精品偷伦免费视频观看的| 欧美亚洲在线视频| 日韩在线观看免费| 精品国产电影一区| 日韩成人激情在线| 欧美老女人bb| 亚洲欧美制服第一页| 久久久视频免费观看| 欧美性猛交99久久久久99按摩| 亚洲精品黄网在线观看| 在线成人中文字幕| 欧美日韩xxxxx| 成人国产在线激情| 欧美日韩中文在线观看| 欧美亚洲国产日韩2020| 国产精品大陆在线观看| 亚洲国产精品国自产拍av秋霞| 国产人妖伪娘一区91| 97精品视频在线播放| 国产欧美日韩中文| 日韩在线观看免费全集电视剧网站| 色av吧综合网| 日韩一区二区久久久| 亚洲第一天堂av| 欧美乱大交做爰xxxⅹ性3| 亚洲精品一区二区网址| 色综合久综合久久综合久鬼88| 国产欧美一区二区三区在线看| 秋霞午夜一区二区| 成人乱人伦精品视频在线观看| 国产免费一区二区三区在线能观看| 国产精品亚洲视频在线观看| 米奇精品一区二区三区在线观看| 亚洲视频电影图片偷拍一区| 日韩国产一区三区| 国产精品高精视频免费| 大桥未久av一区二区三区| 久久久精品视频成人| 国外日韩电影在线观看| 色爱精品视频一区| 国产精品最新在线观看| 久久偷看各类女兵18女厕嘘嘘| 国产精品永久免费| 欧美性xxxx极品hd欧美风情| 欧美另类极品videosbest最新版本| 欧美午夜激情小视频| 亚洲加勒比久久88色综合| 97视频在线看| 国产成人精品综合| 国产精品久久久久久av福利| 亚洲最大福利视频网| 亚洲欧美日韩爽爽影院| 精品亚洲男同gayvideo网站| 疯狂蹂躏欧美一区二区精品| 日韩欧美在线免费观看| 亚洲大胆人体在线| 国产亚洲一区二区精品| 久久av中文字幕| 日韩女优人人人人射在线视频| 亚洲人成在线免费观看| 欧美性猛交xxxxx免费看| 精品国产拍在线观看| 欧美性猛交xxxx乱大交| 亚洲国产成人精品一区二区| 一区二区三区国产视频| 欧美精品在线观看91| 精品国产一区二区三区久久| 中文字幕亚洲欧美日韩2019| 在线视频免费一区二区| 欧美激情高清视频| 日本午夜在线亚洲.国产| 午夜精品三级视频福利| 在线观看日韩专区| 国产精品久久久久久亚洲影视| 国内精品久久久久影院优| 日韩中文字幕免费| 中文字幕av日韩| 精品国产精品三级精品av网址| 欧美成人久久久| 精品高清一区二区三区| 57pao成人永久免费视频| 国产亚洲精品久久久久久牛牛| 亚洲日本中文字幕免费在线不卡| 日韩福利视频在线观看| 久久久久久综合网天天| 国产精品高清在线观看| 久久久久久久久久久免费| 国产欧美韩国高清| 欧美日本高清一区| 亚洲激情视频网| 久久天堂电影网| 丝袜情趣国产精品| 色哟哟网站入口亚洲精品| 亚洲人永久免费| 欧美性受xxxx白人性爽| 精品美女永久免费视频| 亚洲欧洲日产国产网站| 久久精品最新地址| 久久精品国产亚洲精品| 伊人伊成久久人综合网站| 亚洲精品欧美极品| 欧美亚洲日本网站| 日韩av电影中文字幕|