背景
很多公司版本功能趋于稳定后,产品开始提出对apk的安全性提出一些要求,进行安全检测,混淆已经不能满足这些安全需求,下图是我们公司apk安全检测报告。
准备工作:
1.安装apktool
以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反编译会报错。
网友评论