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 continue
为JMP continue
检查将无法正确执行.
然后克里斯写道:
C中程序的更正版本是:
IsValidUser();
if (!true)
{
Message("Invalid user! Aborting...");
Abort;
}
Run Code Online (Sandbox Code Playgroud)
在这个版本中,该{...}
部分永远不会得到控制.
我真的不知道修正后的版本应该如何工作.为什么他会使用一个if-statement
永远不会被执行的东西,甚至可以被编译器删除?
这是一种拼写错误还是错误?或者我没有得到什么?
这是你的错,不是克里斯.这不是"用户验证代码的安全版本",但这是在黑客引入修正后获得的代码
从这本书中用俄语引用:
языкеНаСи исправленная Программабудетвыглядетьтак:
谷歌翻译:
C语言修改(或修补)程序将如下所示:
归档时间: |
|
查看次数: |
229 次 |
最近记录: |