Android System Info
- android.os.Build
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Build.BOARD 主板
Build.BRAND 系统定制商
Build.SUPPORTED_ABIS CPU指令集
Build.DEVICE 设备参数
Build.DISPLAY 显示屏参数
Build.FINGERPRINT 唯一编号
Build.SERIAL 硬件序列号
Build.ID 修订版本
Build.MANUFACTURER 硬件制造商
Build.MODEL 版本
Build.HARDWARE 硬件名
Build.PRODUCT 手机产品名
Build.TAGS Build 标签
Build.TYPE Build 类型
Build.VERSION.CODENAME 开发代号
Build.VERSION.INCREMENTAL 源码控制版本号
Build.VERSION.RELEASE 版本字符串
Build.VERSION.SDK_INT 版本号
// The following properties only make sense for internal engineering builds.
Build.HOST Host值
Build.USER User名
Build.TIME 编译时间
SystemProperty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17String getProperty
os.version os版本
os.name os名称
os.arch os架构
user.home Home属性
user.name Name属性
user.dir Dir属性
user.timezone 时区
path.separator 路径分隔符
line.separator 行分隔符
file.separator 文件分隔符
java.vendor.url Java vendor url属性
java.class.path Java Class属性
java.class.version Java Class版本
java.vendor Java vendor属性
java.version Java版本
java.home Java Home属性应用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15String board=Build.BOARD
String brand=Build.BRAND
String os_version=System.getProperty("os.version")
String os_name=System.getProperty("os.name")
cd system/
cat build.prop 查看build信息
getprop ro.build.id 获取对应属性值
MRA58K
cd proc/
ls -al 查看文件详细信息
cat cpuinfo 查看cpu信息
PackageManager(应用包信息)
1 | getPackageManager 返回PackageManager对象 |
判断APP类型
1
2
3
4
5app.flags&ApplicationInfo.FLAG_SYSTEM!=0为系统应用
app.flags&ApplicationInfo.FLAG_SYSTEM<=0则为第三方应用
特殊情况,系统应用升级后也成为第三方应用 app.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP!=0
app.flags&ApplicationInfo.FLAG_EXTERNAL_STORAGE!=0为安装在SDCard应用
List<ApplicationInfo> list=pm.getInstalledApplications(PackManager.GET_UNINSTALLED_PACKAGES/MATCH_UNINSTALLED_PACKAGES);
ActivityManager(运行应用程序信息)
1 | ActivityManager.MemoryInfo 全局内存使用信息 |
- 查看packages.xml获取系统信息
1
adb pull data/system/packages.xml
1 | codepath apk安装路径 |
Android安全
- 代码混淆proguard,混淆代码,替换命名,压缩代码,优化编译后的字节码
AndroidManifest 权限声明,权限检查
1
2
3
4检测操作者权限
判断permission名称,如果为空,直接返回DENIED
判断UID,如果为0,则为Root权限,不做权限控制;如果为system server的uid,不做权限控制;如果uid与参数中的请求uid不同,则返回DENIED
PackageManagerService.checkUidPermission()判断uid是否有相应的权限,系统级的platform.xml中进行查找数字证书,APP签名文件
- Linux内核访问权限控制,System,root用户才有权限访问系统文件
- 虚拟机沙箱隔离,每个APP有与之对应的UID
隐患
1
2
3代码漏洞:LaunchAnyWhere,FakeID Bug
Root风险
安全机制不健全反编译工具
apktool
1
2
3
4反编译 apktool.jar d test.apk
生成test文件夹
重新打包 apktool.jar b test.apk
生成重新打包的apk,在dist文件夹中Dex2jar,jd-gui
1
2
3dex2jar.bat classes.dex
生成classes.jar文件
使用jd-gui查看源码apk加密
1
2
3
4
5
6
7buildTypes {
release{
minifyEnabled false //以前属性名是runProguard
proguardFiles getDefaultProguardFile('proguard-android.txt'), //系统默认
'proguard-rules.pro' // 项目自定义
}
}加固