也许是为了窃取数据?
当您通过 malloc 请求内存时,您将获得一块之前被其他应用程序或操作系统使用过的内存块。我认为,就这些公司拥有的庞大用户群和计算能力而言,应该可以从那里提取有价值的信息(例如密码管理器和其他凭据没有正确清理的哈希值)。
让我们做一些计算(不幸的是在代码标签中,因为 RE-Ex 没有 MathJax):
让...
n
是 malloc 可以从中选择的内存数量
m
是我们可以搜索的窗口的大小
l
是搜索序列的大小
窗口可以具有的不同位置的数量由 给出n - m + 1
。
将完全包含大小序列的仓位数量l
为m - l + 1
。
因此,随机选择的搜索窗口将包含我们的序列的概率是
p = (m - l + 1)/(n - m + 1)
我们将假设,
- 智能手机的平均可用内存是
n = 4GB
- 我们的搜索窗口的大小是
m = 1024
- 序列的长度是
l = 16
(一个 MD5-Hash 的大小)
这给了我们一个概率p = (1024 - 16 + 1)/(4e9 - 1024 + 1) ~= 2.5225e-7
。
让我们再做一些假设:假设信使有1.5 billion users
(就像 WhatsApp 有)。我们还假设代码发送数据,twice a day
并且one thousandth
用户在内存中的某处有一个未保留的 MD5 哈希。
这为我们提供了1.5e9 / 1000 * 2 = 3e6
每天要评估的样本总数。
我们将用正态分布近似估计有用散列的预期数量:
sigma = sqrt(3e9*2.5225e-7*(1-2.5225e-7)) ~= 27.50909
(所以大约应该产生良好的结果)
my = 3e9*2.5525e-7 ~= 756.75
因此,该公司my-2*sigma, my+2*sigma
每天将在 701 到 812 ( ) 个可用哈希之间获得 99.73% 的确定性。
免责声明:我不确定 java 如何处理内存以及这种情况的合理性(和有效性)。我也没有使用任何有根据的值——我只是插入了一些伪逻辑数字。我也不保证我的计算的正确性(我从来没有真正喜欢统计)。
尽管如此:如果我计算错误,请随意修改这些值并纠正我。