android apk 自我保护技术-加密apk
经过了忙碌的一周终于有时间静下来写点东西了,我们继续介绍android apk防止反编译技术的另一种方法。前两篇我们讲了加壳技术(http://my.oschina.net/u/2323218/blog/393372)和运行时修改字节码(http://my.oschina.net/u/2323218/blog/396203),如果有不明白的可以查看我的博客的前两篇中关于这两种技术的介绍。接下来我们将介绍另一种简单适用的防止apk反编译的技术-伪加密。
一、伪加密技术原理
我们知道android apk本质上是zip格式的压缩包,我们将android应用程序的后缀.apk改为.zip就可以用解压软件轻松的将android应用程序解压缩。在日常生活或者工作中,我们通常为了保护我们自己的文件在进行压缩式都会进行加密处理。这样的方法对于android apk同样适用。原理很简单,在zip的文件格式中有一个位用来标示该zip压缩文件中的文件是否被加密,我们只要找到该标志位将其置1就可以实现我们的目的。而android的包安装服务(PackageManagerService)在进行apk安装时并不关心这个加密位(暂时我们就这么叫它吧)可以进行正常的安装并且也不会影响apk的运行。
二、zip文件格式
zip的文件格式通常有三个部分组成:压缩文件源数据、压缩目录源数据、目录结束标识。这三个部分中和我们说的加密位有关的是压缩目录源数据部分,我们接下来详细介绍这一部分。
压缩目录源数据部分记录着所有的压缩目录源数据。其结构如下:
|
Central directory file header |
|||
|
Offset |
Bytes |
Description[18] |
译 |
|
0 |
4 |
Central directory file header signature =0x02014b50 |
核心目录文件header标识=(0x02014b50) |
|
4 |
2 |
Version made by |
压缩所用的pkware版本 |
|
6 |
2 |
Version needed to extract (minimum) |
解压所需pkware的最低版本 |
|
8 |
2 |
General purpose bit flag |
通用位标记 |
|
10 |
2 |
Compression method |
压缩方法 |
|
12 |
2 |
File last modification time |
文件最后修改时间 |
|
14 |
2 |
File last modification date |
文件最后修改日期 |
|
16 |
4 |
CRC-32 |
CRC-32算法 |
|
20 |
4 |
Compressed size |
压缩后大小 |
|
24 |
4 |
Uncompressed size |
未压缩的大小 |
|
28 |
2 |
File name length (n) |
文件名长度 |
|
30 |
2 |
Extra field length (m) |
扩展域长度 |
|
32 |
2 |
File comment length (k) |
文件注释长度 |
|
34 |
2 |
Disk number where file starts |
文件开始位置的磁盘编号 |
|
36 |
2 |
Internal file attributes |
内部文件属性 |
|
38 |
4 |
External file attributes |
外部文件属性 |
|
42 |
4 |
Relative offset of local file header. This is the number of bytes between the start of the first disk on which the file occurs, and the start of the local file header. This allows software reading the central directory to locate the position of the file inside the ZIP file. |
本地文件header的相对位移。 |
|
46 |
n |
File name |
目录文件名 |
|
46+n |
m |
Extra field |
扩展域 |
|
46+n+m |
k |
File comment |
文件注释内容 |
该结构中的General purpose bit flag部分的第0位如果置1,标识该压缩包被加密;置为0标识该压缩包没有被加密。
三、具体实施
我们可以利用ZipCenOp.jar这个jar包对apk进行加密和解密操作(也有用python实现这个操作的这里我们不做介绍)。
(1)对apk进行加密

加密后,我们用解压缩软件进行解密会看如下的提示信息:

用apktool进行反编译会提示如下的错误信息:

加密后apk是可以正常的安装和运行的。
(2)对apk进行解密

解密对我们来说没有多大的用途,只是了解一下。
根据上面的讲述相信大家对apk的伪加密技术有了一定的了解,不过这种方法对于android 4.2.x版本及以后系统已经不适用了它会拒绝这种加密apk的安装。下一篇我们将讲解另一种android apk防止反编译技术,期待大家的捧场。
感谢您的阅读,期待下次与您见面:
如果对这篇讲的技术有任何疑问及想要获得这篇文章讲的技术的工具,第一时间获得文章更新,每天发布一篇技术大牛的原创文章,更多技术信息分享。
欢迎关注个人微信公众平台:程序员互动联盟,扫一扫下方二维码或搜索微信号coder_online即可关注,在线帮您解决技术难点,给大牛直接出难题。

android apk 自我保护技术-加密apk的更多相关文章
- android apk 自我保护技术-完整性校验
关于防止android apk被反编译的技术我们前面已经讲了四种. 加壳技术 运行时修改字节码 伪加密 对抗JD-GUI 如果有不明白的可以查看我的博客的前四篇中关于这四种技术的介绍.接下来我们接着介 ...
- APK自我保护方法
标 题: [原创]APK自我保护方法 作 者: MindMac 时 间: 2013-12-28,21:41:15 链 接: http://bbs.pediy.com/showthread.php?t= ...
- App山寨疯狂 爱加密Apk加密平台防破解
App山寨疯狂 爱加密Apk加密平台防破解,Android系统由于其开源性,眼下已占领全球智能机近80%的市场,远超微软的WP系统和苹果的IOS系统.然而也正是由于开源性,Android盗版App在国 ...
- Android开发中内置apk程序
首先申明,这里的方法介绍是针对我司自己项目中的具体开发板而做的. Mg701内置APK有三种方式 一. 这种方法必须要自己编写Android.mk文件(关于Android.mk可以参考 ...
- Android直接用手机打包apk!
你没有看错,用手机浏览器访问Jenkins,就可以打包apk,并生成下载二维码,发送邮件通知测试人员下载,从此解放双手,告别打包测试.先上本人手机邮箱收到的打包成功通知效果图: 废话少说, ...
- Android 8.0+ 更新安装apk失败的问题
最近做项目发现Android 8.0+ 更新安装apk时 出现安装失败的情况 总结原因是 缺少安装的权限 Android 8.0 (Android O)为了针对一些流氓软件引导用户安装其他无关应用. ...
- 我的Android进阶之旅------>解决Android Studio编译后安装apk报错:The APK file does not exist on disk
1.错误描述 今天用Android Studio编译应用后安装APK的时候,报错了,错误如下所示: The APK file build\outputs\apk\OYP_2.3.4_I2Base_64 ...
- (转)从android一个apk中启动第三方apk应用
从android一个apk中启动第三方apk应用 我们在开发中,经常遇到遇到在一个apk中要去运行另外一个apk,就像我们windows一样,搞一个快捷方式一样,那怎么实现呢? 问题的核心点在于我们要 ...
- Android 4.4(KitKat)中apk包的安装过程
原文地址:http://blog.csdn.net/jinzhuojun/article/details/25542011 事实上对于apk包的安装.4.4和之前版本号没大的区别. Android中a ...
随机推荐
- 搭建高性能计算环境(二)、远程登录Linux服务器
一般操作Linux系统都是通过远程登录使用的,本节介绍几种远程登录Linux.上传下载文件的工具. 1. Secure Shell SSH 简单方便.既能使用命令行登陆也能传文件,免费. 打开SSH ...
- 使用CSS创建有图标的网站导航菜单
在我创建的每一个互联网应用中,我都试图避免创建完全由图片组成的菜单.在我看来,网页菜单系统中应该使用文字.这样做也会让菜单变得更干净利落.清晰和易读,不用考虑应用程序如何读取它,以及页面放大的时候也不 ...
- Javascript 模块模式
模块模式(Module Pattern)提供了一种代码封装的方式,可以优雅地创建非耦合的代码块. 它是利用即时函数为对象创建私有变量和特权方法.严格来说,Javascript中没有私有成员的概念,所有 ...
- VMware vSphere Client的简单使用教程
1.首先登陆进去ESXI管理 实验VMware VS6.0版本 2新建虚拟机 确认信息 点击完成 2.开启虚拟机 右键打开控制台 加载光驱 选择虚拟机 Ctrl+Alt+delete重启 安装 来 ...
- 用Lambda表达式操作List集合
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- [leetcode]_Palindrome Number
判断integer是否为回文串(负数全部不为回文串) 思路很直接,提取出integer中的每一位,一头一尾进行比较是否相同. 一次AC , 直接上代码: public boolean isPalind ...
- LVS+keepalived实现负载均衡
背景: 随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要 的浪费?同时实现商业硬件一样的 ...
- ASP.NET MVC5学习笔记之Action参数模型绑定之模型元数据和元数据提供
一. 元数据描述类型ModelMetadata 模型元数据是对Model的描述信息,在ASP.NET MVC框架中有非常重要的作用,在模型绑定,模型验证,模型呈现等许多地方都有它的身影.描述Model ...
- [php]如何更改wamp默认的mysq空密码?
最近刚开始学php,爬坑中.上午看了会儿书,下了个源码,把文件部署到www下之后,也导入了sql文件,但是进入之后显示 = = 一开始不知道是什么.后来百度之后发现是mysql的问题,应该是源码中p ...
- node.js web开发:EXPRESS 4.x 以上使用session和cookie 的记录
关于session 和cookie 我搞了2-3天, 发现这个玩意也挺麻烦的. 很多教程都是把这种会话保存在nosql里面,比如mongo,或者redis等等.但是我还是想直接保存在计算机的内存中,比 ...