梆梆这项产品是一款非常优秀的产品,整体的逻辑构架非常严谨。其中用到了加密,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编程来完成对自定义类加密封装包的解密操作等。 这种方式是的被梆梆处理的文件结构非常清晰,但是整体的逻辑结构却被保护得很好,有效的保护了其处理过的文件不被抄袭。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课