十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
加固的过程中需要三个对象:1、需要加密的Apk(源Apk)2、壳程序Apk(负责解密Apk工作)3、加密工具(将源Apk进行加密和壳Dex合并成新的Dex)主要步骤:我们拿到需要加密的Apk和自己的壳程序Apk,然后用加密算法对源Apk进行加密在将壳Apk进行合并得到新的Dex文件,最后替换壳程序中的dex文件即可,得到新的Apk,那么这个新的Apk我们也叫作脱壳程序Apk.他已经不是一个完整意义上的Apk程序了,他的主要工作是:负责解密源Apk.然后加载Apk,让其正常运行起来。
成都创新互联公司-成都网站建设公司,专注成都网站设计、做网站、成都外贸网站建设公司、网站营销推广,域名注册,虚拟主机,网站托管运营有关企业网站制作方案、改版、费用等问题,请联系成都创新互联公司。
APK加固是对APK代码逻辑的一种保护,原理是将APK文件进行某种形式的转换,包括不限于隐藏、混淆、加等操作,进一步保护软件的利益不受损坏。
常见APK应用加固主要有DEX文件、SDK文件、SO文件加固这三类。DEX加固技术包括混淆代码、整体DEX加固、拆分DEX加固、虚拟机加固、Java2C加固,当前性能最强的加固方案是Java2c,将java指令转成c/c++指令,并做虚假控制流、字符串加密等处理,逆向难度最高。SO库文件一般存放着核心算法、重要协议等重要信息。SO加固大概可以分为有源保护和无源保护,有源保护分为自解密、混淆、源码VMP等,无源保护分为加壳、VMP保护。
APK加固后,可以降低被逆向破解风险,目前有些云安全平台提供系统的APP加固服务,如网易易盾、360加固、阿里云等,想要系统提升APK安全等级可以了解下。
上个月公司一个项目突然要找第三方进行安全漏洞的检测,于是打包了一个apk文件,发到第三方结构进行了安全检测,这项目我入职前就已经快完成的阶段,我后面基本是维护和小更新.比较坑的是之前的哥们连混淆都没有,更不要说加固了,最后扫出了30多个漏洞,看到检测报告都懵逼了.
自己对混淆和加固之前也只是知道皮毛没有深究,这次修复漏洞踩了不少坑,都是边上网搜资料边踩坑,总算搞定了,写出来防止后人踩坑 ,这里主要讲加固签名的坑,混淆这里不说了(自己对混淆还不熟)
很容易理解,ture是已签名,false是未签名,都为true的话说明v1,v2都成功签名了.
然后把两个md5的值进行比对,如果一致说明你的签名没用错秘钥 - -||
4.手动进行签名操作:
java -jar apksigner.jar sign --ks /Users/xxxx/Desktop/key.jks --ks-key-alias test --ks-pass pass: 123456 --key-pass pass: 123456 --out /Users/xxxx/Desktop/签名后的安装包.apk /Users/xxxx/Desktop/需要进行签名的安装包.apk
上面的命令会执行同时执行v1,v2签名
注意仔细看上的命令行:进了黑色加粗的文字需要替换成实际的信息
说个小插曲,我们的项目找的是一个规模很大的公司进行检测,开始用了网上的免费的加固工具加固拿去检测,别人拿去测试之后全部都脱壳了,说这种免费的加固安全没有保障,要用他们的加固服务可以解决,要收费..呵呵,因为项目比较特殊只能答应了,打包签名了apk,发到他们那边进行了加固后他们把apk发回来让我重新签名,签名后apk用不了,闪退....老板说别人大公司应该不会出现这种小问题,是我的问题.恩,自己也怀疑是我的错. 当天折腾到凌晨才下班,经历了上面的一顿折腾后发现v1,v2都签名了,并且md5值也没问题. 这时就有底气的去质问那家公司,最后发现是他们的加固出问题.
一般来说进行了上面的方法重新签名并且检查md5值没错,应该不会出问题了这时候可以去质疑一下加固方的问题.
github参考链接1
github参考链接2
先写这些记录一下,后面有需要再更新,有什么问题可以在下面留言讨论.
Gradle自定义插件
我们新建一个名为JiaguPlugin的Module
调整build.gradle为如下所示(这里我使用Kotlin开发)
创建一个JiaguPlugin类
然后创建resources目录并创建插件的配置文件
配置文件的内容如下:
1)创建一个扩展
这里我们创建的扩展名为jiagu,这个就好像app下build.gradle中的android扩展一样
我们扩展中的参数是JiaguParams中的参数
2)添加监听
添加一个读取完配置信息后的回调
然后我们先将我们的插件上传到Maven仓库,也就是执行插件build.gradle的这个Task,这里我上传到了项目下的Plugins文件夹下
然后我们在项目的build.gradle文件里引入
加固的任务类JiaguTask如下,这里的命令是参照文章开头360加固的help文件:
4)配置加固信息
我们在build.gradle文件中配置好我们的加固信息
5)进行加固
首先我们先make一下项目,生成apk文件