安卓安全小分队发现Android新漏洞

[车联网安全自学篇] Android安全之绕过APK重打包签名校验「防篡改校验」 近年来,移动设备(例如智能手机和平板电脑)的发展十分迅速,Android平台占据了智能移动市场的主要份额,随着移动设备的流行和普及。涌现出大量的移动应用,这些移动应用不仅增强了移动设备的功能,还大大丰富了用户体验,用户逐渐习惯于使用多样的应用来娱乐和办公,智能移动设备和移动应用已经成为人们生活中不可或缺的一部分。 阅读详情

    几天前,Bluebox Security刚曝出了Android存在安全漏洞。小分队立刻就掌握了其技术细节。最近几天经过对Android的研究,小分队又发现了一个类似的漏洞。攻击者可以对原apk进行修改,但不修改其原apk的签名。只是原理跟Bluebox Security曝的漏洞不太一样,但效果是一样的。

 

这次我们讲讲技术细节:

1.在讲这个漏洞之前,首先需要搞明白java里short类型转int类型的问题。要理解这个漏洞,必须明白这个技术点。

public class JavaTest {
    public static void main(String[] args) {
        short a = (short)0xFFFF;
        int b;
        b = a;
        System.out.println(b);
        b = a & 0xFFFF;
        System.out.println(b);
    }
}


如果你能很清楚的了解上述代码中两次打印变量b的值有何不同,以及为何不同的话,这部分就可以先跳过了。否则还是要先弄清楚再往下看。

 

2. Zip文件格式

    在每个Zip文件中都有一个Central directory,Central directory中的每一项是一个File header。这个File header的结构对应到Android代码的类就是ZipEntry。File header结构中有一个偏移量指向local file header,local file header后面就紧跟着file data。接下来我们详细看一下local file header的结构。        

        local file header signature     4 bytes  (0x04034b50)
        version needed to extract       2 bytes
        general purpose bit flag        2 bytes
        compression method              2 bytes
        last mod file time              2 bytes
        last mod file date              2 bytes
        crc-32                          4 bytes
        compressed size                 4 bytes
        uncompressed size               4 bytes
        file name length                2 bytes
        extra field length              2 bytes
        file name (variable size)
        extra field (variable size)

可以看到,除最后2个域以外,local file header的其他域都是定长的。而这两个变长域的长度是由file name length和extra field length所确定。再次说明,紧跟在extra field后面的就是文件的数据file data了。

 

3. Android如何进行apk校验

Android在进行apk文件校验时,会调到ZipFile的public InputStream getInputStream(ZipEntry entry)函数。这函数中,有这么一段:

        RAFStream rafstrm = new RAFStream(raf, entry.mLocalHeaderRelOffset + 28);
        DataInputStream is = new DataInputStream(rafstrm);
        int localExtraLenOrWhatever = Short.reverseBytes(is.readShort());
        is.close();
 
        // Skip the name and this "extra" data or whatever it is:
        rafstrm.skip(entry.nameLength + localExtraLenOrWhatever);
        rafstrm.mLength = rafstrm.mOffset + entry.compressedSize;
        if (entry.compressionMethod == ZipEntry.DEFLATED) {
            int bufSize = Math.max(1024, (int)Math.min(entry.getSize(), 65535L));
            return new ZipInflaterInputStream(rafstrm, new Inflater(true), bufSize, entry);
        } else {
            return rafstrm;
        }

注意:上述代码中红色部分。localExtraLenOrWhatever就是local file header结构中的extra field length。回想一下我们第一部分将的技术点,如果这里的extra filed length的大小是大于2^15,会怎么样?

没错,localExtraLenOrWhatever将会是负值。因此接下来,rafstrm.skip(entry.nameLength + localExtraLenOrWhatever); 这句将无法真正跳过变长域file name (variable size) 和extra field (variable size)。反而有可能呢会跳到file name (variable size)中,甚至file name (variable size)之前。当然为了攻击方便,我们还是期望它跳到file name (variable size)中。

 

