reinforce加固

dex格式

decompiler反编译说明

原理解析

加固需要三个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加固成功。

详情,请参考稍后放进我github上的原代码。https://github.com/jiek2529/reinforce

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进行重签名,就大功告成了。

Last updated

Was this helpful?