首页
论坛
课程
招聘
[原创]梆梆加固apk的一点思考
2013-4-7 10:49 29311

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

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

[看雪官方培训] Unicorn Trace还原Ollvm算法!《安卓高级研修班》2021年6月班火热招生!!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (13)
雪    币: 11
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hizhh 活跃值 2013-4-7 22:19
2
0
加固之后更难分析了
雪    币: 1367
活跃值: 活跃值 (156)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
Claud 活跃值 6 2013-4-7 23:19
3
0
分析得不错,支持一下~
雪    币: 49
活跃值: 活跃值 (13)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
cmds 活跃值 2013-4-7 23:27
4
0
学习了 :D
楼主继续分析下,感觉好玩的东西挺多的
雪    币: 34311
活跃值: 活跃值 (150817)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
linhanshi 活跃值 2013-4-8 00:09
5
0
Thanks for share.
雪    币: 180
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
kxzjchen 活跃值 2013-4-8 10:20
6
0
虽不明,但觉厉
雪    币: 298
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tedrick 活跃值 2013-4-8 16:01
7
0
感谢分析~!这加密思路很大牛啊~看来android逆向也走向艰难。。。
雪    币: 98
活跃值: 活跃值 (12)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
pc小波 活跃值 1 2013-4-9 11:25
8
0
分析的不错啊!
雪    币: 51
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
麦小扣 活跃值 2013-4-11 10:46
9
0
楼主有没有对 解密的so 进行动态调试呢
雪    币: 175
活跃值: 活跃值 (31)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
zerofile 活跃值 2013-4-11 10:47
10
0
能具体说下啥是"导出表中函数序号来实现对native方法的加载"么?
雪    币: 26
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bacondh 活跃值 2013-4-19 11:33
11
0
虽不明,但觉厉 ,解析是一方面,加载呢?
雪    币: 80
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
天随行 活跃值 2013-4-30 17:24
12
0
thank you for share..
雪    币: 16
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
starspring 活跃值 2014-4-4 15:36
13
0
楼主 只分析了 java层的一些东西
雪    币: 227
活跃值: 活跃值 (57)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
大王叫我挖坟 活跃值 3 2016-4-15 13:24
14
0
谢谢这句话不错,梆梆采用了使用导出表中函数序号来实现对native方法的加载,这个点子很不错哦
游客
登录 | 注册 方可回帖
返回