android 插件 manifest,Android应用加解密--AndroidManifest文件加解密

本文聚焦Android应用安全,分析部分加固产品加固后APK反编译报错、仅得空AndroidManifest.xml文件的问题。发现是加固产品修改该文件实现加密,利用Android安装不解析无用标签属性、反编译工具解析的漏洞。还给出从Manifest文件入手的解密方法及手动修改步骤,最终成功反编译。

最近对Android应用安全这一块比较关注,所以了解了一些apk加固产品。发现部分加固产品加固后的apk在反编译时会报错,反编译的结果只得到一个空的AndroidManifest.xml文件。针对此现象分析和查找一些资料,发现此情况是因为加固产品对AndroidManifest.xml文件作了一些修改从而实现apk加密。所以写此稿作分析记录,若有新发现则更新。

1.问题:

在反编译某加固产品加固后的apk时出现报错如下:

W: Could not decode attr value, using undecoded value instead: ns=android, name=

qihoo, value=0x00000016

2.直接从apk压缩包中拖出AndroidManifest文件并用AXMLPrinter2.jar工具对其进行格式转换发现Application标签中存在一个这样子的属性:

android:qihoo="activity"

由于android命名空间中并没有qihoo这个属性,所以猜测是加固产品对manifest文件做了手脚。

3.查阅资料发现此种加密是利用了某个漏洞。即Android在安装运行apk时并不会对无用的标签属性进行解析。但是进行反编译时apktool却会对每一个标签属性进行解析,所以导致无法反编译。在此非常感谢wanchouchou大大的文章http://www.cnblogs.com/wanyuanchun/p/4084292.html

4.解密:既然问题已经找到,那么解密工作就应该从Manifest文件入手。目前发现最全的manifest二进制文件格式如图,是看雪论坛MindMac大大的贴给出的:http://bbs.pediy.com/showthread.php?t=194206。

5.非常感谢以上两位大大给出便利。

6.手动解密:

分析文件格式可以知道,解密该manifest文件只要把Application标签下的android:qihoo属性删除即可。所以文件需要修改的地方如下:

删除application标签下的android:qihoo属性,总大小为1*5*4bytes

修改XmlContent chunk 中 application start tag chunk的Attribute count 减去1

修改application start tag chunk的chunk size 减去0x14

修改整个xml的file size 减去0x14

修改的细节就不说了,修改前后的xml及apk文件下载链接:链接:链接:http://pan.baidu.com/s/1i9d86 密码:exod

7.将修改后的xml文件替换掉原apk的中的xml文件,apktool反编译,成功反编译出所有文件!今天先到这,下次再看吧。

xml加密(XML Encryption)是w3c加密xml的标准。这个加密过程包括加密xml文档的元素及其子元素,通过加密,xml的初始内容将被替换,但其xml格式仍然被完好的保留。 介绍 我们有3个加密xml的方法 1、仅仅使用对称加密的方法加密xml 这种加密方法只使用一个密钥,也就是说无论是加密xml还是解密xml都使用一个相同的密钥。因为这个密钥不会在被加密的xml中保存,所以我们需要在加密和解密的过程中加载这个密钥并保护它不被窃取。 2、使用对称加密和非对称加密相结合的方法来加密xml 这种方法需要一个用于加密数据的对称密钥和一个用于保护这个对称密钥的非对称密钥。被加密的对称密钥和被加密的数据一起保存在xml文档中。当用私有非对称密钥解密密钥的时候要用公开非对称密钥对密钥进行加密。 本文就将使用这种方法。想学到其他更多的方法请参看MSDN等到更多的信息。 (译者注:非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。) 3、使用X.509加密xml,这种方法是用X.509作为非对称密钥,它由诸如VeriSign之类的第三方提供。 方法 不管xml加密是如何完成的,保存加密数据总是用两种方法之一。 1、加密后所有的元素都被命名为 2、加密后只有数据被替换,而元素名称仍然是可读的,不会发生变化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值