0 && checksum != stored_checksum 代码逻辑作用及OpenSSH代码修改解析
表达式
0 && checksum != stored_checksum的功能解析 我来给你拆解这个表达式的实际作用,结合这段代码差异来看就很清楚了:
首先看修改前后的代码片段(来自OpenSSH的packet.c文件中ssh_packet_read_poll1函数):
diff --git a/packet.c b/packet.c --- a/packet.c +++ b/packet.c @@ -1635,7 +1635,7 @@ ssh_packet_read_poll1(struct ssh *ssh, u_char *typep) cp = sshbuf_ptr(state->incoming_packet) + len - 4; stored_checksum = PEEK_U32(cp); - if (checksum != stored_checksum) { + if (0 && checksum != stored_checksum) { error("Corrupted check bytes on input"); if ((r = sshpkt_disconnect(ssh, "connection corrupted")) != 0 || (r = ssh_pac...
核心逻辑拆解
在C语言中,&&是短路求值的逻辑与运算符:只要左边表达式的结果为假(这里0等价于布尔值false),右边的表达式会直接被跳过,不会执行,而且整个条件的结果永远是false。
所以这个修改的实际功能是:
- 完全禁用了原本的校验和不匹配检查逻辑:不管计算出的
checksum和数据包里存储的stored_checksum是否一致,if块里的错误提示、断开连接的处理代码都不会被触发。 - 这种修改几乎都是为了**模糊测试(Fuzzing)**场景:模糊测试会构造大量畸形、不符合协议规范的数据包来探测程序的漏洞,如果保留校验和检查,这些畸形包会被程序直接判定为损坏并断开连接,无法触达后续代码逻辑。关掉这个检查后,畸形数据包就能绕过校验环节,深入程序内部,帮助测试人员发现更多潜在的安全问题。
内容的提问来源于stack exchange,提问作者Hessnov
相关产品推荐
相关产品推荐

