Giter VIP home page Giter VIP logo

avoiddecompiler's Introduction

#Android防二次打包 懂得攻才能防

###如何二次打包

  1. 二次打包工具

    反编译工具

    apktool 反编译利器
    dex2jar 将dex文件反编译成jar文件(java代码)工具,用于解读代码
    gui 打开jar文件工具

    签名工具

    apksign 给java程序签名的工具
    testkey.pk8 teskkey.x509.pem用于签名的文件

  2. 二次打包原理

    利用上面反编译工具可以看到apk中dex文件的汇编源码,也可以用apktool反编译出Smali(Dalvik识别的寄存器语言)源代码,篡改Smali源码之后重新打包之后,变成了一个全新的app。

具体实现可参考:二次打包实践 https://www.zhihu.com/question/41368839

###如何防止二次打包

完全杜绝二次打包基本是不可能,但是可以提升别人二次打包的难度

一. 验证签名文件

  1. 验证签名信息,由于验证签名信息的代码放在java文件里会被反编译修改,将验证签名的逻辑代码编译成so文件

  2. 若只是本地验证签名,依然会被反编译修改代码,所以建议加上一步服务端校验的步骤,例如:上传随时变更的加密签名

(注:可以现在客户端做一次验证;之后服务器配合验证,主要验证逻辑放在服务端。)

加密的签名中可以加入时间戳,DeviceID,这样每次加密只有的值不是固定的,别人无法模仿,也方便服务端做校验

校验之后的操作很重要:
 服务端校验失败:
   1. 不下发任何数据
   2. 下发通知客户端,当前App已被二次打包
 客户端被通知失败:
   1. 服务端不下发任何数据时:
   2. 服务端下发通知:客户端提醒用户,当前使用的App不是官方版本有危险。

二. 验证dex文件是否被修改

步骤:

  1. 应用正式打包待发布,对应用的.dex文件进行MD5,获取MD5之后的值

  2. 在App运行后,动态获取当前App的.dex文件的MD5值,并与发布App的.dex文件的MD5值进行比较,如果不相同表示App被人反编译修改了代码

  3. 运行时获取dex文件的MD5值并进行比较的逻辑需要放入so库中

(注:运行时获取apk的资源文件需要借助libzip库支持)

avoiddecompiler's People

Contributors

xiaguangcan avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.