m4bln


  • 首页

  • 归档

  • 标签

  • hint

  • 关于

  • 搜索

手机短信PDU格式分析

发表于 2017-12-10 | 阅读次数:
Text模式和PDU模式目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。 PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般的PDU编码由A B C D E F G H I J K L M十三项组成。 A:短信息中心地址长度,2位十六进制数(1字节)。B:短信息中心号码类型,2位十六进制数。C:短信息中心号码,B+C的长度将由A中的数据决定。D:文件头字节,2位十六进制数。E:信息类型,2位十六进制数。F:被叫号码长度,2位十六进制数。G:被叫号码类型,2位十六进制数,取值同B。H:被叫号码,长度由F中的数据决定。I:协议标识,2位十六进制数。J:数据编码方案,2位十六进制数。K:有效期,2位十六进制数。L:用户数据长度,2位十六进制数。M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。 PDU举例 例1发送:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“Hello!”。从手机发出的PDU串可以是108 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 96 03 29 30 F0 00 00 00 06 C8 32 9B FD 0E 01 对照规范,具体分析:SMSC#+8613800250500Sender:+8613693092030TP_PID:00TP_DCS:00TP_DCS-popis:Uncompress ...
阅读全文 »

cve-2014-7911

发表于 2017-12-09 | 阅读次数:
0x00 简介CVE-2014-7911是安卓上序列化的提权漏洞,该漏洞允许恶意应用从普通应用权限提权到system用户执行命令。漏洞的成因源于在安卓系统(<5.0)中,java.io.ObjectInputStream并未校验输入的java对象是否是实际可序列化的。攻击者因此可以构建一个不可序列化的java对象实例,恶意构建其成员变量,当该对象实例被ObjectInputStream反序列化时,将发生类型混淆,对象的Field被视为由本地代码处理的指针,使攻击者获得控制权 0x01 漏洞分析向system_server传入的不可序列化的android.os.BinderProxy对象实例,其成员变量在反序列化时发生类型混淆,由于BinderProxy的finalize方法包含native代码,于是在本地代码执行时将成员变量强制转换为指针,注意到成员变量是攻击者可控的,也就意味着攻击者可以控制该指针,使其指向攻击者可控的地址空间,最终获得在system_server(uid=1000)中执行代码的权限。 下面主要结合POC对漏洞进行详细分析。 构建可序列化对象 12345public class BinderProxy implements Serializable { private static final long serialVersionUID = 0; private int mObject = 0x1337beef; private int mOrgue = 0x1337beef; } mOrgue和mObject的类型参照源码(frameworks/base/core/java/android/os/Binder.java) 123Bundle bundle = new Bundle();AAdroid.os.Binder ...
阅读全文 »

Android AIDL笔记

发表于 2017-12-09 | 阅读次数:
在Android系统中,通常一个进程不能访问其它进程的内存。AIDL(Android Interface definition language)允许定义客户端和服务端都同意为了彼此之间的通信使用进程间通信(IPC)的编程接口,其本质是用Binder实现的。 以下为一个简单的AIDL实例 服务端1.新建AIDL文件首先用Android Studio 新建一个Android工程,这里命名为com.example.AIDL_Server。在工程目录下,“右键“->”New”->”AIDL File”,这里接口命名为“MyAidl”,每个.aidl文件必须定义一个接口并且只需要接口声明。 这里定义接口方法为Add,返回客户端输入的两个数之和。MyAidl.aidl文件如下: 12345package com.example.aidl_server.myapplication;interface MyAidl { int Add(int a,int b);} 接着Make一下,自动会生成对应的Java文件,生成的文件名和.aidl文件名匹配,但扩展名为.java,本质为Binder实现。 ###2.实现接口上一步定义好了接口和Add方法,需要进一步实现。新建一个Service,在Service中新建一个内部类MyAidl.Stub,在该类中实现Add接口。 3.对外暴漏接口在Service中的onBind函数中返回接口,另外还需注意在manifest文件中声明Service接口,代码如下: 123456789101112131415161718 public class Add extends Service { private MyAidl.Stub mRemote = new MyAidl.Stub(){ ...
阅读全文 »

cve-2015-3839(短信 Dos)

