已掉线,重新登录

首页 > 绿虎论坛 > 杂类 > 学习 (发帖)

标题: 向极客进发…自己动手改造挽救了

作者: @Ta

时间: 2020-01-07

点击: 6555

那些数据恢复公司都只恢复硬盘和U盘数据,烧坏的手机主板里的内存数据根本不鸟你……
后来一些极客大神说可以把手机内存芯片拆下来做成U盘插电脑上用数据恢复软件进行导出数据。
准备去弄烙铁、风枪、U盘主控板、飞线等……希望可以成功吧。

[隐藏样式|查看源码]


『回复列表(12|隐藏机器人聊天)』

1.

安卓的data分区有加密,即使从闪存导出了原始数据,也需要解密后才能得到文件内容。

较新的系统使用文件级加密,在手机之外解密可能相当困难:
https://source.android.com/security/encryption/file-based?hl=zh-cn#key-derivation

密钥派生
磁盘加密密钥(512 位 AES-XTS 密钥)以加密形式存储:通过另一个存放在 TEE 中的密钥(256 位 AES-GCM 密钥)进行加密。要使用该 TEE 密钥,需要具备以下三项:

  • 身份验证令牌
  • 扩展凭据
  • secdiscardable hash

身份验证令牌是一个经过加密身份验证的令牌,由 Gatekeeper 在用户成功登录时生成。除非用户提供的身份验证令牌正确无误,否则 TEE 将拒绝用户使用该密钥。如果用户没有任何凭据,则不使用也不需要使用身份验证令牌。

扩展凭据是使用 scrypt 算法进行加盐和扩展处理后的用户凭据。实际上,凭据在被传递到 vold(以便传递到 scrypt)之前,会在锁定设置服务中接受一次哈希处理。扩展凭据会以加密形式绑定到 TEE 中的相应密钥,并享有适用于 KM_TAG_APPLICATION_ID 的所有保证。如果用户没有凭据,则不使用也不需要使用扩展凭据。

secdiscardable hash 是 16 KB 随机文件的 512 位哈希,和用于重建相应密钥的其他信息(例如种子)存储在一起。该文件会在相应密钥被删除时一并被安全删除,或者会以新的方式被加密;采用这种附加的保护措施后,攻击者要恢复相应密钥,必须要先恢复这个被安全删除的文件中的每一个位。secdiscardable hash 同样会以加密形式绑定到 TEE 中的相应密钥,并享有适用于 KM_TAG_APPLICATION_ID 的所有保证。

此时,你的手机密码并不是文件解密密钥,它只是从安全芯片获取密钥的一个验证方式。如果无法得到存储在安全芯片中的密钥,data分区也就无法解密,数据恢复也就无法完成。

然而问题是,TEE安全芯片位于CPU内,如果手机无法开机,则无法得到该密钥。

所以,如果华为按AOSP推荐的方法实施了加密,则CPU损坏=丢失数据。如果CPU没有损坏,则将CPU和闪存一起安装到新主板上可能可以解密数据。


老一点的系统使用全盘加密:
https://source.android.com/security/encryption/full-disk?hl=zh-cn

全盘加密是在 Android 4.4 版中引入的,不过 Android 5.0 中又引入了以下新功能:

  • 添加了由硬件支持的加密密钥存储空间,该空间使用可信执行环境(TEE,例如 TrustZone)的签名功能。如需更多详细信息,请参阅存储已加密的密钥
    Android 全盘加密的运作方式

Android 全盘加密基于在块设备层运行的内核功能 dm-crypt。因此,这种加密方式适用于以块设备的形式呈现给内核的嵌入式多媒体卡 (eMMC) 和类似闪存设备。YAFFS 会直接与原始 NAND 闪存芯片交互,无法进行全盘加密。

全盘加密采用的是 128 位高级加密标准 (AES) 算法(搭配加密块链 (CBC) 和 ESSIV:SHA256)。对主密钥进行加密时使用的是 128 位 AES 算法(通过对 OpenSSL 库的调用实现)。对于该密钥,您必须使用 128 位或更多位(可以选择 256 位)。
首次启动时,设备会创建一个随机生成的 128 位主密钥,然后会使用默认密码和存储的盐对其进行哈希处理。默认密码是“default_password”。不过,设备还会通过 TEE(例如 TrustZone)为生成的哈希签名。TEE 会使用相应签名的哈希来加密主密钥。
当用户在设备上设置 PIN 码/通行码或密码时,只有 128 位的密钥会被重新加密并存储起来(也就是说,更改用户 PIN 码/通行码/解锁图案不会导致重新加密用户数据)。

