APK反编译及防护技术

来源:互联网 发布:淘宝上怎么买身份证 编辑:程序博客网 时间:2024/05/29 08:35

(一)背景

Android APK安全已经是当前安全测试关注的重点,尤其是在互联网公司,很多系统涉及政务信息与支付的,安全问题更是需要重点关注。Android端的项目越来越多,面临的安全问题也很多。本文我们主要一些android反编译与防护技术方法。


(二)常见的反编译工具

下面我们一看看有哪些常见的Android APK反编译工具:

 

Apktools轻松松反编译apk,解析出资源文件,xml文件,生成smali文件,还可以把修改后的文件打包生成apkApktools是老牌的apk反编译工具,同时也是其它反编译工具的核心组件,可以通过命令行方式调用。


dex2jarapk中的dex文件转换成为jar文件,很多人不会看smali文件,还是看java类文件比较舒服,这个时候可以借助这个工具来转成java,也是支持windows,linux,mac。命令行方式调用。


APKMulti-Too:集成反编译重编译重签名一体的综合工具,最后一个版本是2012年的有点老了,命令行方式调用。


ApkIDE(中文名称为apk改之理):集成了apktooldex2jarsignapk.jarjd-gui等工具,界面操作,比较人性化,可以修改打包重新生成apk


Android killer :是一款可视化的安卓应用逆向工具,集Apk反编译apktoolApk打包、Apk签名,编码互转,ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一身,支持logcat日志输出,语法高亮,基于关键字(支持单行代码或多行代码段)项目内搜索。推荐使用。


(三)实战

下面我们来看看如何反编译一个APK

直接通过Android killer打开反编译的对象APK就可以了。上图

 

(图一)Android killer正在反编译的APK



(图二)Android killer查看反编译的APK Smali源码


可以看出Androidkiller反编译还是在调用 apktooldex2jar这两款工具。


反编译后的代码结构:由于代码进行了混淆所以可以看到smali文件夹下面有一些名称奇怪的文件。(SmaliBaksmali分别是指Android系统里的Java虚拟机Dalvik所使用的一种。dex格式文件的汇编器,反汇编器。其语法是一种宽松式的Jasmin/dedexer语法,而且它实现了.dex格式所有功能【注解,调试信息,线路信息等】)。


Smali语法对于非专业人士来说,还是稍微晦涩了一点,我们可以使用通过jd-gui查看该文件的源码:



(图三)通过jd-gui查看反编译的APK java源码


(四)反编译带来的安全问题

4.1 工程资源与源码可能会泄露

例如对demo.apk进行反编译,可以清楚地看到工程文件的源码如下:



(图四)泄露的工程源码

 


(图五)泄露的APK布局文件

 

这是布局layout文件,看起来还是很清楚的。抄一下应该很容易。



(图六)变量的泄露

 

APK字符变量什么的替换一下,还是很好找的。

 

4.2 敏感的信息会暴露(接口、加解密的密钥)

比如,对于一个APK我们可以通过接口抓包,然后全文搜索下反编译后的工程,就知道接口是怎么进行访问,加解密的算法如果放在JAVA层,看下代码逻辑就不难猜出。在SO层相对比较安全,但是也不是万能的,还是存在破解的风险。


4.3 APK被伪造

被伪造是指反编译下APK修改下想要改的地方,重新打包APK发到应用市场,然后别人下载使用。修改的人就可以获得一些应该输入开发者的收益。投入少,产出高。这是目前很多人喜欢干的活,尤其是一些小说、游戏、阅读类的APK,改下付款地址,还是比较爽的。

 

五、反编译防护技术

感觉AndroidAPK的安全问题还是挺多了,防护的切入点是让别人不能轻易的进行反编译。反编译后暴露的问题太多了,防不胜防。


5.1 伪加密

APKPC上面就被看作一个压缩格式文件,在手机上面它就算一个可执行格式文件。两种格式对它的读取要求也有区别,所以说利用这个区别来实现伪加密。对PC端来讲伪加密的APK没法被解包无法被反编译,但是对android系统来说它完全不会影响正常的安装运行(4.2以前的系统)。所以说伪加密能够100%防止PC端解包、查看而又不影响软件在手机上面的正常运行。


伪加密的实现原理:读取APK的字节,找到连续4位字节标记为”P K 0102”的后第5位字节,如果是0表示不加密,如果是1就表示加密(伪加密就强行改成1  反伪加密就是把1改成0就可以了)。

 

伪加密存在的问题:

1、不能兼容android 4.2以上的系统了。

2、加密后应用市场不能检查包里面的内容,估计会那啥不让通过的。

    

5.2 加固

对于移动应用开发工程师来说,使用自动化加固无疑是最便捷的一种安全方式了。通过加固可以在一定程度上达到反编译和防止被二次打包的效果。加固的原理是APK代码和资源文件进行较复杂的混淆与加密。目前阿里、360、腾讯等都提供了这种加固的服务。相关服务的连接如下:


1.360加固保链接:http://jiagu.360.cn/

2.阿里聚安全链接:http://jaq.alibaba.com/

3.腾讯云应用乐固链接:https://www.qcloud.com/product/cr.html

4.梆梆安全链接:http://www.bangcle.com/

5.通付盾移动安全云链接:http://www.appfortify.cn/pc-index.html

 

互联网上已经有人对加固的使用情况进行了详细的分析:http://mt.sohu.com/20160704/n457751212.shtml感兴趣的同学可以看看。