Android apk加固

背景

很多公司版本功能趋于稳定后,产品开始提出对apk的安全性提出一些要求,进行安全检测,混淆已经不能满足这些安全需求,下图是我们公司apk安全检测报告。

准备工作:

1.安装apktool

参考文档:Apktool - How to Install

以Mac os 为例,首先下载 https://bitbucket.org/iBotPeaches/apktool/downloads,选择一个版本下载,讲下载的文件修改名字为apktool.jar。

然后下载https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/osx/apktool,存储并命名为apktool(不能是文本)。

把apktool和apktool.jar文件移动到"/usr/local/bin"目录下,并使用终端命令为两个文件增加执行权限,命令如下:

cp apktool.jar apktool /usr/local/bin  

chmod +x /usr/local/bin apktool.jar apktool


最后终端执行验证命令:apktool,得到版本号即为成功。


2. IDAProv6.8

链接:https://pan.baidu.com/s/1j_qh4Kv9CBcJEDXEd9QPHw 密码:bxqn

3.重签名工具

重签名工具有很多,以mac为例,使用的是jarsigner

链接:https://pan.baidu.com/s/1DAK_qccmAs_HrtwQIpMNDg 密码:w3k1

使用方法:jarsigner -verbose -keystore [您的私钥存放路径] -signedjar [签名后文件存放路径] [未签名的文件路径] [您的证书名称]

jarsigner-verbose-keystore /Downloads/mykeystore -signedjar /signed.apk /unsigned.apk keyAlias     


解决步骤

1.添加花指令:在Android项目添加一个永不能执行到class;如下。也可以通过proguard-android.txt配置文件配置需要保留的class。参考https://developer.android.com/studio/build/shrink-code.html

测试示例:

package com.example.oscar.oscarapp;

/** * Created by oscar on 2017-11-06. */

import android.support.annotation.Keep;

@Keep //混淆代码时保留完整class代码

public class BadCode {

public void sCode(){

    System.out.println("111111");

    System.out.println("111111");

    System.out.println("222222");

    System.out.println("222222");

} }

2、通过Android Studio 进行编译打包apk。生成包是经过代码混淆的。

3、通过IDAProv6.8。反编译apk里的classes.dex文件,找到BadCode class函数执行入口地址。

4、通过C32Asm 使用十六进制打开 classes.dex文件,按快捷键“Ctrl + G”,定位到BadCode class函数执行入口地址 改为“12 01 38 01 03 00 FF FF 00 00 00 00 00 00” 并保存

5、把修改后的dex文件拖入DexFixer进行修复

6、把修复后的dex文件覆盖apk原有的dex文件,删除META-INF签名文件,使用签名工具对apk重新签名

7、至此,混淆与加壳都已完成,并可以使用Android手机进行安装。用dex2jar-0.0.9.15反编译会报错。

你可能感兴趣的:(Android apk加固)