此时,你需要找到128位密钥才能进行解密。但里面又涉及到喜闻乐见的TEE。在ARM架构中,TEE是CPU的一部分。

(/@Ta/2020-01-08 04:01//)

2.

此外,如果你真的打算自己解密,建议你买个BGA编程器,淘宝有很多,找到你闪存适用的即可:
https://s.taobao.com/search?q=bga%E7%BC%96%E7%A8%8B%E5%99%A8&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20200108&ie=utf8

除非闪存有测试用的串行连接点(只需要焊接几个点),否则手工锡焊不太可能焊好。

然而问题是,解密安卓Data分区可能相当困难,并且涉及到TEE里存储的密钥,而TEE的数据存储在CPU中。

(/@Ta/2020-01-08 04:05//)

3.

@不負如來不負卿,所以要想恢复数据,很可能需要将CPU和闪存一起转移到新主板上,然后才能开机对data分区进行解密。除非你手机root过了并且手动关闭了加密,否则加密一定存在。

(/@Ta/2020-01-08 04:07//)

4.

由硬件支持的 Keystore
https://source.android.com/security/keystore?hl=zh-cn

借助系统芯片 (SoC) 中提供的可信执行环境,Android 设备可以为 Android 操作系统、平台服务甚至是第三方应用提供由硬件支持的强大安全服务。
架构
Android Keystore API 和底层 Keymaster HAL 提供了一套基本的但足以满足需求的加密基元,以便使用访问受控且由硬件支持的密钥实现相关协议。
Keymaster HAL 是由原始设备制造商 (OEM) 提供的动态加载库,Keystore 服务使用它来提供由硬件支持的加密服务。为了确保安全性,HAL 实现不会在用户空间(甚至是内核空间)中执行任何敏感操作。敏感操作会被分配给通过某个内核接口连接的安全处理器。

(/@Ta/2020-01-08 04:19//)

5.

旧设备使用的全盘加密似乎也很难在原装SoC外解密:
https://source.android.com/security/encryption/full-disk?hl=zh-cn#storing_the_encrypted_key

存储已加密的密钥

已加密的密钥存储在加密元数据中。硬件支持是通过使用可信执行环境 (TEE) 的签名功能实现的。以前在加密主密钥时,需要使用通过对用户的密码和存储的盐应用 scrypt 生成的密钥。为了使该密钥能够抵御盒外攻击,我们通过使用存储的 TEE 密钥为生成的密钥签名,扩展了这种算法。然后,通过再次应用 scrypt,生成的签名会转变成具有适当长度的密钥。该密钥随后会用于加密和解密主密钥。

(/@Ta/2020-01-08 04:33//)

6. @老虎会游泳,客服售后说CPU已经烧坏,需要更换,不知道是不是真的,可能在匡我等无知小民。
(/@Ta/2020-01-08 07:35//)

7.

@不負如來不負卿@老虎会游泳,root了也无法解密分区。只能格式化。除非手机在出厂时没有加密,且没有升级过。只要一升级就会加密。或者在加密前刷过防加密补丁。不然只要刷完开机就会加密手机包括全量包升级
这是一条鸡巴你不必羡慕

(/@Ta/2020-01-08 11:32//)

8.

@老子会游泳@不負如來不負卿,对,如果想在原装SoC(CPU)之外恢复文件,必须在手机还能正常使用的时候阻止对data分区加密(比如用第三方recovery格式化data分区并刷机破解强制加密)。

(/@Ta/2020-01-08 15:48//)

9.

@不負如來不負卿,如果是你的手机是安卓6.0以上包括6.0有可能不会强制加密。
这是一条鸡巴你不必羡慕

(/@Ta/2020-01-08 18:10//)

10.

@老虎会游泳@不負如來不負卿, 那就直接找个同型号手机 换下闪存 不知道可以吗?
我们有着共同的敌人——天命;
你却认命了,还对我说天命不可违‮

(/@Ta/2020-01-08 18:36//)

11. @老子会游泳,9.0
(/@Ta/2020-01-09 02:42//)

12. @乄杺,按老虎的意思还要连CPU一起换,玩不来啊玩不来
(/@Ta/2020-01-09 02:44//)

回复需要登录

9月14日 02:35 星期天

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1