(一)背景

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

(二)常见的反编译工具

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

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

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

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

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

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

(三)实战

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

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

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

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

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

反编译后的代码结构:由于代码进行了混淆所以可以看到smali文件夹下面有一些名称奇怪的文件。(Smali,Baksmali分别是指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,改下付款地址,还是比较爽的。

五、反编译防护技术

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

5.1 伪加密

APK在PC上面就被看作一个压缩格式文件,在手机上面它就算一个可执行格式文件。两种格式对它的读取要求也有区别,所以说利用这个区别来实现伪加密。对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感兴趣的同学可以看看。

APK反编译及防护技术相关推荐

  1. Android的APK反编译技术

    Android的APK反编译主要由反编译源码以及反编译资源两部分,第一种方法用来学习别人优秀的代码,第二种方法可以反编译做汉化或其它一些有用的用途(这个你懂的).        想要反编译,那相应的工 ...

  2. Android APK反编译就这么简单 详解(图文详解)

    前言 自己很早以前就在反编译,但是知道今天要做才又捡起来了,今天就把他记录下来吧. 工具准备 1.测试环境: win10 2.使用工具: 2.1 CSDN上下载地址: apktool dex2jar ...

  3. APK反编译得工具总结(转载)

    Android反编译技术总结 转自UncleChen's Blog,作者:UncleChen 一.Apk反编译工具及其使用方法 1.原理 学习反编译之前,建议先学习一下Apk打包的过程,明白打包完成后 ...

  4. Android APK反编译及逆向工程

    一. 分析已经打好的apk. 首先来简单的说明下Apk文件本质上其实是一个zip包.我们直接进行解压就能看到其中的目录. 1. 目录说明 AndroidManifest.xml:应用的全局配置文件 c ...

  5. APK反编译学习心得

    Apk反编译之后,我们就可以看到开发这个应用使用的资源文件(图片).layout.样式.相关的实现代码等,apk反编译也算是Android开发中一个比较实用的技巧吧,当我们对别人开发好的应用感兴趣时, ...

  6. mono桌面应用移到android,从原生APK反编译,拿到界面,用于mono for android

    从原生APK反编译,拿到界面,用于mono for android 1.用apktool反编译apk,得到xxx.apk.de 2.从xxx.apk.de\res\layout 3.复制所有xml到M ...

  7. Android APK反编译

    转自:http://blog.csdn.net/ithomer/article/details/6727581 一.Apk反编译得到Java源代码 下载上述反编译工具包,打开apk2java目录下的d ...

  8. 【转】Android APK反编译就这么简单 详解(附图)

     转自:http://blog.csdn.net/vipzjyno1/article/details/21039349/ [置顶] Android APK反编译就这么简单 详解(附图) 分类: and ...

  9. Android APK反编译具体解释(附图)

    这段时间在学Android应用开发,在想既然是用Java开发的应该非常好反编译从而得到源码吧,google了一下,确实非常easy,下面是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的 ...

最新文章

  1. 转图像偏微分方程不适定问题
  2. maven 打包时缺少文件_(三)Java资源文件和路径相关扫盲
  3. HTTP协议之:HTTP/1.1和HTTP/2
  4. ueditor如何设置上传图片的高度宽度_怎么设置天猫主图
  5. Head First设计模式读书笔记八 第九章上 迭代器模式
  6. java发送post请求json格式_go语言web开发框架学习系列二:Get、Post、Put等请求及数据返回格式...
  7. 【5分钟 Paper】Dueling Network Architectures for Deep Reinforcement Learning
  8. 电子签名,后疫情时代“智慧校园”创新新方向
  9. Android设计UI界面
  10. 闲时整理3--Android调用指纹验证
  11. Aruba无线AP入坑心得
  12. python0.1+0.2不等于0.3_为什么计算机编程语言中:0.1+0.2不等于0.3
  13. 协方差矩阵、大数定律、牛顿迭代法
  14. 王逸凡的十万个为什么
  15. 培养气质的98个好习惯
  16. 个性化测试学生评测软件,学生综合素质测评软件定制开发方案
  17. 【手把手】RPA机器人商城应用:工资单发送机器人
  18. 企业微信标准应用服务商入门考试--2021
  19. 转自何海涛 编程面试的五个要点
  20. ArcGIS API for Silverlight部署本地地图服务

热门文章

  1. 马尔代夫还是欧洲四国,这不是问题。
  2. html 表格 自动宽度和高度,HTML表格标记教程(3):宽度和高度属性WIDTH、HEIGHT
  3. 超燃!用友大易走进晨光,探索人才管理创新之道
  4. 蓝桥杯十大常见天阶功法——音之呼吸.肆之型.模拟
  5. MonacoEditor编辑器自动格式代码
  6. 梅赛德斯-奔驰在上海车展发布EQG概念车
  7. Vivido添加pynq-Z2开发板
  8. 林元庆, 百度深度学习实验室(IDL)主任, Baidu
  9. Java中级面试题及答案整理
  10. Bigemap Gis Office软件 如何添加在线第三方地图