发表于 2017-12-09 | 阅读次数:
漏洞描述漏洞发生在Android自带短信应用中updateMessageStatus函数中,该函数用于发送短信完成后更新状态。代码中未对异常进行处理(使用try…finally…,未加catch),且相关的服务对外暴露,恶意程序可以构造恶意的短信发送广播,导致自带的短信应用无法工作。 漏洞代码如下: 当message为null时,访问message对象中的函数或变量就会发生空指针异常,导致短信应用Crash. 函数开始对message是否为空作了判断,因此需要绕过判断。createFromPdu函数是对收到的pdu格式的短信进行解析,返回一个SmsMessage对象,如下图: 该函数根据format的格式(3GPP为GSM,3GPP2为CMDA)去解析PDU,最后返回一个wrappedMessage对象,最后的return没有直接返回wrappedMessage对象,而是通过new的方式返回,导致返回值永不为null。因此,只要wrappedMessage对象为null时,就会绕过”if (message==null)”的检查,触发空指针异常。 漏洞利用为使wrappedMessage对象为null,只需要构造一个无效的PDU串即可。 >PDU为发送短信时一种固定的编码格式,一般的PDU编码由A B C D E F G H I J K L M十三项组成。A:短信息中心地址长度,2位十六进制数(1字节)。B:短信息中心号码类型,2位十六进制数。C:短信息中心号码,B+C的长度将由A中的数据决定。D:文件头字节,2位十六进制数。E:信息类型,2位十六进制数。F:被叫号码长度,2位十六进制数。G:被叫号码类型,2位十六进制数,取值同B。H:被叫号码,长度由F中的数据决定。I:协议标识,2位十六进制数。J:数据编码方案,2位十六进制数。K:有效期,2位十六进制数。L:用户 ...
阅读全文 »

Android源码编译命令

发表于 2017-12-09 | 阅读次数:
1.编译过程1) source build/envsetup.sh 2) lunch,选择编译的平台 3)make -j4 ##2. 命令介绍 1)m 编译整个android工程 2)mm 编译当前目录下模块,不包括依赖项 3)mmm path 编译指定目录下的模块 4)mma 编译当前目录下所有模块,包括依赖项 5)mmma path 编译指定目录下所有模块,含依赖项 PS: mm/mmm编译较快,mma/mmma会把所有的依赖项一同编译,比较缓慢,首次编译时用mma,以后用mm编译。 3.Android.mk解析1. mk文件 一个android子项目中会存在一个或多个Android.mk文件 1) 单一的Android.mk文件 直接参考NDK的sample目录下的hello-jni项目,在这个项目中只有一个Android.mk文件 2) 多个Android.mk文件 如果需要编译的模块比较多,我们可能会将对应的模块放置在相应的目录中, 这样,我们可以在每个目录中定义对应的Android.mk文件(类似于上面的写法), 最后,在根目录放置一个Android.mk文件,内容如下: include $(call all-subdir-makefiles) 只需要这一行就可以了,它的作用就是包含所有子目录中的Android.mk文件 2. 变量注意:‘:=’是赋值的意思;’+=’是追加的意思;‘$’表示引用某变量的值。 1)LOCAL_PATH: 这个变量用于给出当前文件的路径。 必须在 Android.mk 的开头定义,可以这样使用: LOCAL_PATH := $(call my-dir) 如当前目录下有个文件夹名称 src,则可以这样写 $(call src), ...
阅读全文 »

cve-2016-5348(利用大文件使gps crash)

发表于 2017-12-09 | 阅读次数:
描述通过中间人攻击(MITM)构造一个gps相关的文件(由Qualcomm提供),可以使Android设备的gps服务崩溃,设备重启。问题出现在AOSP代码和由Quanlcomm实现的XTRA下载代码中。该漏洞还有可能影响所有的Qualcomm GPS芯片。 背景(GPS和gpsOneXtra)大多数移动设备通过GPS(Global Positioning System)实现定位,它由美国的军事部门开发和维护,其他国家也有类似的定位系统,如俄罗斯的GLONASS,欧洲的Galileo,中国的北斗。 广播星历是定位卫星发出的无线电信号上载有预报一定时间内卫星根数的电文信息,通过星历接收者可以很快获得离自己最近的卫星,避免了依次去查找卫星。 Qualcomm开发了一套系统称为gpsOneXtra,通过它设备可以从高通的服务器上下载卫星数据(Xtra文件),该文件包含了当前的卫星位置数据以及未来7天卫星可能的位置,大多数的高通gps芯片都支持这项技术。 ##背景2 -Android和gpsOneXtra文件 通过对Android设备的流量监控发现,每当设备连接到WiFi网络时,会向高通的服务器发起请求,获取gpsOneXtra文件。在Android相关的源码中,出现了以下url: 123http://xtra1.gpsonextra.net/xtra.binhttp://xtra2.gpsonextra.net/xtra.binhttp://xtra3.gpsonextra.net/xtra.bin 123http://xtrapath1.izatcloud.net/xtra2.binhttp://xtrapath2.izatcloud.net/xtra2.binhttp://xtrapath3.izatcloud.net/xtra2.bin 使用whois工具查询这些域名,发现 ...
阅读全文 »

Android源码结构

