首页
社区
课程
招聘
[原创]梆梆企业版加固技术之防篡改剖析
发表于: 2017-12-6 00:18 17297

[原创]梆梆企业版加固技术之防篡改剖析

2017-12-6 00:18
17297

        ● MD5

        ● RC4

        ● 斐波那契数列

        ● BAS64

        ● SHA-1

        ●  UTHASH

        ●  单项链表

         ●  ZIP

        参考资料的2和3是关于UTHASH与sha1withRDA的介绍,感兴趣的话可以看一下。

2.3  自定义的结构变量

2.3.1  APK\assets\meta-data\ manifest.mf文件格式

        BB在其防篡改功能说明中说到,会为每个文件分配一个识别指纹,那么这个指纹到底存在哪里呢。经过分析发现APK\assets\meta-data\ manifest.mf文件存放的就是对应的指纹信息。下面介绍一下这个文件的格式。

                                                                             

                                                                                图 2‑1 [APK\assets\meta-data\ manifest.mf]

        从上图中可以看到这个文件的内容看起来像是BASE64编码,实际上是不是呢,我们可以验证一下,先将文件开始像base64编码复制出来如下:

                                                                  

                                                                                表 2‑1 [[APK\assets\meta-data\ manifest.mf文件格式]    

                                                                         

        整个签名校验的过程就是验证上面的4个文件指纹。在后面的分析中我们会真正的了解。

2.3.2   BB_HashTable 数据结构

       BB_HashTable主要用于存储APK\\META-INF\ MANIFEST.MF文件内容的。APK\\META-INF\ MANIFEST.MF文件存储的是APK包中所有文件的SHA1签名:

                                                                                 

        其定义如下:

        这个结构主要是保存加固时APK的原始签名。如果实现防篡改功能,势必要保存原始APK的指纹信息,然后与当前APK的指纹信息进行对比,从而来判断是否被篡改。

       这个结构对应的数据内容在如下目录:APK\assets\meta-data\ manifest.mf,其定义如下:

       本文件是识别指纹的核心文件,里面共存储了4种类型的文件指纹如下;

               ●  指纹1:原始APK单个文件sha1字符串的前4个字节

               ●  指纹2:原始APK单个文件对应的CRC32的低4个字节

               ●  指纹3:指纹1组合起来的SHA1的base64

               ●  指纹4:指纹2组合起来的SHA1的base64

       其中ras.sig保存的是manifest.mf的RSA加密后的签名。Ras.pub保存的是RSA的公钥信息。BB不大可能拿到APP开发者签名的私钥,因此这个ras.pub应该是BB自己的公钥。这2个文件的作用其实就是验证原始的文件指纹是否被篡改。 

3.1 识别指纹生成流程

                                                              

4 验证流程

        整个验证流程可以分为如下8个步骤:

        1、  验证原始APK的文件指纹(manifest.mf)、文件指纹的签名(cert.sig)以及公钥文件(cer.pub)是否被篡改,如果被篡改,则终止应用;

        2、  提取原始manifest.mf的4种类型的文件指纹;

        3、  提取当前文件的sha1,其中包括当前文件指纹1;

        4、  提取当前文件的CRC32,包括当前文件指纹2;

        5、  对当前文件指纹1与原始文件指纹1比较,如果不一致,则终止应用;

        6、  对当前文件指纹2与原始文件指纹2比较,如果不一致,则终止应用;

        7、  将当前APK所有文件指纹1组合成一个字符串,并计算其整体的SHA1,然后再base64,即获得当前APK的文件指纹3,与原始的文件指纹3进行比较,如果不一致,则终止应用;

        原始APK文件指纹文件包括如下三个文件:

         ●  manifest.mf:原始APK的文件指纹,文件格式见2.3.1;

         ●  cert.sig:manifest.mf经过RSA加密后的签名;

         ●  cer.pub:用于验证cert.sig的RSA公钥。

         这里的RSA签名,并不是APK开发者的签名,而是BB自己的签名。

       在BB的libdexhelper.so文件中保存着cert.pub的MD5值,但是这个MD5值是经过加密后的,而且其加密的流程还是比较复杂的。解密流程首先 实现了一个从APK文件中提取文件的C语言版本解压程序,包括如下函数:

       ●  dexZipOpenArchive             //打开zip文件获得ZipArchive结构

       ●  dexZipFindEntry                  //从ZIP中获取指定文件的入口结构

       ●  dexZipGetEntryInfo              //得到指定文件入口结构对应的信息

       ●  ReadToBufFromZipFile        //将指定文件的内容读到BUF中

       ●  dexZipCloseArchive              //关闭zip文件


       利用上面的函数,将cert.pub读取到内存中,然后计算其MD5值。接着开始获取原始APK的MD5值,其经过如下4个步骤:

       1、计算0x52600开始0x1000个字节的MD5 值;

       2、构造一个斐波那契数列,1 1 2 3 5 8 13 21 34 55;

       3、以斐波那契数列为索引从数组0x52600取出对应的数值,然后与步骤1得到的MD5值按字节亦或,获得一个0x10大小的KEY。实际上是下面RC4解密的KEY

       4、利用步骤3获得的RC4 KEY ,对525E0开始的0x10大小的数据,进行RC4解密。解密的结果就是原始的cer.pub对应的MD5值。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 1
支持
分享
最新回复 (14)
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
大概能看懂,要是有工具就好了啊
2017-12-6 10:04
0
雪    币: 4
活跃值: (327)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
分析得真棒!  有没有可以破解的思路?
2017-12-6 10:06
0
雪    币: 19097
活跃值: (1345)
能力值: ( LV15,RANK:936 )
在线值:
发帖
回帖
粉丝
4
流浪情人 大概能看懂,要是有工具就好了啊
            目前在防篡改上  普遍采用的是验证开发者公钥的信息,其中BB并没有采用这个方案,而是借鉴了android系统本身对签名的检验流程,此流程是在APK安装的过程中验证的,只不过BB在程序每次启动时,开一个  线程在线程中进行如上的验证。
            由于是本地验证,为了保护指纹,采用了很多的加密措施,尤其对加密算法的秘钥做了进一步的处理。
            采用这方案的,还有爱加密。其他家的加固基本上都是验证开发者签名的。包括360等。
           
            对于BB的企业版加固,应该说是目前最强的,其DEX的VMP在百度和360的基础上,做了优化,不仅仅是smali操作码的混淆,对stringID\fieldID\typeID\protoID\meithodID也进行了混淆,而且将原始DEX进行了拆分,对于还原确实要困难的多,当然仍然也是可以被还原的。
2017-12-6 10:23
0
雪    币: 19097
活跃值: (1345)
能力值: ( LV15,RANK:936 )
在线值:
发帖
回帖
粉丝
5



oooAooo

目前在防篡改上 普遍采用的是验证开发者公钥的信息,其中BB并没有采用这个方案,而是借鉴了android系统本身对签名的检验流程,此流程是在APK安装的过程中验证的,只不过BB在程序每次启动 ...
            逆向分析确实是个很枯燥的过程,我也是在学习的过程中,如果一定说思路的话,除了经验之外,需要对数据结构和算法掌握。在分析过程中如果能很块判断出数据结构和算法,逆向分析就会快得多。
            PS  :加密算法我很渣。需要像咱看雪算法大牛学习。
2017-12-6 10:29
0
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
分析的是最新版本呢嘛?大大
2017-12-6 10:50
0
雪    币: 14846
活跃值: (6078)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
BB加固对加密认识好像有误区?以为算法越多、算法越强那么加固就越强?
我只知道内存dump是不需要关心算法的(除非在内存中也一直是加密状态)。既然dex在内存中可以拆分那么也就可以在内存中组装。谁会去直接修改你的加密文件呢?所以那么多相互效验毫无意义。别人都是dump后该干吗就干吗!
个人认为BB难点应该是VMP解释smali,其他应该是画蛇添足。
2017-12-6 14:21
0
雪    币: 53
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
tDasm BB加固对加密认识好像有误区?以为算法越多、算法越强那么加固就越强?我只知道内存dump是不需要关心算法的(除非在内存中也一直是加密状态)。既然dex在内存中可以拆分那么也就可以在内存中组装。谁会去直 ...
楼主对防篡改有误区,防篡改不是源代码保护,而是防止apk被重打包,不是用来保护dex的,很多时候不需要管dex,只需要改apk里面一些xml或者资源文件就行。
2017-12-7 12:47
0
雪    币: 360
活跃值: (84)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
9
Zkeleven 楼主对防篡改有误区,防篡改不是源代码保护,而是防止apk被重打包,不是用来保护dex的,很多时候不需要管dex,只需要改apk里面一些xml或者资源文件就行。
????
2017-12-7 14:16
0
雪    币: 14846
活跃值: (6078)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10



Zkeleven

楼主对防篡改有误区,防篡改不是源代码保护,而是防止apk被重打包,不是用来保护dex的,很多时候不需要管dex,只需要改apk里面一些xml或者资源文件就行。
真不知道谁对防篡改有误区?!!
打个比方:你是靠衣服遮丑,如果你的衣服脱光了,你还靠什么遮丑?
2017-12-7 14:34
0
雪    币: 53
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
tDasm Zkeleven 楼主对防篡改有误区,防篡改不是源代码保护,而是防止apk被重打包,不是用来保护dex的,很多时候不需要管dex,只需要改apk里面一些xml ...
没明白你的比方,还有你这么激动干嘛。。
2017-12-7 15:42
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
Zkeleven 楼主对防篡改有误区,防篡改不是源代码保护,而是防止apk被重打包,不是用来保护dex的,很多时候不需要管dex,只需要改apk里面一些xml或者资源文件就行。
开始我也没看懂,看了官网介绍后才知道楼主说的是官网说的防篡改保护里的防二次打包,其实只要说防止apk二次打包就明确了,防篡改保护范围太大,容易误导。还有楼主说的就是签名认证的原理过程,我估计过签名认证的会不会这些都没什么影响。
2017-12-7 17:15
0
雪    币: 9
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
对..哎..发现现在越来越多的事情总是绕着圈说一堆事....
这个其实就是防二次打包的....
2018-5-23 11:27
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
六种加密算法?可能对什么是加密  什么是编码  什么是哈希    概念都很模糊
2018-5-24 14:24
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
就是考验别人对加密算法的熟悉程度
2018-5-25 21:45
0
游客
登录 | 注册 方可回帖
返回
//