首页
社区
课程
招聘
[原创]梆梆加固apk的一点思考
发表于: 2013-4-7 10:49 32006

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

2013-4-7 10:49
32006

梆梆这项产品是一款非常优秀的产品,整体的逻辑构架非常严谨。其中用到了加密,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编程来完成对自定义类加密封装包的解密操作等。
这种方式是的被梆梆处理的文件结构非常清晰,但是整体的逻辑结构却被保护得很好,有效的保护了其处理过的文件不被抄袭。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 6
支持
分享
最新回复 (13)
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
加固之后更难分析了
2013-4-7 22:19
0
雪    币: 1413
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
3
分析得不错,支持一下~
2013-4-7 23:19
0
雪    币: 52
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
学习了 :D
楼主继续分析下,感觉好玩的东西挺多的
2013-4-7 23:27
0
雪    币: 97697
活跃值: (200824)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
5
Thanks for share.
2013-4-8 00:09
0
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
虽不明,但觉厉
2013-4-8 10:20
0
雪    币: 298
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
感谢分析~!这加密思路很大牛啊~看来android逆向也走向艰难。。。
2013-4-8 16:01
0
雪    币: 118
活跃值: (106)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
分析的不错啊!
2013-4-9 11:25
0
雪    币: 61
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
楼主有没有对 解密的so 进行动态调试呢
2013-4-11 10:46
0
雪    币: 189
活跃值: (192)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
能具体说下啥是"导出表中函数序号来实现对native方法的加载"么?
2013-4-11 10:47
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
虽不明,但觉厉 ,解析是一方面,加载呢?
2013-4-19 11:33
0
雪    币: 80
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
thank you for share..
2013-4-30 17:24
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
楼主 只分析了 java层的一些东西
2014-4-4 15:36
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
14
谢谢这句话不错,梆梆采用了使用导出表中函数序号来实现对native方法的加载,这个点子很不错哦
2016-4-15 13:24
0
游客
登录 | 注册 方可回帖
返回
//