发表于 2017-12-09 | 阅读次数:
abi应用程序二进制接口(abi is application binary interface) artAndroid运行时机制相关 bionicLinux内核中库 libc C库 limdl 动态链接库相关 libm C数学函数,运算相关 libstdc++ 标准C++库 bootable引导、安装程序,其他设备启动的东西 buildbuild的时候的一些脚本和环境 cts兼容性测试框架(compatibility test suite)(没用过) dalvikJava虚拟机相关 development开发相关的工具,SDK、NDK等 devices特定厂商的设备文件 docs文档相关 external外部库和工具的源代码。Webkit,Sqlite,zlib等 frameworks重要的目录之一。System Server、Package Manager、Activity Manager等关键服务的实现,java层到native层的映射 hardware部分厂家开源的硬件适配层(HAL)代码,Wifi、电源等 kernel内核源码 libcore一些核心的库 Dalvik dom expectations include json luni support xml libnativehelper没用过 ndk本地开发包 out编译完成后输出目录,out/target/product/genetic 目录存放编译完成的镜像。 packages标准的应用程序,相机、短信、拨号等 pdkplatform build kit,方便vendor适配最新android,避免碎片化 prebuilt预先编译好的二进制文件,例如交叉编译工具等 sdk开发环境 systemandroid核心系统,可以认为是一个微型的Linux系统,运行在Dalvik虚拟机和java层 ...
阅读全文 »

apk反调试-模拟器检查-签名检测

发表于 2017-12-09 | 阅读次数:
一、模拟器检测 基于模拟器的IMSI、IDS、默认文件等几个方面特征进行检测 基于CPU的检测(如是否包含inter、amd等字段) 电池信息、温度、电量变化等 代码示例: 123456789101112131415//需要添加android.permission.READ_PHONE_STATE权限public boolean isEmulatorByImei(Context context){ TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String imei = tm.getDeviceId(); if (imei == null || imei.equals("000000000000000")){ return true; } return false; }public boolean isEmulatorByBuildModel() { Log.e("MODEL=", Build.MODEL); Log.e("MANUFACTURER=",Build.MANUFACTURER); return ( Build.MODEL.equals("sdk")) || (Build.MODEL.equals("google_sdk") ); } 二、签名监测(native)签名检测在一般在java层实现,通过与远程服务器交互完成校验。如果没有本地校验,则尽可能在native层实现,这里利用反射的方式。 代码示例: 123456 ...
阅读全文 »

关于分辨率、4k、色域色深、HDR

发表于 2017-12-05 | 阅读次数:
解释4k技术,首先需要了解几个概念: 分辨率分辨率,可以从显示分辨率与图像分辨率两个方向来分类。 显示分辨率显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少。例如800×600的分辨率,是指在整个屏幕上水平显示800个像素,垂直显示600个像素。 显然,分辨率越高,显示屏可显示的像素就越多,图像就越清晰。 图像分辨率图像分辨率指图像中存储的信息量,是每英寸图像内有多少个像素点,分辨率的单位为PPI(Pixels Per Inch),通常叫做像素每英寸,图像分辨率的表达方式也为“水平像素数×垂直像素数”。 图像分辨率和显示分辨率不匹配?显示器内部有一颗重要的集成电路叫Scaler IC,是专门用来处理当图像分辨率与显示器分辨率不同时的显示方式的。为便于理解,以具体例子来做说明。 如果图像分辨率小于显示器分辨率,如果仍以1:1显示,即一个像素对应一个像素,那屏幕就不会满屏。比如显卡输入640x480,而显示器为1280x1024,就会看到显示器左上角640x480的区块有清晰的图像,而其它剩余区域都是黑色的。为了实现满屏,就要实现图像的缩放(Scaling),做法就是要给画面补足像素,水平方向640个像素须补足到1280个像素,垂直方向480个像素要补足到1024个像素,插入像素的插值算法取决于Scaler IC。 当图像的分辨率大于显示器时,则相反,不是补足而是要减少像素个数,这时图片的像素会被压缩,画面细节受到损失,细节分辨不清。例如用数码相机的屏幕也可以看到完整的照片,不过感觉很模糊,放在电脑上看就好多了,因为屏幕的分辨率低。 4K技术4k技术通常指4K分辨率,即指水平方向每行像素值达到或者接近4096个,多数情况下特指4096*2160分辨率。我们通常说的2K分辨率为2048×1080,1080P的分辨率为1920×1080。 广义上来说,4K ...
阅读全文 »

重打包apk以及问题汇总

发表于 2017-11-19 | 阅读次数:
重打包APK反编译和编译使用Apktool (https://ibotpeaches.github.io/Apktool/) 反编译:1apktool d xxx.apk -o smali_path -r,–no-res 不解析资源文件-s,–no-src 不解析代码文件 编译:1apktool b smali_path -o new.apk 签名: 使用keytools生成一个私钥(keytool 位于 JDK 中的 bin/ 目录中)12keytool -genkey -v -keystore my-release-key.jks-keyalg RSA -keysize 2048 -validity 10000 -alias my-alias 输入密码和“Distinguished Name”字段等其他信息后,会在当前目录生成一个私钥文件my-release-key.jks 通过 apksigner 使用私钥对APK进行签名1apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk apksigner位于SDK目录的build-tools目录下。必须说明的是,v2签名方式时在Android7.0后才推出的,所以只有版本>25的SDK\build-tools\中才能找到apksigner.jar 其他坑1. Can’t find framework resources for package of id 问题描述12345678$ apktool d HtcContacts.apk I: Loading resource table...I: Decoding resources...I: Loading resour ...
阅读全文 »
1…789

m4bln

影后入林到驿前

84 日志
2 标签
© 2021 m4bln
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.3