android ro.boot.mac,Android Verified Boot浅知分享

展示

从开机的时候,看提示,进入验证启动认知:

d354280f1f27

图片发自简书App

d354280f1f27

图片发自简书App

流程:

d354280f1f27

图片发自简书App

目的

保护系统的安全性。

涉及的范围:从受硬件保护的信任根到引导加载程序,再到启动分区和其他已验证分区(包括 system、vendor 和可选的 oem 分区)的完整信任链。

实现的方式:

1.在设备启动过程中,无论是在哪个阶段,都会在进入下一个阶段之前先验证下一个阶段的完整性和真实性

2.检查是否存在内置了回滚保护的正确 Android 版本

3. Android 设备将其完整性状态传达给用户

理解框架

d354280f1f27

图片发自简书App

实战

前言

d354280f1f27

图片发自简书App

* Android P + kernel-4.4 or kernel-3.18

- download preloader with verified boot disabled which location is the same as scatter file //preloader__SBOOT_DIS.bin

- adb root

- adb disable-verity

- adb reboot

- adb root

- adb remount

* Android P + kernel-4.9 or after

- download preloader with verified boot disabled which location is the same as scatter file. //preloader__SBOOT_DIS.bin

- boot to Home Screen

- go to setting -> system -> Developer options -> OEM unlocking

- adb reboot bootloader

- fastboot flashing unlock

- press volume up key

- fastboot reboot

- adb root

- adb disable-verity

- adb reboot

- adb root

- adb remount

实例一:

效果展示:

d354280f1f27

图片发自简书App

代码分析:

d354280f1f27

图片发自简书App

快速验证方法:

d354280f1f27

图片发自简书App

adb shell验证:

getprop ro.oem_unlock_supported

1---代表打开

0---代表关闭

d354280f1f27

图片发自简书App

通过如下操作:

- adb reboot bootloader

- fastboot flashing unlock

- press volume up key

- fastboot reboot

之后:

adb shell

解锁成功后检查这两个属性会从

[ro.boot.flash.locked]: [1]

[ro.boot.verifiedbootstate]: [green]

变成

[ro.boot.flash.locked]: [0]

[ro.boot.verifiedbootstate]: [orange]

补充:

ro.boot.flash.locke在哪里进行改变的?

开机启动过程。具体为system/core/init/init.cpp

main(int argc, char** argv) {

·····

export_oem_lock_status();

·····

}

export_oem_lock_status(){

if (!android::base::GetBoolProperty("ro.oem_unlock_supported", false)) {

return;

}

std::string value = GetProperty("ro.boot.verifiedbootstate", "");

if (!value.empty()) {

property_set("ro.boot.flash.locked", value == "orange" ? "0" : "1");

}

}

实例二:

效果展示:

d354280f1f27

图片发自简书App

怎么让禁止解锁变成可以解锁的状态?

代码分析为什么变成禁止解锁状态?

d354280f1f27

图片发自简书App

具体方法:

1.直接操作/data/system/users/0.xml中的值:

UserManagerService.java中有对/data/system/users/0.xml进行处理

eg:

灰色的值:

正常的值:

即:

adb root

adb pull /data/system/users/0.xml 本地路径

修改0.xml中的值

adb push 本地修改之后的文件 /data/system/users/

adb reboot

就可以满足要求

2.代码实现的方式:

修改配置文件

UserManagerService.java的构建方法中:

UserManagerService(......)-->readUserListLP()--->fallbackToSingleUserLP()

详解:

fallbackToSingleUserLP(){

***********

Bundle restrictions = new Bundle();

try {

final String[] defaultFirstUserRestrictions = mContext.getResources().getStringArray(

com.android.internal.R.array.config_defaultFirstUserRestrictions);

for (String userRestriction : defaultFirstUserRestrictions) {

if (UserRestrictionsUtils.isValidRestriction(userRestriction)) {

restrictions.putBoolean(userRestriction, true);

}

}

} catch (Resources.NotFoundException e) {

Log.e(LOG_TAG, "Couldn't find resource: config_defaultFirstUserRestrictions", e);

}

********

}

原生为:

frameworks/base/core/res/res/values/config.xml

gms包中overlay为:

gms_overlay/frameworks/base/core/res/res/values/config.xml

"no_oem_unlock"

参考学习

https://source.android.com/security/verifiedboot/index.html

https://source.android.com/security/verifiedboot/verified-boot.html

https://source.android.com/security/verifiedboot/dm-verity.html

https://gitlab.com/cryptsetup/cryptsetup/wikis/DMVerity

https://blog.csdn.net/sinat_34606064/article/details/77920700

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中信任SSL证书的步骤如下: 1. 将证书文件放到Android项目的assets文件夹下。 2. 创建一个TrustManager来处理证书。 ```java public class TrustAllCerts implements X509TrustManager { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } } ``` 3. 创建一个SSLContext实例,并使用TrustManager初始化它。 ```java try { InputStream inputStream = context.getAssets().open("证书文件名"); CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); Certificate certificate = certificateFactory.generateCertificate(inputStream); KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(null, null); keyStore.setCertificateEntry("ca", certificate); String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(tmfAlgorithm); trustManagerFactory.init(keyStore); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, trustManagerFactory.getTrustManagers(), null); HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); } catch (Exception e) { e.printStackTrace(); } ``` 4. 在请求时设置HTTPS连接方式。 ```java URL url = new URL("https://www.example.com"); HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection(); httpsURLConnection.setRequestMethod("GET"); httpsURLConnection.setConnectTimeout(5000); httpsURLConnection.setReadTimeout(5000); httpsURLConnection.setDoInput(true); httpsURLConnection.setDoOutput(true); ``` 这样就可以信任SSL证书了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值