经过了忙碌的一周终于有时间静下来写点东西了,我们继续介绍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

转载于:https://blog.51cto.com/donghuizaixian/1631966

如何保护自己的android app相关推荐

  1. Android App Bundle混淆加密加壳加固保护的解决方案(过Google App上架审核)

    Android AAB简介和AAB包格式 AAB即Android App Bundle,是Google官方发布的一种新的App包格式,可以有效缩减App大小,提升用户安装和更新App的体验.在Goog ...

  2. android app攻击与防范论文,基于Android平台的应用程序安全保护研究与应用

    摘要: 随着Android操作系统的广泛使用和移动互联网时代的到来,Android系统的安全问题也不断出现,给用户和开发者造成了许多困扰.Android应用程序面临着知识产权被侵犯.被二次打包.应用程 ...

  3. 为你的android App实现自签名的ssl证书

    为你的android App实现自签名的ssl证书(https) 最近公司项目用到https的接口形式,对于一般的网络请求 我们用的是http://******      使用的是 代码用来打开一个  ...

  4. Android APP破解利器Frida之反调试对抗

    本文讲的是Android APP破解利器Frida之反调试对抗,在我发表了关于Frida的第二个博文后不久,@muellerberndt决定发布另外一个新的OWASP Android 破解APP,我很 ...

  5. APK加密方法:某社交类Android APP加密分享

    这款社交类APK是无数宅男宅女的挚爱,但是听说他们对这款app进行了非常严密的保护,防止用户进行二次打包.现在我们就来分析下这款app的安全性到底如何! 工具/原料 APK源码安全检测平台 APK源码 ...

  6. Android 系统(98)---Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)

    Android app 在线更新那点事儿(适配Android6.0.7.0.8.0) 一.前言 app在线更新是一个比较常见需求,新版本发布时,用户进入我们的app,就会弹出更新提示框,第一时间更新新 ...

  7. Android APP连接 MySQL

    转载自http://www.cnblogs.com/yzxk/p/4749440.html 一.开发环境的部署 程序结构: android+servlet+service+mysql 仅供参考:能实现 ...

  8. Android APP native 崩溃分析之 linker SIGBUS 崩溃

    原文地址:https://caikelun.io/post/2019-05-31-android-app-native-crash-linker-sigbus/ 这是 Android APP nati ...

  9. 如何实现接口统一入口_网易考拉Android App如何实现统一弹框

    摘要 在快速开发的背景下,经历了n个版本后的考拉Android App中已经存在了各种各样看似相同却各有差别的弹框样式.其中包括系统弹框和自定义弹框,并且在线上时常会出现IllegalArgument ...

最新文章

  1. JavaScript——this、constructor、prototype
  2. cdn大全 jquery/jqueryUI/Dojo/MooTools/Prototype
  3. mysql 主从配置(master slave)
  4. elxel表格纸张尺寸_印刷设计必懂知识:印刷纸张类型介绍
  5. 【NLP】GloVe的Python实现
  6. java内部类的特点
  7. ROS 学习笔记(二):自定义消息msg+Publisher+Subscriber 示例运行
  8. sqlyog for MySQL远程连接的时候报错mysql 1130的解决方法
  9. 如何才能成为一个成功的项目经理
  10. DEV MessageBox
  11. 一切从恢复系统开始(尽量不要学我恢复数据库的方法,我是个懒人^_^)
  12. fw313r手机登录_fw313r路由器设置
  13. 反射+自定义属性拼接sql
  14. 如何使用Loadrunner12在win10系统 最新版本谷歌浏览器录制脚本
  15. Android吃鸡 3dtouch,绝地求生刺激战场3Dtouch怎么用 刺激战场3Dtouch吃鸡技巧详解
  16. vue3 script setup写法
  17. 葵花宝典——放入word中
  18. 【web项目】前端生日礼物--主页面篇
  19. c语言怎么算除法算式,随机算式的除法如果答案是无限循环小数,怎么加精度?...
  20. 如何祛痘?美丽时光小编分享自己的战痘经历

热门文章

  1. 从新浪财经上下载交易明细数据并统计每天的买卖笔数(shell 命令行)
  2. Does LGWR use synchronous IO even AIO enabled?
  3. 提高sqlmap爆破效率
  4. iOS10 UI教程视图和子视图的可见性
  5. linux cpu平均利用率st,理解 CPU 利用率
  6. 结构化数据和非结构化数据的区别_中国天辰携手爱数AnyShare,共同探索非结构化数据治理...
  7. 计算机术语所见即所得,计算机应用基础作业四(16页)-原创力文档
  8. html5 居于页面中心,css笔记:如何让一个div居于页面正中间
  9. 运动皮层的树突状钙信号驱动光学脑机接口
  10. 2021CCF颁奖典礼首次多平台网络直播,致敬获得者!CCF杰出工程师