android几个漏洞
2015-07-22 17:16
519 查看
1、apk伪加密
读取APK的字节,找到连续4位字节标记为”P K 01 02”的后第5位字节,如果是偶数表示不加密,如果是奇数就表示加密。
![](http://note.youdao.com/yws/public/resource/656f2f9d70c85e92f34e91bd37578a2f/60CB0C949F464C0CB315DE9396E4914E)
mod之后的压缩包:
![](http://note.youdao.com/yws/public/resource/656f2f9d70c85e92f34e91bd37578a2f/AEAC721813134FDDA13D35EAC1E2D3F2)
解压缩要求输入密码:
![](http://note.youdao.com/yws/public/resource/656f2f9d70c85e92f34e91bd37578a2f/8D7DF5D61DE14BAFA56016545B14BC73)
文件解密不出来
防解压防反编译
应用限制:
4.2之前。
2、apk压缩文件被破坏
APK在PC上面可以看作一个压缩文件,在Android系统里面它就是一个手机系统软件文件。
Android系统对APK的识别是从标志头到标志尾,其他多余数据都会无视。
所以说在标志尾添加其他数据对把APK看做压缩文件的PC端来说这个文件被破坏了,
所以你要对其进行解压或者查看都会提示文件已损坏,用反编译工具也会提示文件已损坏,
但是它却不会影响在Android系统里面的正常运行和安装而且也能兼容到所有系统。
但是这种APK压缩包破坏存在APK伪加密一样的问题,个别市场会不能识别导致不能上传市场。
![](http://note.youdao.com/yws/public/resource/656f2f9d70c85e92f34e91bd37578a2f/C682FC067BAB4BD0BC359C7DA00684D6)
![](http://note.youdao.com/yws/public/resource/656f2f9d70c85e92f34e91bd37578a2f/CD6E40E3914F4E3FB85CD8AE50F8AFA6)
应用:阻止反编译
-------------------------------------------------------------------------------------------------------------------
> 正在清理旧工作目录 ... - 成功!旧工作目录被清理到系统回收站内。
> 正在反编译Apk... - 失败:Exception in thread "main" brut.androlib.AndrolibException: brut.directory.DirectoryException: java.util.zip.ZipException: invalid CEN header (bad signature)
at brut.androlib.ApkDecoder.hasSources(ApkDecoder.java:199)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:83)
at brut.apktool.Main.cmdDecode(Main.java:146)
at brut.apktool.Main.main(Main.java:77)
Caused by: brut.directory.DirectoryException: java.util.zip.ZipException: invalid CEN header (bad signature)
at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:55)
at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:38)
at brut.androlib.res.util.ExtFile.getDirectory(ExtFile.java:55)
at brut.androlib.ApkDecoder.hasSources(ApkDecoder.java:197)
... 3 more
Caused by: java.util.zip.ZipException: invalid CEN header (bad signature)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:214)
at java.util.zip.ZipFile.<init>(ZipFile.java:144)
at java.util.zip.ZipFile.<init>(ZipFile.java:158)
at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:53)
... 6 more
> .smali输出目录:F:\360云盘\书籍\android\ApkIDE\Work\com.example.helloapplication
> .class输出目录:Not supported.
-------------------------------------------------------------------------------------------------------------------
可以安装运行。无系统限制,可能会影响apk上线。
3、master key
原理:apk压缩包里构造两个classes.dex,原dex在后,java层的签名校验代码读取到一个dex时会继续读,最后是用的远dex进行签名校验,ok通过。
但是在运行时却是C代码,读取第一个dex(伪造的)就运行了。
![](http://note.youdao.com/yws/public/resource/656f2f9d70c85e92f34e91bd37578a2f/99FCD95DFA4C44C7A7B1112F24A3CC12)
4、second master key
漏洞的原理是java代码在读取“Central directory file header”结构的“Extra field length”字段(java代码视为有符号short,C代码视为无符号short)时,如果大小超过0x7FFF则认为是负数,代码逻辑将负数一律按零处理。
思考:comment字段是否也一样?如果是,则需要检测。
5、another master key
Java使用的fileNameLength是从索引段的ZipEntry获得的,而C则是从数据段的ZipEntry获得的,所以就这里造成了不一致性,导致java和c定位到的data[]不一致。因此可以在数据段的ZipEntry中构造一个不一样的fileNameLength,进而让java校验签名时读取的是合法的文件,而c在安装是读取的是恶意的文件,绕过签名验证。
![](http://note.youdao.com/yws/public/resource/656f2f9d70c85e92f34e91bd37578a2f/C10A45BB763F422BB167B27CDD2515D4)
由于fileNameLength这个字段的类型是一个无符号short,最大值为64K,所以为了能让C代码成功能跳转到fake classes.dex,必须要求 real classes.dex加上"classes.dex"字符串的长度小于64k。也就是说,对这个漏洞的利用要求被绕过的原始正常文件的大小必须小于64k,这对这个漏洞的利用带来了很大的限制,所以实际的危害并不很大。
替换资源文件,例如修改apk图标。
读取APK的字节,找到连续4位字节标记为”P K 01 02”的后第5位字节,如果是偶数表示不加密,如果是奇数就表示加密。
mod之后的压缩包:
解压缩要求输入密码:
文件解密不出来
防解压防反编译
应用限制:
4.2之前。
2、apk压缩文件被破坏
APK在PC上面可以看作一个压缩文件,在Android系统里面它就是一个手机系统软件文件。
Android系统对APK的识别是从标志头到标志尾,其他多余数据都会无视。
所以说在标志尾添加其他数据对把APK看做压缩文件的PC端来说这个文件被破坏了,
所以你要对其进行解压或者查看都会提示文件已损坏,用反编译工具也会提示文件已损坏,
但是它却不会影响在Android系统里面的正常运行和安装而且也能兼容到所有系统。
但是这种APK压缩包破坏存在APK伪加密一样的问题,个别市场会不能识别导致不能上传市场。
应用:阻止反编译
-------------------------------------------------------------------------------------------------------------------
> 正在清理旧工作目录 ... - 成功!旧工作目录被清理到系统回收站内。
> 正在反编译Apk... - 失败:Exception in thread "main" brut.androlib.AndrolibException: brut.directory.DirectoryException: java.util.zip.ZipException: invalid CEN header (bad signature)
at brut.androlib.ApkDecoder.hasSources(ApkDecoder.java:199)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:83)
at brut.apktool.Main.cmdDecode(Main.java:146)
at brut.apktool.Main.main(Main.java:77)
Caused by: brut.directory.DirectoryException: java.util.zip.ZipException: invalid CEN header (bad signature)
at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:55)
at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:38)
at brut.androlib.res.util.ExtFile.getDirectory(ExtFile.java:55)
at brut.androlib.ApkDecoder.hasSources(ApkDecoder.java:197)
... 3 more
Caused by: java.util.zip.ZipException: invalid CEN header (bad signature)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:214)
at java.util.zip.ZipFile.<init>(ZipFile.java:144)
at java.util.zip.ZipFile.<init>(ZipFile.java:158)
at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:53)
... 6 more
> .smali输出目录:F:\360云盘\书籍\android\ApkIDE\Work\com.example.helloapplication
> .class输出目录:Not supported.
-------------------------------------------------------------------------------------------------------------------
可以安装运行。无系统限制,可能会影响apk上线。
3、master key
原理:apk压缩包里构造两个classes.dex,原dex在后,java层的签名校验代码读取到一个dex时会继续读,最后是用的远dex进行签名校验,ok通过。
但是在运行时却是C代码,读取第一个dex(伪造的)就运行了。
4、second master key
漏洞的原理是java代码在读取“Central directory file header”结构的“Extra field length”字段(java代码视为有符号short,C代码视为无符号short)时,如果大小超过0x7FFF则认为是负数,代码逻辑将负数一律按零处理。
思考:comment字段是否也一样?如果是,则需要检测。
5、another master key
Java使用的fileNameLength是从索引段的ZipEntry获得的,而C则是从数据段的ZipEntry获得的,所以就这里造成了不一致性,导致java和c定位到的data[]不一致。因此可以在数据段的ZipEntry中构造一个不一样的fileNameLength,进而让java校验签名时读取的是合法的文件,而c在安装是读取的是恶意的文件,绕过签名验证。
由于fileNameLength这个字段的类型是一个无符号short,最大值为64K,所以为了能让C代码成功能跳转到fake classes.dex,必须要求 real classes.dex加上"classes.dex"字符串的长度小于64k。也就是说,对这个漏洞的利用要求被绕过的原始正常文件的大小必须小于64k,这对这个漏洞的利用带来了很大的限制,所以实际的危害并不很大。
替换资源文件,例如修改apk图标。
相关文章推荐
- Android 四大组件学习之Service五
- android 使用Theme + attr换肤
- android闹钟(五):实现闹钟功能
- Android——coredump解析
- 我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(二)Android客户端功能展示
- Android的NDK开发(2)——利用Android NDK编写一个简单的HelloWorld
- Android的NDK开发(2)——利用Android NDK编写一个简单的HelloWorld
- android闹钟(四):实现计时器
- Android的NDK开发(1)————Android JNI简介与调用流程
- Android的NDK开发(1)————Android JNI简介与调用流程
- 在AndroidStudio中创建java应用
- android闹钟(三):实现时钟功能
- android闹钟(二):整体布局和MainActivity
- android 卡片式视图组件 cardview的使用
- Android动画学习笔记-Android Animation
- android 模拟器模拟非root权限
- android闹钟(一):运行效果
- android解析,组包XML文件
- Android Studio关联SVN进行版本控制
- android wifi 相关方面整理