Android
  • Introduction
  • Android Studio
    • AS的项目结构
    • adb
    • aapt
    • dx
    • Gradle
    • Kotlin on android
  • Smaller
  • decompiler
  • MISC
  • 框架 framework
  • 设计模式
  • dex
  • reinforce加固
  • code
    • Java Tips
      • 负数 negative
      • The Java Tutorials
        • 原始数据类型 Primitive Data Types
      • 运算符
        • 一元运算符
        • 算术运算符
        • 移位运算符
        • 关系运算符
      • 逻辑运算符
        • 逻辑 非 ! 关系值表
        • 逻辑 与 && 关系值表
        • 逻辑 或 || 关系值表
        • 与 & And
        • 或 | Or
        • 非 ~ Nor
        • 异或 ^ Xor
        • 赋值运算符
        • tips
      • == equals
      • Try Catch finally
        • 有意思的东西
      • String、StringBuilder、StringBuffer区别
      • inner classes、nested static classes
    • runtime_memory
    • javaStackTrace
    • Guava
    • FFMPEG
    • GoogleSamples
    • Full Kotlin Reference
    • release屏蔽Log代码
    • Thread
  • ANR
  • 注解改进代码检查
Powered by GitBook
On this page
  • 原理解析
  • 加固需要三个stuff
  • 主要步骤
  • FQA

Was this helpful?

reinforce加固

PreviousdexNextcode

Last updated 5 years ago

Was this helpful?

原理解析

加固需要三个stuff

  1. 源Apk

  2. 壳Apk

  3. 加密工具

主要步骤

  1. 编译出原包original.apk

  2. 编译加固包reinforce.apk

  3. 把reinforce.apk的classes.dex解压出来

  4. 使用encrypt对classes.dex与original.apk,进行隐藏处理。

  5. 使用FQA的修改meta-data方法,把原包的application-name设置上去。

  6. 对original.apk或reinforce.apk进行重签名jarsigner。

  7. 进行加固包真机测试。以确保apk加固成功。

FQA

  1. 使用Application反射加载原应用original.apk时,应用音视频无法识别现象。

    1. 在使用反射时,项目中的 assets res/raw里的音视频资源会无法识别;

    2. 因为在使用MediaPlayer里,会使用到Assetmanager.openNonAssetFdNative 此so方法,会出现无法获取以AssetsFileDescriptor 资源文件描述符的问题

    3. 所以处理此问题的方式:把此类资源转为文件系统文件去使用。

      file:///android_asset/sound.{ogg|mp3|mp4...}

    4. R.raw.sound此类方式都在加固后被得无效了。但其它资源还是有效的。

    5. 此文件的根源为Assetmanager.openNonAssetFdNative无法读取文件的资源描述符。

  2. AndroidManifest修改meta-data方法

    1. apktool d original.apk完成反编译。

    2. 用文本或代码修改需要改的键值,或增减。

    3. apktool b original会把反编译的包重编译出来,但可能会有缺陷。

    4. unzip original/dist/original.apk AndroidManifest.xml把修改好的此文件弄出来。

    5. zip -d original.apk AndroidManifest.xml删除原包的AndroidManifest.xml。

    6. zip -ur original.apk AndroidManifest.xml把前面重编译出来的文件更新到原包中去。

    7. 最后使用jarsigner进行重签名,就大功告成了。

详情,请参考稍后放进我github上的原代码。

dex格式
decompiler反编译说明
https://github.com/jiek2529/reinforce