Android应用安全:实现apk加固:代码、资源、so全加密隐藏。防标记,防报毒,防篡改,防破解,防逆向。批量自动改包,自动打包。附免费加固工具。 |
您所在的位置:网站首页 › 安卓应用路径隐藏了怎么找 › Android应用安全:实现apk加固:代码、资源、so全加密隐藏。防标记,防报毒,防篡改,防破解,防逆向。批量自动改包,自动打包。附免费加固工具。 |
0.工具最终效果
0.1.可自动批量循环改包
改包包括:自动换包名(可选),自动改类,清单处理等 使用场景:原包为母包,争取处理出来的包没有容易被标记的地方 0.2.可自动批量循环加固,改包后自动加固使用场景:原包为母包,争取处理出来的包每个包都不一样 0.3 改包加固效果原包代码不可见,原包so不可见,原包assets不可见,原包resource不可见 每次加固结果,代码,so,assets,代码运行逻辑都不一样. 安全性增加,签名校验,运行环境检测. 0.4防标记,防报毒对原android工程,进行下列操作(工具里支持一键自动) 自动混淆类名和方法名 自动生成不会垃圾类垃圾代码, 自动插入运行垃圾代码, 自动插入生成不会运行的垃圾方法, 每次代码运行逻辑不一样. 这样生成的包差异性就会很大.再进行加固,就会非常安全和唯一了 1.为什么做加固因为不想辛辛苦苦做的东西,被别人拿去改成各种版,半路摘我的桃子。 所以需要将原包的一些核心东西进行加密影藏。 市面上比较好的解决方案就是进行加固,能提升apk安全性。 2.怎么加固 2.1 简单的加固三方加固,有些三方会有免费版本的加固服务 比如 腾讯加固 免费版简易加固,只进行了代码加密影藏,资源和so库都没有处理 2.2 深度复杂加固,为啥要深度复杂加固呢,因为三方的免费版的简单加固只会对代码进行加固,资源和so库还是一目了然的放在那里。 如果想将资源和so库加固,可以使用三方付费版, 当然也可以自己做 为啥要自己做呢? 因为贵啊,n * W/年/APP,一个应用一年就要几万。 3.自己做加固花了些时间,参考各种资料,实现了代APP深度加固。 实现效果: 代码加密隐藏:原包代码加密隐藏不可见。 资源加密隐藏:原包资源加密隐藏不可见,包括res下和assets下的资源。当然,清单文件引用的资源无法隐藏。 so库加密隐藏:原包so库加密隐藏不可见。 3.1 主要原理 3.1.1 代码加固Android能够使用apk文件或dex文件动态加载Classloader 实现原理:将代码dex加密,使用时解密,然后加载成Classloader使用。 /** * 将dex注入dexElements数组中 * @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,开发者能使用apk路径加载成resource 实现原理:将资源apk加密,使用时解密,然后加载成Resource使用 private Resources preloadResource(Context context, String apkFilePath) { try { Class 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库加固实现原理:将so加密,使用时解密。需要动态替换应用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 整体实现将真实的apk(子包)进行加密,壳包启动时,动态根据子包apk解密,加载出Classloader和Resource,并获得so路径(可以将so库单独抽出来) 将系统的Classloader,Resource,so路径替换为生成的。 4 总结目前已实现,并在多个包上使用这套技术。 5 加固工具应用安全工具 使用方法:1.打开工具,账号设置,注册账号(注,注册的新账号为测试账号,加固的包有运行时效限制,勿正式发布) 2.点击选择需要加固的包(路径不能包含空格等特殊字符) 3.没有签名就勾选自动签名 点击 begin 会出现加载图片卡死的现象,别着急,这是在进行加固。静静等待即可。 mac打开App遇到恶意软件的处理方式1.下载打开压缩包. 2.双击加固App,Apple会提示"无法打开,恶意软件字样" 3.打开电脑系统设置-隐私与安全性-安全性:会有刚才打开软件的提示,点击仍然打开就行. App环境部署.App需要Python3 和 openjdk的环境, 如果电脑已经装好,可以直接使用,如果没有,可以安装. 上述下载地址的百度网盘下载地址,里面有我使用的jdk版本,可以下载使用. 上述下载地址的百度网盘下载地址,里面有apk查看工具,可以查看对比加固前后apk的信息. 6 联系作者期待你的点赞和关注!如有疑问,联系作者。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |