Andorid的APK包加固及相关安全调整

目录

1、代码混淆

2、禁止反编译

2.1 在线加固

2.2 重新签名apk

2.3 梆梆加固

3、禁用数据备份

参考文献:


已经不做安卓开发有几年时间了,前两天之前写的一个webview的壳子被客户那边的安全扫描软件扫到几个漏洞。在网上查了一些解决方案,这些记录下来。

1、代码混淆

修改build.gradle文件中的minifyEnabled=true开启代码混淆,如下:

然后修改proguard-rules.pro这个文件,默认这个文件是空的。写入如下内容:

#1.基本指令区
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-ignorewarning
-printmapping proguardMapping.txt
-optimizations !code/simplification/cast,!field/*,!class/merging/*
-keepattributes *Annotation*,InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable


#2.默认保留区
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class * extends android.view.View
-keep public class com.android.vending.licensing.ILicensingService
-keep class android.support.** {*;}


-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclassmembers class * extends android.app.Activity{
    public void *(android.view.View);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep public class * extends android.view.View{
    *** get*();
    void set*(***);
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}
-keep class **.R$* {
*;
}
-keepclassmembers class * {
    void *(**On*Event);
}


#3.webview
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
   public *;
}
-keepclassmembers class * extends android.webkit.webViewClient {
    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
    public boolean *(android.webkit.WebView, java.lang.String);
}
-keepclassmembers class * extends android.webkit.webViewClient {
    public void *(android.webkit.webView, jav.lang.String);
}

#上面部分都是通用的,下面是自己的
#libary包下的js的接口方法不混淆
-keep class jingu.com.jingu.libary.** { *; }
#第三方引入的库不混淆,对于xutils来说,很多博客都是下面两句,但其实只需要最后一句即可,不然bulid的时候会失败,因为-libraryjars已经引入过,这里不需要再引入
#-libraryjars libs/xUtils-2.6.14.jar
-keep class com.lidroid.** { *; }

2、禁止反编译

这个网上有比较多的在线加固的平台,像梆梆、腾讯云移动应用加密等等,我这里使用腾讯云的加固,有界面化,很方便

2.1 在线加固

入口url:https://cloud.tencent.com/login,可以使用微信或者QQ直接登录,登录成功后,搜索移动应用安全,进入如下页面:

 
上传自己的apk包,按照提示进行加固即可。 

2.2 重新签名apk

加固后的apk文件需要重新进行签名操作,可以直接使用命令的方式进行签名。命令行方式对apk进行签名操作,命令如下:

jarsigner -verbose -keystore android.keystore -signedjar app-r3-sgin.apk app-r3.apk android.keystore

app-r3-sgin.apk 是签名后文件名,app-r3.apk是待签名的文件,android.keystore是签名文件。

将签名文件和apk包放到同一个目录,然后cmd命令行切到这个目录,直接执行上面的命令。 正常情况下,会让输入密码。然后就开始签名了。 偶尔会出现如下异常提示,一般不用管。 

2.3 梆梆加固

有些安全扫描工具对于腾讯云的安全加固扫描不出来,所以还是会提示没有进行加固,可以尝试使用梆梆加固

注册账号,登陆成功之后,添加应用,然后在线加固即可,加固完成之后,下载应用,按照章节2.2重新进行apk的签名操作。最方便的是下载梆梆助手,通过这个工具直接进行加密,并导出重新签名的应用,然后去发布即可。 梆梆助手的下载地址为:https://dev.bangcle.com/home/download

 

3、禁用数据备份

Android 2.1以上的系统可为App提供应用程序数据的备份和恢复功能,该由AndroidMainfest.xml文件中的allowBackup属性值控制,其默认值为true。利用此类信息攻击者可伪造用户身份,盗取用户账户资产,或者直接对服务器发起攻击。当该属性没有显式设置为false时,攻击者可通过adb backup和adb restore对App的应用数据进行备份和恢复,从而可能获取明文存储的用户敏感信息,如用户的密码、证件号、手机号、交易密码、身份令牌、服务器通信记录等。

将allowBackup的属性显式设置为false,以关闭应用数据备份功能;或者使用具有本地数据加密功能的第三方专业加固方案,避免本地数据泄露。修改 AndroidManifest.xml文件,如下:

添加红框标注的两行。 

 

参考文献:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值