🎵 Dr.Evil: 叮咚,我有一个秘密,悄悄告诉你~
虽然在 Bomb Lab 的提示里只提到了 6 个关卡,然而稍微留心一点便会发现,在反编译的代码中,出现了一个单词 “secret_phase”。
显然,除了明面上的 6 个关卡,还有一个隐藏关等着我们。那么,这个 secret_phase 要如何才能触发呢?
Learn & Live
🎵 Dr.Evil: 叮咚,我有一个秘密,悄悄告诉你~
虽然在 Bomb Lab 的提示里只提到了 6 个关卡,然而稍微留心一点便会发现,在反编译的代码中,出现了一个单词 “secret_phase”。
显然,除了明面上的 6 个关卡,还有一个隐藏关等着我们。那么,这个 secret_phase 要如何才能触发呢?
2020/9/11: 最终还是决定尝试一下 CSAPP 这本书配套的 Bomb Lab,事实证明,成功拆除炸弹还是非常有成就感的!开心得屁颠屁颠跑来写笔记~
上面是去年九月开坑时写的开头,中间连着准备两场考试实在是精力有限,一下就拖到了 2021 年。QAQ 被高数虐了一个多月却仍然挂得很惨,月初休息了一波修复碎成渣渣的玻璃心。最近工作不怎么忙了,所以我回来填坑啦~
言归正传,在 Bomb Lab 中,我们会拿到一个名为 bomb 的可执行文件和一个 bomb.c 文件。通过 bomb.c 中的代码我们可以知道要拆除这个炸弹一共有6道关卡,只有每个关卡都给出正确输入才能拆除炸弹,否则炸弹就会爆炸,如下图所示:
面对如此嚣张的威胁,我们要如何解决呢?
在 Bomb Lab 的 Writeup 里提到了一些非常有用的工具:gdb, objdump, strings。实践证明,它们真的很管用!
那么接下来,我们就一起来拆炸弹吧~
从读书到工作,用 Java 写过一些 Web 应用,由于大多项目都是基于 Spring 开始,而 Spring 作为一个非常成熟的开发框架,为开发者隐去了很多底层细节,导致自己现在对于 Java Web 的基本运作原理的理解远不够深刻。为了弄明白 Java Web 到底是怎么一回事,我决定从 Tomcat 入手,好好捋一捋。
为什么是 Tomcat 呢?我们来看看 Tomcat 的官方介绍:
The Apache Tomcat® software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies.
还有什么能比 Tomcat 更合适用来学习 Java Web 相关的知识吗?
那么,在我们深入了解 Tomcat 之前,先来认识一下 Java Web 中最基础的内容 —— Servlet。
虽然单例模式很好理解,在具体实现的时候,还是有很多细节需要注意。几年前,我写过一篇在 Javascript 中实现单例模式的笔记,但其实在不同语言中实现单例模式还是有不少的区别,尤其像 Java、C++ 这类多线程语言。
在本文中,我们一起来看看在 Java 中实现单例模式都有哪些方式,要考虑哪些问题。
我们都知道 HTTP 协议本身是不提供任何安全保障的,HTTP 的报文只是普通的文本,在传输中报文的内容是完全公开的。在没有安全机制的保障下,基于 HTTP 的通信很容易受到诸如窃听、man-in-the-middle 这类攻击。HTTPS (Hypertext Transport Protocol Secure) 作为 HTTP 的扩展,由RFC 2818 正式定义,也被称为 HTTP over TLS,它在 HTTP 与 TCP 之间引入了 TLS (Transport Layer Security),其目的就是为 HTTP 协议提供安全服务,防御上述攻击。
那么,TLS 究竟是什么?它是如何为 HTTP 通信提供安全保障的呢?在接下来的内容中我们将逐步揭开 TLS 的神秘面纱,最终你会发现,原来都是些“熟面孔”。
我们可以说网络通信的安全性几乎是建立在密钥的安全性上,因此如何管理密钥和分发密钥是一个非常重要的话题。下文中我们将一一介绍如下概念:
在上一篇笔记中,我们提到安全的网络通信有三点基本特性:保密性、报文完整性和身份认证。这篇笔记我们就来聊聊报文完整性和身份认证,二者是息息相关的。
还是用 Alice 和 Bob 来举例,当 Bob 收到一条来自 Alice 的消息,他需要验证如下内容:
网络安全这个话题实在太庞大了,小到单个资源的访问控制、通信内容的防窃听与防篡改,大到对组织整体网络 DDoS 攻击的防控,都属于网络安全的范畴。如果要对这些具体的操作详细说明,那么每个都可以单独拿出来写出长篇大论,而作为一篇入门向笔记,我们还是从最简单的场景开始吧。
现在疫情这么严重,大家很多都是在家办公,每天只能通过网络交流工作,我们自然希望 1)通信内容是保密的,不会在传输过程中被他人窃取;2)消息都是完好的,没有被篡改过的;3)我们还得确认网线对面确实是我们的同事,而不是假冒的。如果做不到这些,那我们的工作内容很容易就会泄漏出去,如果是十分重要的内容,必定会对公司造成巨大损失。简单归纳以上几点,我们可以得出安全的网络通信得具备如下几个特性:
在网络安全中,密码学扮演了至关重要的角色。通过加密,我们很自然地就获得了通信的保密性。
在前一篇笔记中我们总结了网络层的拥塞控制机制,主要以检测拥塞并及时反馈拥塞为主,毕竟要想控制拥塞,还得从根本上解决 —— 减缓传输层的发送速率以减少传输层注入到网络层的流量。
换言之,我们希望采用某种拥塞控制算法能为传输层找到一种好的带宽分配方法,这种分配方法具备如下特质:
我们之前提到网络传输的两大基本问题,一个是「如何提供可靠的数据传输」,这个问题我们在前面的笔记中已经给出了指南,本文将解答第二个问题「如何避免网络拥塞以及在拥塞发生时如何恢复」。
什么是网络拥塞?当网络中存在太多的流量导致数据包被延迟或丢失,从而降低了网络性能,这种情况就被称之为网络拥塞。
病名:网络拥塞
早期症状:消化不良 —— 过度延迟、丢包
晚期后果:瘫痪 —— 拥塞崩溃 (congestion collapse),因负载过重超出了网络承受能力,导致网络性能骤降
病因:被投喂过多 —— 发送方发送速率太快,导致路由器缓冲区溢出
不良影响:
知道了症状,也知道了病因,才好积极预防、对症下药嘛~
网络拥塞的治疗方案由网络层和传输层协作实施,网络层作为直接经历拥塞的部分,需要它最终决定如何处理过载的数据;而传输层作为“幕后黑手”,要控制拥塞还需其积极配合。