欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]梆梆加固apk的一点思考

[原创]梆梆加固apk的一点思考

梆梆这项产品是一款非常优秀的产品,整体的逻辑构架非常严谨。其中用到了加密,ndk,封装类等多项技术。使得经过帮帮处理的APK文件结构非常清晰,整体功能的封装又减小了整个文件被逆向的风险。
下载一个apk上传到梆梆云端,获取其加固包。利用加固前后的APK进行对比,发现了一个问题,其加固后的apk包结构非常的清晰,模块高度聚合,整个包结构中都是安卓的几大组件来完成的。而主要功能则被封装在了java包装类中了。
  
  加固后
   
  加固前
前后对比发现,梆梆可以很准确的解析混淆过的apk文件(说明混淆对于保护文件的作用并不是那么大)。这些接收器提供者的确定则是利用AndroidManifest文件来确定的。
        利用apktool解压加固包,发现和原文件中相比,多了以下三个文件

     但是classes.jar无法打开,判断为加密处理过。另外两个是so文件分别对应arm和intel平台(尚未判断出这两个so文件的作用)。
经过分析,发现重点在java封装类和lib库中的so文件中。首先观察java封装类,该类并没有将原APK作者的自定义类单纯的封装在一起,而是利用动态加载这一功能来实现的,动态的加载classes.jar文件然后解密来完成一些列的操作。com.secapk.wrapper该文件包下的三个类是其整个框架的核心。首先ACall 类中加载lib库文件中的so文件,申明native函数,其次MyClassLoader则是用来加载解密后的classes.jar文件,而Util工具类则是完成一系列如下功能:
1.处理器信息判断
   
2.拷贝classes.jar文件到指定位置

3.拷贝classes.jar到缓存中

4删除文件,主要是被更新版本的函数来调用

其他功能略。。。
最后是lib库中的so文件。使用IDA打开以后发现导出表中并没有常见的以包名开始的函数。这是因为梆梆采用了使用导出表中函数序号来实现对native方法的加载。该so文件完成了对classes.jar文件的解密,以及其他一些功能

最后总结一下梆梆的大体构架:保留继承几大组件的类,添加一个应用类和一个java包(即本例中的com.secapk.wrapper,主要是用它完成一系列的功能操作,贯穿自定义类和android机制),其他自定义类封装在classes.jar文件中加密保存,同时使用NDK编程来完成对自定义类加密封装包的解密操作等。
这种方式是的被梆梆处理的文件结构非常清晰,但是整体的逻辑结构却被保护得很好,有效的保护了其处理过的文件不被抄袭。

上传的附件 1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功