需要解释特定的安全优化

Kol*_*nya 6 c c++ security assembly disassembly

我正在读一由克里斯卡巴斯基解释软件安全理念和技术的 [rus](对不起,我现在找不到英文版).

书中有一个例子.它声明代码:

if ( ! IsValidUser() )
{
    Message("Invalid user! Abroting...");
    Abort;
}
Run Code Online (Sandbox Code Playgroud)

是完全不安全的,因为它被翻译成这样:

       CALL IsValidUser
       OR   AX,AX
       JZ   continue
       ^^^^^^^^^^^^^
       PUSH offset str_invalid_user
       CALL Message
       CALL Abort
continue:               ; normal program execution
       ...........
Run Code Online (Sandbox Code Playgroud)

因此,可以通过改变反汇编器中的一个字节来破解程序.如果我们更改JZ continueJMP continue检查将无法正确执行.

然后克里斯写道:

C中程序的更正版本是:

IsValidUser();
if (!true)
{
    Message("Invalid user! Aborting...");
    Abort;
}
Run Code Online (Sandbox Code Playgroud)

在这个版本中,该{...}部分永远不会得到控制.

我真的不知道修正后的版本应该如何工作.为什么他会使用一个if-statement永远不会被执行的东西,甚至可以被编译器删除?

这是一种拼写错误还是错误?或者我没有得到什么?

Ser*_*rgV 7

这是你的错,不是克里斯.这不是"用户验证代码的安全版本",但这是在黑客引入修正后获得的代码

从这本书中用俄语引用:

языкеНаСи исправленная Программабудетвыглядетьтак:

谷歌翻译:

C语言修改(或修补)程序将如下所示: