`
damengjiejie
  • 浏览: 9341 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

如何保护自己android app代码不被盗用

 
阅读更多

经过了忙碌的一周终于有时间静下来写点东西了,我们继续介绍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即可关注,在线帮您解决技术难点,给大牛直接出难题。

 

摘自:http://my.oschina.net/u/2323218/blog/399326

分享到:
评论

相关推荐

    Android Studio实例代码.zip_Android app实例_Android实例_android app源码_and

    Android Studio实例源码,主要介绍常用app的代码

    Android Studio实现安卓APP大作业百宝箱app源代码移动终端开发大作业.zip

    Android Studio实现安卓APP大作业百宝箱app源代码移动终端开发大作业。Android Studio实现安卓APP大作业百宝箱app源代码移动终端开发大作业。Android Studio实现安卓APP大作业百宝箱app源代码移动终端开发大作业。...

    Android代码-android-app

    Mixin Android app Mixin Android messenger, wallet and light node to the Mixin Network Summary Written in Kotlin Uses Architecture Components: Room, LiveData, Paging, Lifecycle and ViewModel Uses ...

    Android代码-隐藏app的app,用处自己挖掘。

    (仅限原生Android 5.0以上,一般而言,Nexus家族是可以使用的,包括但不限于Nexus 4、Nexus 5、Nexus 5x、Nexus 6P等,第三方厂商自己修改过的ROM不可使用,包括但不限于三星,小米,华为等) 原理 在Android 5.0...

    android实现蓝牙app代码

    本文实例为大家分享了android实现蓝牙app的具体代码,供大家参考,具体内容如下 private BluetoothGatt bluetoothGatt; private BluetoothGattService gattService; private BluetoothGattCharacteristic ...

    Android代码-一个漫画app

    大学期间一直喜欢看漫画,很多时候不能在电脑前看,就会下载漫画app在手机上看,那时候就想做个ComicReader App ,可惜自己什么都不会,呵呵。 现在学了android大半年了,就拿漫画app练练手,虽然是个半成品,以后有...

    安卓期末大作业Android天气预报app源码.zip

    安卓期末大作业Android天气预报app源码安卓期末大作业Android天气预报app源码安卓期末大作业Android天气预报app源码安卓期末大作业Android天气预报app源码安卓期末大作业Android天气预报app源码安卓期末大作业...

    Android代码-安卓APP代码架构

    Android App 代码架构 UPDATE 打包签名相关的可以看下这篇博客----->安卓集成发布详解(二) Thanks Retrofit OKHTTP Picasso UIL Butterknife GSON EventBus otto AppMsg CircleImageView About me Click Me ...

    android购物APP源代码

    android购物APP源代码,全套资料。

    Android 商城app代码

    一款Android 商城APP代码。此代码仅供新手参考。开发工具请使用Android Studio

    基于Android的智慧校园APP设计

    基于Android的智慧校园APP设计 基于Android的智慧校园APP设计 基于Android的智慧校园APP设计 基于Android的智慧校园APP设计 基于Android的智慧校园APP设计 基于Android的智慧校园APP设计 基于Android的智慧...

    Android studio英语学习app代码(含文档)

    程序含完整运行的app代码,数据库使用的是as自带的sqlite数据库,含有查词,翻译,学习等功能模块。其中视频以及资源使用url链接爬取获得的,并保存在云服务器中,通过百度api接口实现了句子段落的翻译功能。

    android appwidget 经典完整代码

    android appwidget 经典完整代码 非常经典 非常好用的完整代码。

    大学 毕业设计 项目实训 android安卓手机点菜app 源代码.zip

    大学 毕业设计 项目实训 android安卓手机点菜app 源代码.zip

    简易Android购物App开发的移动端项目代码

    可以在Android App上查看物品,购买物品,查看购物车,提交订单,查看历史订单。这个小项目主要是为了达成以下两个目的: - 理解购物车如何实现 - 理解订单怎样生成 Android App使用原生开发,主要借助ListView...

    Android studio英语学习app代码与文档.zip

    程序含完整运行的app代码,数据库使用的是as自带的sqlite数据库,含有查词,翻译,学习等功能模块。其中视频以及资源使用url链接爬取获得的,并保存在云服务器中,通过百度api接口实现了句子段落的翻译功能。

    Android Studio实现天气预报APP系统源码(也可做Android本科毕业设计).zip

    Android Studio实现天气预报APP系统源码(也可做Android本科毕业设计Android Studio实现天气预报APP系统源码(也可做Android本科毕业设计Android Studio实现天气预报APP系统源码(也可做Android本科毕业设计Android ...

    Android代码-AppUpdater版本更新、一键傻瓜式升级App

    AppUpdater for Android 是一个专注于App更新一键傻瓜式集成的开源库,主要包括app-updater和app-dialog。 > 下载更新和弹框提示分开,是因为这本来就是两个逻辑。完全独立开来能有效的解耦。 app-updater 主要负责...

    Android代码-dlib-android-app

    dlib-android-app See http://dlib.net for the main project documentation. See dlib-android for JNI lib. Refer to dlib-android/jni/jnilib_ex Grap the source $ git clone ...

Global site tag (gtag.js) - Google Analytics