如何使用已知密码从死机中解密APK加密文件?

时间:2018-09-30 18:48:12

标签: encryption

我的问题如下:我的手机的屏幕坏了,手机已打开全盘加密,我知道密码,我需要检索其上的数据并且已加密备份 。 手机是三星Galaxy S7。我无法通过将手机插入计算机来访问文件,因为如果没有屏幕帮助就无法解锁手机。未启用USB调试。

我最近备份了用三星Smart Switch制作的文件。但是,所有apk文件以及大多数文件都保存为“ enc”。文件和不可读的解密文件。 我尝试使用gpg和openssl工具分别用手机的FDE密码解密那些文件,但没有成功。

我对A)有什么选择?要么不用屏幕B就可以访问手机的内容,要么可以解密那些我知道手机密码的加密备份文件?

谢谢

1 个答案:

答案 0 :(得分:0)

  

首次启动时,设备会创建一个随机生成的128位主密钥,然后使用默认密码和存储的盐对其进行哈希处理。默认密码为:“ default_password”但是,生成的哈希也通过TEE(例如TrustZone)进行签名,TEE使用签名的哈希来加密主密钥。

     

当用户在设备上设置PIN /密码时,仅128位密钥被重新加密和存储。 (即,用户PIN /密码/模式更改不会导致用户数据重新加密。)

也就是说,您无法在不知道master key的情况下解密数据,using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.Immutable; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; namespace ImmutableSpeedTests { class Program { public class ConcurrentVsImmutable { public int ValuesCount; public int ThreadsCount; private ImmutableDictionary<int, int> immutable = ImmutableDictionary<int, int>.Empty; private ConcurrentDictionary<int, int> concurrent = new ConcurrentDictionary<int, int>(); public ConcurrentVsImmutable(int valuesCount, int threadsCount) { ValuesCount = valuesCount; ThreadsCount = threadsCount; } public void Setup() { // fill both collections. I don't measure time cause immutable is filling much slower obviously. for (var i = 0; i < ValuesCount; i++) { concurrent[i] = i; immutable = immutable.Add(i, i); } } public async Task<long> ImmutableSum() => await Sum(immutable); public async Task<long> ConcurrentSum() => await Sum(concurrent); private async Task<long> Sum(IReadOnlyDictionary<int, int> dic) { var tasks = new List<Task<long>>(); // main job. Run multiple tasks to sum all values. for (var i = 0; i < ThreadsCount; i++) tasks.Add(Task.Run(() => { long x = 0; foreach (var key in dic.Keys) { x += dic[key]; } return x; })); var result = await Task.WhenAll(tasks.ToArray()); return result.Sum(); } } static void Main(string[] args) { var test = new ConcurrentVsImmutable(1000000, 4); test.Setup(); var sw = new Stopwatch(); sw.Start(); var result = test.ConcurrentSum().Result; sw.Stop(); // Convince that the result of the work is the same Console.WriteLine($"Concurrent. Result: {result}. Elapsed: {sw.ElapsedTicks}."); sw.Reset(); sw.Start(); result = test.ImmutableSum().Result; sw.Stop(); Console.WriteLine($" Immutable. Result: {result}. Elapsed: {sw.ElapsedTicks}."); Console.ReadLine(); } } } 是随机生成并存储在手机上的。

您需要更换破碎的屏幕。

有关更多信息,请参见this