2015-11-11 51 views
0

我正在逆向工程Android應用程序。 問題是,我沒有太多有關Android內部的經驗,所有我的rev-eng技能都與x86實踐有關。 應用程序的APK包含兩個本地庫(lib ... so),兩個中更有趣的一個被加密(沒有ELF頭,沒有GCC簽名等)。 希望在應用程序正在使用時將其解密,我將它安裝在根用戶平板電腦上,只發現/data/app-lib/com.[appname]/lib[something].so也被加密(.so文件與APK內的文件相同),即使該應用程序正在被使用! 我猜測,當應用程序加載此本機庫時,必須進行某種透明解密。Android上的本機共享庫(.so)看起來已加密 - 如何獲取它?

它是JNI的某種內置功能嗎?如果沒有,那該怎麼實現? 如何在加載這個庫的過程中捕捉應用程序,因爲我理解ld-linux必須看到一個普通的ELF樣式庫,否則它會失敗。

+0

它是否被proguard特徵混淆了,也許? – ecle

回答

0

lib[something].so這個伎倆既舊又簡單。這是在安裝時將您的APK中的任何BLOB解壓縮爲只讀文件的一種方法。它可能是一些不可執行的數據(加密或不加密)。

另一方面,我不排除文件真的是加密庫的可能性。一些定製的解密機制會讀取它並在其他地方寫入輸出。解密的庫可以從文件系統上的任何位置(包括「外部存儲器」)被編輯(來自Java),或者可以被編碼爲System.loaddlopen。即使文件名也可能沒有lib.so的痕跡。