深度win10- 绿色安全免费的win10系统下载站

今日更新 | 一键重装系统

当前位置: > 系统教程

网页加速器(网页加速器浏览器)

认证系统 时间:2023-04-01 人气: 147

自助下单地址(拼多多砍价,ks/qq/dy赞等业务):点我进入

上面只是一个例子,如何能够系统化的过滤掉这类指令呢?报告中提出了一个方案:

cpu可以用几年_4核cpu用1核_cpu散热用什么好

观察指令中的有意义的字节,它们对指令的长度和异常表现会产生冲击。

又该怎么理解这句话?

还是上面那个例子,当尝试修改第一个字节68的时候,这一段二进制序列可能就完全变成了别的指令,甚至指令长度都会发生变化(比如把68改成90,那就变成了一个字节的nop指令),那么就认为这第一个字节是一个有意义的字节,修改了它会对指令的长度产生重要影响。

反之,如果修改后面字节的数据,会发现这仍然是一条5个字节的压栈指令,长度没变化,也没有其他异常行为表现与之前不同,那么就认为后面几个字节是无关紧要的字节。

在这个指导思想下,我们来看一个例子:

从下面这一段数据开始出发:

4核cpu用1核_cpu散热用什么好_cpu可以用几年

我们从两个字节的指令开始遍历:

cpu可以用几年_4核cpu用1核_cpu散热用什么好

把最后那个字节的内容+1,尝试去执行它:

cpu散热用什么好_cpu可以用几年_4核cpu用1核

发现指令长度没有变化(具体怎么判断指令长度变没变,下一节会重点讨论),那就继续+1,再次尝试执行它:

cpu可以用几年_cpu散热用什么好_4核cpu用1核

cpu散热用什么好_4核cpu用1核_cpu可以用几年

一直这样加下去,直到发现加到4的时候,指令长度发生了变化,长度超过了2(但具体是多少还不知道,后文会解释):

cpu可以用几年_cpu散热用什么好_4核cpu用1核

那么在这个基础上,长度增加1位,以指令长度为3的指令来继续上面的探索过程:从最后一位开始+1做起。

4核cpu用1核_cpu散热用什么好_cpu可以用几年

随着分析的深入,梳理一下指令搜索的路径图:

cpu散热用什么好_cpu可以用几年_4核cpu用1核

当某一条的最后一个字节遍历至FF时cpu可以用几年,开始往回走(就像递归,不能一直往下,总有回去的时候):

cpu散热用什么好_cpu可以用几年_4核cpu用1核

往回走一个字节,将其+1,继续再来:

cpu散热用什么好_cpu可以用几年_4核cpu用1核

按照这个思路,整个要搜索的指令空间压缩到可以接受遍历的程度:

4核cpu用1核_cpu散热用什么好_cpu可以用几年

如何判定指令长度

cpu可以用几年_cpu散热用什么好_4核cpu用1核

现在来解答前面遗留的一个问题。

上面这个算法能够工作的一个重要前提是:

我们得知道cpu可以用几年,给末尾字节+1后,有没有影响指令的长度。

要判断某个字节是不是关键字节,就得知道这个字节的内容变化,会不会影响到指令长度,所以如果无法判断长度有没有变化,那上面的算法就无从谈起了。

所以如何知道长度有没有变化呢?报告中用到了一个非常巧妙的方法。

假设我们要评估下面这一串数据,前面开头到底多少个字节是一条完整指令。

cpu散热用什么好_cpu可以用几年_4核cpu用1核

可能第一个字节0F就是一条指令。

也可能前面两个字节0F 6A是一条指令。

还可能前面五个字节0F 6A 60 6A 79 6D是一条指令。

到底是什么情况,我们不知道,让我们用程序来尝试推导出来。

准备两个连续的内存页面,前面一个拥有可执行的权限,后面一个不能执行。

4核cpu用1核_cpu散热用什么好_cpu可以用几年

cpu散热用什么好_cpu可以用几年_4核cpu用1核

记住:当CPU发现指令位于不可执行的页面中时,它会抛异常!

现在,在内存中这样放置上面的数据流:第一个字节放在第一个页面的末尾位置,后面在字节放在第二个不可执行的页面上。

cpu可以用几年_4核cpu用1核_cpu散热用什么好

然后JMP到这条指令的地址,尝试去执行它,CPU中的译码器开始译码:

cpu散热用什么好_4核cpu用1核_cpu可以用几年

译码器译码发现是0F,不是单字节指令,还需要继续分析后面的字节,继续取第二个字节:

cpu可以用几年_cpu散热用什么好_4核cpu用1核

但注意,第二个字节是位于不可执行的页面,CPU检查发现后会抛出页错误异常:

4核cpu用1核_cpu可以用几年_cpu散热用什么好

如果我们发现CPU抛了异常,并且异常的地址指向了第二个页面的地址,那么我们可以断定:这条指令的长度肯定不止一个字节。

cpu散热用什么好_cpu可以用几年_4核cpu用1核

既然不止一个字节,那就往前挪一下,放两个字节在可执行页面,从第三个字节开始放在不可执行页面,继续这个过程。

cpu散热用什么好_4核cpu用1核_cpu可以用几年

4核cpu用1核_cpu可以用几年_cpu散热用什么好

继续上面这个过程,放三个字节在可执行页面:

4核cpu用1核_cpu散热用什么好_cpu可以用几年

四个:

cpu可以用几年_4核cpu用1核_cpu散热用什么好

当放了四个字节在可执行页面之后,事情发生了变化:

指令可以执行了!虽然也抛了异常(因为天知道这是个什么指令,会抛什么异常),但页错误的地址不再是第二个页面的地址了!

cpu散热用什么好_cpu可以用几年_4核cpu用1核

有了这个信号,我们就知道,前面4个字节是一条完整的指令:

cpu可以用几年_4核cpu用1核_cpu散热用什么好

挖掘隐藏指令

现在核心算法和判断指令长度的方法都介绍完了,可以正式来开挖,挖出那些隐藏的指令了!

以一台Intel Core i7的CPU为目标,来挖一挖:

cpu可以用几年_cpu散热用什么好_4核cpu用1核

cpu散热用什么好_4核cpu用1核_cpu可以用几年

挖掘成果,收获颇丰:

4核cpu用1核_cpu可以用几年_cpu散热用什么好

4核cpu用1核_cpu可以用几年_cpu散热用什么好

这些都是Intel指令集手册中未交待,但CPU却能执行的指令。

然后是AMD Athon的CPU:

cpu可以用几年_cpu散热用什么好_4核cpu用1核

挖掘成果:

4核cpu用1核_cpu散热用什么好_cpu可以用几年

那这些隐藏的指令是做什么的呢?

有些已经被逆向工程分析了。

还有的就是毫无记录,只有Intel/AMD自己人知道了,谁知道它们用这些指令是来干嘛的?

软件即便是开源都能爆出各种各样的问题,何况是黑盒一样的硬件。

CPU作为计算机中的基石,它要是出了问题,那可是大问题。

我不是阴谋论,害人之心不可有,但防人之心不可无。

看完这些,我对国产、安全、自主可控这几个字的理解又加深了一层。


更多精彩:永久激活win10专业版www.win7gw.com

win7系统

win10系统

网友热搜

站长推荐

电脑软件

关于本站 | 下载声明 | 广告合作 | 网站地图 | RSS

Copyright 2019-2020 sdwin10.com 深度win10 版权所有 浙ICP备20007169号-11

声明: 本站非windows官方网站 所有软件和文章来自互联网 如有异议 请与本站联系