4. 如何实施攻击

   要改变一个apk的行为,显然攻击的目标就是apk里的classes.dex文件。对于classes.dex文件在apk文件中的local file header结构,其file name (variable size)域的内容肯定就是“classes.dex”了。注意,这里的后缀名dex,正好和dex文件开头的三个字节完全相同(不理解的,参见dex文件格式)。

    a) 利用这一点,从file name (variable size)域“classex.dex”的“.”之后开始我们可以写入一个完整的dex文件。这个dex文件必须是原apk里的classes.dex文件。只有这样才能绕过签名验证

    b) 修改extra field length,使之为0xFFFD。因为这个值刚好为-3。根据漏洞,rafstrm.skip(entry.nameLength + localExtraLenOrWhatever); 这句就会跳到file name (variable size)域中的“.”之后。也就是一个dex文件的开始,这里必须是原dex文件内容。

    c) 修改local file header之后的file data数据。在这里写入带有攻击代码的classes.dex内容。

    d) 以上的修改会带来apk文件一些结构上的调整,比如扩充extra field域,调整file data大小等。

具体攻击模型,如下图:

    

 

5. 总结

   总的来说该攻击手段,首先利用了Android在签名验证过程中,对Zip文件相应16位域的读取时,没有考虑到大于2^15的情况。(因为java的int , short, long都是有符号数,而不像C/C++里有无符号数)。

   其次利用了Zip文件中的local file header结构的extra field域来存放原classes.dex。但这个域的大小最多只能是2^16-1,因此被攻击的Apk里的classes.dex大小必须在64K以内。否则,就无法对其进行攻击。这算是这种攻击方式的一个限制。

   最后还有一个问题补充说明:之所以这种攻击方式能成功,还在于在运行时,系统抽取的是hacked classes.dex,而在签名校验时,验证的是extra域里的classes.dex。前者是在libdex.so中实现,后者在Java层实现。是由Java层跟Native层不一致导致。

一文读懂AI大模型时代的RAG技术 RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合检索技术与生成模型的技术架构,旨在通过动态引入外部知识库增强大语言模型(LLM)的生成能力。其核心思想是通过检索系统从外部数据源(如企业知识库、实时文档等)获取相关信息,并将检索结果作为上下文输入生成模型,以提高生成答案的准确性、时效性和专业性 阅读详情

相关推荐

GIS坐标系转换以及空间校正和地理配准

许多小伙伴都对坐标系,投影这类问题迷迷糊糊,我之前也一样,现在总结一下。 坐标系的转换1.为什么要进行坐标系的转换?2. 不同坐标系的介绍1.地理坐标系我国常见的地理坐标(1).北京54坐标系(2).西安80坐标系(3).WGS-84坐标系(4).大地2000坐标系2.投影坐标系我国常用的投影坐标系(1) UTM投影(2) 高斯-克吕格投影(3) 兰伯特投影(4) 阿尔伯斯投影投影坐标系的选择3. 坐标系的转换1.已知坐标系之间的转换1.1 两坐标系的参考椭球相同1.2 两坐标系的参考椭球不一致,但是GIS

m0_47258611的博客 8915

Frida绕过APK的签名校验

如果代码被混淆,我们无法通过搜索关键字定位到签名校验代码位置,就需要使用firda进行hook定位。执行Application(attach,onCreate方法)android.content.Context保存应用环境信息。可以尝试使用签名关键字搜索或hook的方式去定位关键代码。执行MainActivity(onCreate方法)获取安卓系统信息和APP的信息。执行开屏界面Activity。Signature类。............

飞得更高肥尾沙鼠 2295

MODBUS通讯不求人:手把手教你用三菱FX2N控制士林变频器

本文详细介绍了如何使用三菱FX2N PLC通过MODBUS协议控制士林变频器,涵盖硬件连接、参数配置、程序设计及通讯优化等关键步骤。特别针对没有内置MODBUS函数块的老款PLC,提供了CRC校验和稳定数据交换的实用解决方案,帮助工程师快速实现工业自动化设备的高效通讯。

v4w5x6的博客 226

Android签名校验去除 PMSHook升级版

拦截PackageInfo的创建过程,判断是否为目标程序,然后对生成的PI对象的signatures字段进行替换,即可完成签名校验的通过。使用方法:在软件入口处的构造函数中或者静态初始化去除调用KillPM函数即可,传入的参数第一个是包名,第二个是签名的charString。基本上可以绕过所有使用安卓自身API进行的校验,和之前的PMS代理不同,这种方式刚刚出现,被针对的少,因此过签强度更高。

m0_47587308的博客 2741

实战复盘:一次绕过WAF的EDUSRC SQL注入漏洞挖掘

本文详细复盘了一次针对教育行业网站的SQL注入漏洞挖掘实战。通过手动信息收集发现可疑点,并利用‘+’号替换空格等技巧,成功绕过WAF(Web应用防火墙)的拦截。文章逐步演示了从判断注入点到手工获取数据结构、最终解密进入后台的完整过程,并总结了手工测试的优势及高级绕过思路,强调了在EDUSRC等授权范围内进行安全测试的重要性。

