接下来我们将介绍另一种简单适用的防止apk反编译的技术-对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进行解密

解密对我们来说没有多大的用途,只是了解一下。


更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  4. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  5. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  6. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  7. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  8. 老罗牛文二、在Ubuntu上下载、编译和安装Android最新源代码
  9. Study on Android【四】--显示控件使用

随机推荐

  1. android 架包冲突解决方案
  2. 关于android textview,edittext,导致界面
  3. Android(安卓)App 网络接入实时监控
  4. 借腾讯开源 VasDolly,谈谈 Android(安卓)
  5. android黑科技之读取用户短信+插入短信到
  6. 【android】 使用观察者模式更新用户资料
  7. 自定义样式日期时间选择对话框控件(精简版
  8. Android权限设置引导
  9. Linux/Android——input子系统核心 (三)
  10. Android比iOS卡得原因和本质区别总结