0.工具最終效果
0.1.可自動(dòng)批量循環(huán)改包
改包包括:自動(dòng)換包名(可選),自動(dòng)改類(lèi),清單處理等
使用場(chǎng)景:原包為母包,爭(zhēng)取處理出來(lái)的包沒(méi)有容易被標(biāo)記的地方
0.2.可自動(dòng)批量循環(huán)加固,改包后自動(dòng)加固
使用場(chǎng)景:原包為母包,爭(zhēng)取處理出來(lái)的包每個(gè)包都不一樣
0.3 改包加固效果
原包代碼不可見(jiàn),原包so不可見(jiàn),原包assets不可見(jiàn),原包resource不可見(jiàn)
每次加固結(jié)果,代碼,so,assets,代碼運(yùn)行邏輯都不一樣.
安全性增加,簽名校驗(yàn),運(yùn)行環(huán)境檢測(cè).
0.4防標(biāo)記,防報(bào)毒
對(duì)原android工程,進(jìn)行下列操作(工具里支持一鍵自動(dòng))
自動(dòng)混淆類(lèi)名和方法名
自動(dòng)生成不會(huì)垃圾類(lèi)垃圾代碼,
自動(dòng)插入運(yùn)行垃圾代碼,
自動(dòng)插入生成不會(huì)運(yùn)行的垃圾方法,
每次代碼運(yùn)行邏輯不一樣.
這樣生成的包差異性就會(huì)很大.再進(jìn)行加固,就會(huì)非常安全和唯一了
1.為什么做加固
因?yàn)椴幌胄列量嗫嘧龅臇|西,被別人拿去改成各種版,半路摘我的桃子。
所以需要將原包的一些核心東西進(jìn)行加密影藏。
市面上比較好的解決方案就是進(jìn)行加固,能提升apk安全性。
2.怎么加固
2.1 簡(jiǎn)單的加固
三方加固,有些三方會(huì)有免費(fèi)版本的加固服務(wù)
比如 騰訊加固
免費(fèi)版簡(jiǎn)易加固,只進(jìn)行了代碼加密影藏,資源和so庫(kù)都沒(méi)有處理
2.2 深度復(fù)雜加固,
為啥要深度復(fù)雜加固呢,因?yàn)槿降拿赓M(fèi)版的簡(jiǎn)單加固只會(huì)對(duì)代碼進(jìn)行加固,資源和so庫(kù)還是一目了然的放在那里。
如果想將資源和so庫(kù)加固,可以使用三方付費(fèi)版,
當(dāng)然也可以自己做
為啥要自己做呢?
因?yàn)橘F啊,n * W/年/APP,一個(gè)應(yīng)用一年就要幾萬(wàn)。
3.自己做加固
花了些時(shí)間,參考各種資料,實(shí)現(xiàn)了代APP深度加固。
實(shí)現(xiàn)效果:
代碼加密隱藏:原包代碼加密隱藏不可見(jiàn)。
資源加密隱藏:原包資源加密隱藏不可見(jiàn),包括res下和assets下的資源。當(dāng)然,清單文件引用的資源無(wú)法隱藏。
so庫(kù)加密隱藏:原包so庫(kù)加密隱藏不可見(jiàn)。
3.1 主要原理
3.1.1 代碼加固
Android能夠使用apk文件或dex文件動(dòng)態(tài)加載Classloader
實(shí)現(xiàn)原理:將代碼dex加密,使用時(shí)解密,然后加載成Classloader使用。
/**
* 將dex注入dexElements數(shù)組中
* @param context
* @param str
* @throws ClassNotFoundException
* @throws NoSuchFieldException
* @throws IllegalAccessException
*/
public static void changeAppClassLoader(Context context, String str) throws Throwable {
PathClassLoader pathClassLoader = (PathClassLoader) context.getClassLoader();
PathClassLoader classLoader = new PathClassLoader(str,null,context.getClassLoader());
Object a = combineArray(getDexElements(getPathList(pathClassLoader)), getDexElements(getPathList(classLoader)));
Object a2 = getPathList(pathClassLoader);
setField(a2, a2.getClass(), "dexElements", a);
}
3.1.2 資源加固
Android同樣提供了api,開(kāi)發(fā)者能使用apk路徑加載成resource
實(shí)現(xiàn)原理:將資源apk加密,使用時(shí)解密,然后加載成Resource使用
private Resources preloadResource(Context context, String apkFilePath) {
try {
Class<? extends AssetManager> AssetManagerClass = AssetManager.class;
AssetManager assetManager = AssetManagerClass.newInstance();
@SuppressLint("DiscouragedPrivateApi")
Method addAssetPathMethod = AssetManagerClass.getDeclaredMethod("addAssetPath", String.class);
addAssetPathMethod.setAccessible(true);
addAssetPathMethod.invoke(assetManager, apkFilePath);
Resources baseResources = new Resources(assetManager, context.getResources().getDisplayMetrics(), context.getResources().getConfiguration());
return baseResources;
} catch (Throwable e) {
}
return null;
}
3.1.3 so庫(kù)加固
實(shí)現(xiàn)原理:將so加密,使用時(shí)解密。需要?jiǎng)討B(tài)替換應(yīng)用so路徑為解密后的so路徑
private void changeFilePath(Context context, String newSoPath) {
try {
Class<?> contextImplClass = classNamefor("android.app.ContextImpl");
Class<?> loadedApkClass = classNamefor("android.app.LoadedApk");
Object mPackageInfo = getFieldValue(contextImplClass, "mPackageInfo", context);
ApplicationInfo mApplicationInfo = null;
mApplicationInfo = (ApplicationInfo) getFieldValue(loadedApkClass, "mApplicationInfo", mPackageInfo);
mApplicationInfo.nativeLibraryDir = newSoPath;
} catch (Throwable emApplicationInfo) {
}
}
3.2 整體實(shí)現(xiàn)
將真實(shí)的apk(子包)進(jìn)行加密,殼包啟動(dòng)時(shí),動(dòng)態(tài)根據(jù)子包apk解密,加載出Classloader和Resource,并獲得so路徑(可以將so庫(kù)單獨(dú)抽出來(lái))
將系統(tǒng)的Classloader,Resource,so路徑替換為生成的。
4 總結(jié)
目前已實(shí)現(xiàn),并在多個(gè)包上使用這套技術(shù)。
5 加固工具
自定義加固工具-Mac版-下載地址-下載速度快
自定義加固工具-Mac本地版-百度網(wǎng)盤(pán)下載地址-下載速度看是否有會(huì)員
本地軟件版,不會(huì)上傳原包任何信息至服務(wù)器,本地處理。提供自動(dòng)化腳本調(diào)用。
使用方法:
1.打開(kāi)工具,賬號(hào)設(shè)置,注冊(cè)賬號(hào)(注,注冊(cè)的新賬號(hào)為測(cè)試賬號(hào),加固的包有運(yùn)行時(shí)效限制,勿正式發(fā)布)
2.點(diǎn)擊選擇需要加固的包(路徑不能包含空格等特殊字符)
3.沒(méi)有簽名就勾選自動(dòng)簽名
點(diǎn)擊 begin 會(huì)出現(xiàn)加載圖片卡死的現(xiàn)象,別著急,這是在進(jìn)行加固。靜靜等待即可。
mac打開(kāi)App遇到惡意軟件的處理方式
1.下載打開(kāi)壓縮包.
2.雙擊加固App,Apple會(huì)提示"無(wú)法打開(kāi),惡意軟件字樣"
3.打開(kāi)電腦系統(tǒng)設(shè)置-隱私與安全性-安全性:會(huì)有剛才打開(kāi)軟件的提示,點(diǎn)擊仍然打開(kāi)就行.
App環(huán)境部署.
App需要Python3 和 openjdk的環(huán)境,
如果電腦已經(jīng)裝好,可以直接使用,如果沒(méi)有,可以安裝.
上述下載地址的百度網(wǎng)盤(pán)下載地址,里面有我使用的jdk版本,可以下載使用.
上述下載地址的百度網(wǎng)盤(pán)下載地址,里面有apk查看工具,可以查看對(duì)比加固前后apk的信息.文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-484097.html
6 聯(lián)系作者
期待你的點(diǎn)贊和關(guān)注!如有疑問(wèn),聯(lián)系作者。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-484097.html
到了這里,關(guān)于實(shí)現(xiàn)Android APK加固:代碼加密隱藏、資源加密隱藏、so庫(kù)加密隱藏。兼容unity引擎。附加固工具鏈接。的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!