weixin_28622215的博客 192

ESP-IDF 利用ESP32构建智能音乐播放器(一)---------- 实现SD卡MP3文件的解码与播放

本文详细介绍了如何利用ESP32和ESP-IDF开发框架,从零开始构建一个智能音乐播放器。文章重点讲解了如何通过SD卡模块读取MP3文件,并集成Helix MP3解码库进行软件解码,最终通过I2S接口驱动音频模块实现播放。内容涵盖硬件连接、软件环境搭建、核心解码与输出逻辑,为嵌入式音频开发提供了完整的实战指南。

weixin_29163797的博客 234

Android第二个绕过签名认证漏洞原理

一、漏洞描述 该漏洞最早由国内“安卓安全小分队”(http://blog.sina.com.cn/u/3194858670)发现并提交给Google,Google迅速修复了该漏洞,对应编号为bug 9695860。该漏洞是即Bluebox Security提报Android 绕过应用签名认证漏洞后又一成功绕过Android签名认证漏洞。该漏洞原理与Bluebox Securit...

ithome 453

SAP公司间采购后台配置及前台操作详解

公司间采购后台配置及前台操作详解 SAP 实施中公司间交易几乎每个项目都会有此业务需求,比如内地很多公司都会在香港设置贸易型子公司。通过香港公司接单,然后转内地公司生产,或内地公司通过香港公司采购进口原材料,这些业务必然会涉及到公司间交易,下面我将详细说明下SAP是如何实现这种业务场景的,供大家参考。 配置前必须前台先创建公司间供应商主数据和客户主数据 1. 创建相应的客户主数据 功能说明 公司间...

weixin_40672823的博客 1万+

Android 系统屏蔽GMS错误提示框

由于系统没有过Google认证,所以gms有时会弹错误提示框;便于用户体验,可以将错误对话框屏蔽掉。 废话不多说,只需要修改: --- a/frameworks/base/services/core/java/com/android/server/am/AppErrorDialog.java +++ b/frameworks/base/services/core/java/com/android/server/am/AppErrorDialog.java @@ -32,6 +32,8 @@ impor

hedaibo88的博客 776

大数据运营可视化:Tableau+PowerBI数据看板搭建教程

当企业数据量从“GB级”跃升到“TB级”,运营人员面临的最大挑战不再是“如何收集数据”,而是“如何让数据说话”。数据看板作为“运营指挥中心的仪表盘”,能将零散的用户行为、业务指标、流量趋势浓缩成可快速解读的视觉语言。本文结合Tableau(自由探索的“数据瑞士军刀”)与PowerBI(微软生态的“组合家具”)两大工具,从需求分析→数据准备→指标设计→视图搭建→ dashboard 组合,一步步教你搭建符合业务逻辑的运营看板。

AI智能探索者的博客 1367

如何通过conda安装HyPhy教程

本文介绍了在Ubuntu系统上通过conda安装分子进化分析工具HyPhy的详细步骤。首先创建conda环境并指定Python 3.8版本,然后通过bioconda通道安装HyPhy软件包。安装完成后可通过conda list命令验证安装。文中还特别指出可能遇到的libcrypto.so.1.1共享库缺失错误,并提供了解决方案的参考链接。该教程配有安装过程截图,帮助用户直观了解操作流程和验证安装结果。

猿小白的博客 8261

独家分析:安卓“Janus”漏洞的产生原理及利用过程

一旦攻击者将植入恶意代码的仿冒的App投放到安卓商店等第三方应用市场,就可替代原有的App做下载、更新。网友安装这些仿冒App后,不仅会泄露个人账号、密码、照片、文件等隐私信息,手机更可能被植入木马病毒,进而或导致手机被ROOT,甚至被远程操控。详情可以参考及。在第一时间监测到“janus”漏洞的情况后,顶象技术及时更新了“安全SDK”的防御策略,并率先发布了针对该漏洞的防护方案,以帮助广大用户防范基于该漏洞的攻击威胁。

小司机的奥拓 504

基于STM32L4XX、HAL库的AD7768BSTZ 模数转换器ADC驱动程序设计

/ 默认SPI配置。// 读取通道数据命令。// 通过SYNC_IN引脚触发转换(如果使用)// 处理数据...// 或者通过SPI命令。// 初始化AD7768。// SPI1引脚配置。

zhusl6688的博客 462

Android小分队教你怎么利用Bluebox Security 曝的漏洞

声明:本文所讨论之技术仅用于学习交流之用,请不要用来破坏他人手机安全和做违法的事情,否则,一切后果自负。   回顾漏洞新闻: http://bluebox.com/corporate-blog/bluebox-uncovers-android-master-key/   1. 漏洞原理 漏洞的关键点在于,Android假设一个APK包中的文件是不会重名的。可实际

android_squad的专栏 785

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

安卓“Janus”漏洞的产生原理及修复

Google在12月发布的安卓系统安全公告中披露了一个名为“Janus”安卓漏洞(漏洞编号:CVE-2017-13156)。该漏洞可以让攻击者绕过安卓系统的signature scheme V1签名机制,进而直接对App进行篡改。而且由于安卓系统的其他安全机制也是建立在签名和校验基础之上,该漏洞相当于绕过了安卓系统的整个安全机制。   一旦攻击者将植入恶意代码的仿冒的App投放到安卓商店等

明潮的BLOG 7201

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android曝重大漏洞,小分队已掌握其技术细节

北京时间7月4日晚间消息,移动网络安全公司Bluebox Security周四宣布,在Android操作系统中发现重大安全漏洞,可能影响到当前99%的Android设备。     Bluebox Security称,该漏洞自四年前的Android 1.6(Donut)就已经存在。它允许恶意开发人员修改合法APK文件的代码,同时并不破坏其密码签名。     http://bluebox.

android_squad的专栏 628

学习Android三个签名漏洞

主要是想记录下自己学习的

dxymoon的专栏 1167

Android安全学习小记(二)

上次推荐了一个大致学习路线,主要是以软件安全为主。 这次主要介绍一些值得关注和收藏的网址,blog以及一些这段时间用过的工具,主要用于Android软件的分析以及局域网渗透 值得关注的网址与blog: 安卓小分队csdn http://my.youkuaiyun.com/jiazhijun  手机老王csdn http://my.youkuaiyun.com/u011069813  ClaudXiao ht

vqqYuAn的专栏 1070

Android 第二个签名漏洞 #9695860 揭秘

Android 第二个签名漏洞 #9695860 揭秘 时间:2013/10/28   作者:周荣誉 在android master key (#8219321)签名漏洞爆出来不久,国内的安全团队“安卓安全小分队”在其博客(http://blog.sina.com.cn/u/3194858670)发布文章称发现另外一个android签名漏洞,但是小分队提出的利用该漏洞的

birdman2005的专栏 1160

安天移动安全:Janus高危漏洞深度分析

一、背景介绍   近日,Android平台被爆出“核弹级”漏洞Janus(CVE-2017-13156),该漏洞允许攻击者任意修改Android应用中的代码,而不会影响其签名。 众所周知,Android具有签名机制。正常情况下,开发者发布了一个应用,该应用一定需要开发者使用他的私钥对其进行签名。恶意攻击者如果尝试修改了这个应用中的任何一个文件(包括代码和资源等),那么他就必须对APK进行重新签名

omnispace的博客 1253

小分队招聘,简历请发至chenjl@marvell.com

Job Title: Senior Android Security Software Engineer Department: APSE Location: Shanghai   Job Description: In this position, you will be working with team to build up the system level security s

android_squad的专栏 808

Android安全小记(二)

这次主要介绍一些这段时间用过的工具,主要用于Android软件的分析以及局域网渗透 渗透利器  dsploit 用过知道了,主要是针对局域网下的渗透 APK逆向工具 vts (推荐,国外好货) APK改之理 (中文) IDA Pro 该工具不多说自个找破解的吧6.1以上支持Android 反编译 JD-GUI 针对Android配合dex2jar使用,不过反编译出来的jav

研之庭 2409

Janus高危漏洞深度分析

转自:http://www.freebuf.com/articles/paper/158133.html http://www.freebuf.com/articles/terminal/156862.html 一、背景介绍 近日,Android平台被爆出“核弹级”漏洞Janus(CVE-2017-13156),该漏洞允许攻击者任意修改Android应用中的代码,而不会影响其签名。 众所周知...

云守护的专栏 1158
上一篇: Android小分队教你怎么利用Bluebox Security 曝的漏洞
下一篇: Android曝重大漏洞,小分队已掌握其技术细节
鲶鱼团队
博客等级 码龄14年 36粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值