<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>HanLior</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://www.hanlior.top/</id>
  <link href="https://www.hanlior.top/" rel="alternate"/>
  <link href="https://www.hanlior.top/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, HanLior</rights>
  <subtitle>技术学习与实践</subtitle>
  <title>HanLior</title>
  <updated>2026-10-16T12:47:57.430Z</updated>
  <entry>
    <author>
      <name>HanLior</name>
    </author>
    <category term="逆向学习" scheme="https://www.hanlior.top/categories/%E9%80%86%E5%90%91%E5%AD%A6%E4%B9%A0/"/>
    <content>
      <![CDATA[<p>本文整理 Android 注册逻辑、Java 解密、ELF 与 Windows 程序等基础逆向分析题目的思路和脚本。</p><span id="more"></span><h1 id="基本函数"><a href="#基本函数" class="headerlink" title="基本函数"></a>基本函数</h1><p><strong>char *strcat(char *dest, const char *src)</strong> 把 <strong>src</strong> 所指向的字符串追加到 <strong>dest</strong> 所指向的字符串的结尾。</p><h1 id="简单注册器"><a href="#简单注册器" class="headerlink" title="简单注册器"></a>简单注册器</h1><p>刚接触到安卓逆向，用jdx打开apk包发现注册逻辑</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914162515710.png" alt="image-20260914162515710"></p><p>编写exp：</p><figure class="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></pre></td><td class="code"><pre><span class="line">x = <span class="built_in">list</span>(<span class="string">&#x27;dd2940c04462b4dd7c450528835cca15&#x27;</span>)</span><br><span class="line">x[<span class="number">2</span>] = <span class="built_in">chr</span>(<span class="built_in">ord</span>(x[<span class="number">2</span>]) + <span class="built_in">ord</span>(x[<span class="number">3</span>]) - <span class="number">50</span>)</span><br><span class="line">x[<span class="number">4</span>] = <span class="built_in">chr</span>(<span class="built_in">ord</span>(x[<span class="number">2</span>]) + <span class="built_in">ord</span>(x[<span class="number">5</span>]) - <span class="number">48</span>)</span><br><span class="line">x[<span class="number">30</span>] = <span class="built_in">chr</span>(<span class="built_in">ord</span>(x[<span class="number">31</span>]) + <span class="built_in">ord</span>(x[<span class="number">9</span>]) - <span class="number">48</span>)</span><br><span class="line">x[<span class="number">14</span>] = <span class="built_in">chr</span>(<span class="built_in">ord</span>(x[<span class="number">27</span>]) + <span class="built_in">ord</span>(x[<span class="number">28</span>]) - <span class="number">97</span>)</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>,<span class="number">16</span>):</span><br><span class="line">    a = x[<span class="number">31</span> - i ]</span><br><span class="line">    x[<span class="number">31</span> - i] = x[i]</span><br><span class="line">    x[i] = a </span><br><span class="line"><span class="built_in">print</span>(<span class="string">&quot;flag&#123;&quot;</span> + <span class="string">&quot;&quot;</span>.join(x) + <span class="string">&quot;&#125;&quot;</span>)</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>获得flag为<code>flag{59acc538825054c7de4b26440c0999dd}</code></p><h1 id="JAVA逆向解密"><a href="#JAVA逆向解密" class="headerlink" title="JAVA逆向解密"></a>JAVA逆向解密</h1><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914164100559.png" alt="image-20260914164100559"></p><p>看  <code>Encrypt（）</code>的逻辑，flag作为参数传入</p><figure class="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></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> (char c : arr) &#123;</span><br><span class="line">            <span class="built_in">int</span> result = (c + <span class="string">&#x27;@&#x27;</span>) ^ <span class="number">32</span>;</span><br><span class="line">            Resultlist.add(Integer.valueOf(result));</span><br><span class="line">        &#125;</span><br></pre></td></tr></table></figure><p>这是加密的主要逻辑</p><p>逆向一下加密逻辑就是</p><p>c &#x3D; result ^ 32 - ord(‘@’)</p><p>后面使用KEY来做对比</p><p>所以编写脚本</p><figure class="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></pre></td><td class="code"><pre><span class="line">KEY = [<span class="number">180</span>, <span class="number">136</span>, <span class="number">137</span>, <span class="number">147</span>, <span class="number">191</span>, <span class="number">137</span>, <span class="number">147</span>, <span class="number">191</span>, <span class="number">148</span>, <span class="number">136</span>, <span class="number">133</span>, <span class="number">191</span>, <span class="number">134</span>, <span class="number">140</span>, <span class="number">129</span>, <span class="number">135</span>, <span class="number">191</span>, <span class="number">65</span>]</span><br><span class="line">result = <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="keyword">for</span> value <span class="keyword">in</span> KEY:</span><br><span class="line">    value = value ^ <span class="number">32</span></span><br><span class="line">    value = value - <span class="number">64</span></span><br><span class="line">    cha = <span class="built_in">chr</span>(value)</span><br><span class="line">    result = result + cha</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&quot;flag&#123;&quot;</span>+result+<span class="string">&quot;&#125;&quot;</span>)</span><br></pre></td></tr></table></figure><p><code>flag{This_is_the_flag_!}</code></p><h1 id="luck-guy"><a href="#luck-guy" class="headerlink" title="luck_guy"></a>luck_guy</h1><p>解压之后先查壳，发现无壳，是ELF64位文件</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914181208518.png" alt="image-20260914181208518"></p><p>将luck_guy拖进IDA中分析</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914175814994.png" alt="image-20260914175814994"></p><p>发现是switch-case函数，逐个分析一下每一个case</p><p>case1的作用是先将s设置为空，将f1和f2都链接在s之后，那么s可能就是要找的flag，点击了一下f1，发现了f1的值</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914182309626.png" alt="image-20260914182309626"></p><p>case2和case3 都是输出，先不管</p><p>case4这里给了 s &#x3D; ‘\x7Ffo<code>guci&#39; ,刚开始查文件时候说了是ELF64文件，所以它存储的时候是小端存储，但是在IDA的显示中会变为大端存储，所以需要把s逆置一下，也就是s = icug</code>of,然后会把s插入f2之后</p><p>Case5是对f2进行处理，这个循环的含义是如果j为奇数，就把f2 - 2，如果是偶数，就把f2 - 1</p><p>所以可以猜想一下，case4 -&gt; case5 -&gt; case1 就可以得到flag</p><p>编写脚本走一圈</p><figure class="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></pre></td><td class="code"><pre><span class="line">f1 =<span class="built_in">list</span>(<span class="string">&#x27;GXY&#123;do_not_&#x27;</span>)</span><br><span class="line">f2 =<span class="built_in">list</span>(<span class="string">&#x27;icug`of&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>,<span class="number">7</span>):</span><br><span class="line">    <span class="keyword">if</span> i % <span class="number">2</span> == <span class="number">0</span>:</span><br><span class="line">        f2[i] = <span class="built_in">chr</span>(<span class="built_in">ord</span>(f2[i]) - <span class="number">1</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        f2[i] = <span class="built_in">chr</span>(<span class="built_in">ord</span>(f2[i]) - <span class="number">2</span>)</span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(<span class="string">&quot;&quot;</span>.join(f1)+<span class="string">&quot;&quot;</span>.join(f2)+<span class="string">&quot;&#125;&quot;</span>)</span><br></pre></td></tr></table></figure><p>得到flag</p><p><code>GXY{do_not_hate_me}</code></p><h1 id="刮开有奖"><a href="#刮开有奖" class="headerlink" title="刮开有奖"></a>刮开有奖</h1><p>先查壳，没什么有效信息</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914194136984.png" alt="image-20260914194136984"></p><p>直接丢IDA，看到DIalogFunc直接跟进去</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914195352575.png" alt="image-20260914195352575"></p><p>这里大概就能看到加密的主体了，将这些东西都修复了就变成这样了</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914195534738.png" alt="image-20260914195534738"></p><p>第一点，输入字符的长度必须是8</p><p>第二点，下面的这些变量肯定是和flag有关</p><p>跟进sub_4010f0函数</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914195655942.png" alt="image-20260914195655942"></p><p>发现函数是升序的快速排序，给函数更一下名</p><p>那么意思就是将上面的变量进行升序排序</p><figure class="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></pre></td><td class="code"><pre><span class="line">key = <span class="built_in">list</span>(<span class="string">&quot;ZJSECaNH3ng&quot;</span>)</span><br><span class="line">key.sort()</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&quot;&quot;</span>.join(key))</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3CEHJNSZagn</span></span><br></pre></td></tr></table></figure><p>再往下看sub_401000函数，跟进去</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914195833966.png" alt="image-20260914195833966"></p><p>观察函数逻辑，发现是base64加密，跟进去byte_407830中，看一下base64表是没有变的<img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914195931446.png" alt="image-20260914195931446"></p><p>在主函数的逻辑中，v4 v5都是被base64加密之后的变量</p><p>最后看if的判断条件</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914200246043.png" alt="image-20260914200246043"></p><p>排序后的元素为<code>3CEHJNSZagn</code></p><p>1️⃣v7[0]表示的是第一个元素 也就是3 ，string[0] &#x3D; v7[0] + 34</p><p>2️⃣v10代表的是第五个元素 对应的也就是J </p><p>3️⃣逆运算一下 string[2] &#x3D; (3 * v8 + 141) &#x2F; 4,这里的v8是第三个元素，也就是E</p><p>4️⃣逆运算一下 string[3] &#x3D; 2 * (v13 &#x2F; 9) * 4,这里的v13是第八个元素 ，也就是Z</p><p>5️⃣6️⃣都是做比较，将<code>ak1w</code>和<code>V1Ax</code> base64解密一下再做比较，因为上面说过了 v4 v5都是base64加密之后的变量，解密之后为<code>ak1w</code> -&gt; <code>jMp</code> <code>V1Ax</code> -&gt;<code> WP1</code></p><p>从上往下求一下</p><figure class="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></pre></td><td class="code"><pre><span class="line">key = <span class="string">&quot;3CEHJNSZagn&quot;</span></span><br><span class="line"></span><br><span class="line">string0 = <span class="built_in">chr</span>(<span class="built_in">ord</span>(key[<span class="number">0</span>]) + <span class="number">34</span>)</span><br><span class="line">string1 = key[<span class="number">4</span>]</span><br><span class="line">string2 = <span class="built_in">chr</span>(<span class="built_in">int</span>((<span class="number">3</span> * <span class="built_in">ord</span>(key[<span class="number">2</span>]) + <span class="number">141</span>) / <span class="number">4</span>))</span><br><span class="line">string3 = <span class="built_in">chr</span>(<span class="built_in">int</span>(<span class="built_in">ord</span>(key[<span class="number">7</span>]) / <span class="number">9</span> * <span class="number">2</span> * <span class="number">4</span>))</span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(string0 + string1 + string2 + string3)</span><br></pre></td></tr></table></figure><p>得到<code>UJWP</code>，因为已知长度是8，上面两个字符串base64解密后为<code>jMp</code>和<code> WP1</code>,做一下比较可以得到<code>WP1</code>在前面</p><p>所以flag为<code>flag{UJWP1jMp}</code></p><h1 id="BJDCTF2020-JustRE"><a href="#BJDCTF2020-JustRE" class="headerlink" title="[BJDCTF2020]JustRE"></a><strong>[BJDCTF2020]JustRE</strong></h1><p>进去之后查看字符串，发现一个和flag很像的东西，跟进去</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914204135246.png" alt="image-20260914204135246"></p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20260914204110161.png" alt="image-20260914204110161"> </p><p>发现点击次数为19999输出flag，再往下看format，把19999和0带入进去得到flag</p><p>flag{1999902069a45792d233ac}</p><h1 id="rome"><a href="#rome" class="headerlink" title="rome"></a>rome</h1><figure class="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></pre></td><td class="code"><pre><span class="line">miwen = [<span class="string">&#x27;p&#x27;</span>, <span class="string">&#x27;v&#x27;</span>, <span class="string">&#x27;k&#x27;</span>, <span class="string">&#x27;q&#x27;</span>, <span class="string">&#x27;&#123;&#x27;</span>, <span class="string">&#x27;m&#x27;</span>, <span class="string">&#x27;1&#x27;</span>, <span class="string">&#x27;6&#x27;</span>, <span class="string">&#x27;4&#x27;</span>, <span class="string">&#x27;6&#x27;</span>, <span class="string">&#x27;7&#x27;</span>, <span class="string">&#x27;5&#x27;</span>, <span class="string">&#x27;2&#x27;</span>, <span class="string">&#x27;6&#x27;</span>, <span class="string">&#x27;2&#x27;</span>, <span class="string">&#x27;0&#x27;</span>, <span class="string">&#x27;3&#x27;</span>, <span class="string">&#x27;3&#x27;</span>, <span class="string">&#x27;l&#x27;</span>, <span class="string">&#x27;4&#x27;</span>, <span class="string">&#x27;m&#x27;</span>, <span class="string">&#x27;4&#x27;</span>, <span class="string">&#x27;9&#x27;</span>, <span class="string">&#x27;l&#x27;</span>, <span class="string">&#x27;n&#x27;</span>, <span class="string">&#x27;p&#x27;</span>, <span class="string">&#x27;7&#x27;</span>, <span class="string">&#x27;p&#x27;</span>, <span class="string">&#x27;9&#x27;</span>, <span class="string">&#x27;m&#x27;</span>, <span class="string">&#x27;n&#x27;</span>, <span class="string">&#x27;k&#x27;</span>, <span class="string">&#x27;2&#x27;</span>, <span class="string">&#x27;8&#x27;</span>, <span class="string">&#x27;k&#x27;</span>, <span class="string">&#x27;7&#x27;</span>, <span class="string">&#x27;5&#x27;</span>, <span class="string">&#x27;&#125;&#x27;</span>]</span><br><span class="line">mingwen = [<span class="string">&#x27;&#x27;</span>] * <span class="number">38</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>,<span class="number">38</span>):</span><br><span class="line">    <span class="keyword">if</span> (miwen[i] &gt;= <span class="string">&#x27;A&#x27;</span> <span class="keyword">and</span> miwen[i] &lt;= <span class="string">&#x27;Z&#x27;</span>) <span class="keyword">or</span> (miwen[i] &gt;= <span class="string">&#x27;a&#x27;</span> <span class="keyword">and</span> miwen[i] &lt;= <span class="string">&#x27;z&#x27;</span>):</span><br><span class="line">        y = <span class="built_in">ord</span>(miwen[i]) + <span class="number">16</span></span><br><span class="line">        <span class="keyword">if</span> (y &gt; <span class="built_in">ord</span>(<span class="string">&#x27;Z&#x27;</span>) <span class="keyword">and</span> y &lt; <span class="built_in">ord</span>(<span class="string">&#x27;a&#x27;</span>)) <span class="keyword">or</span> (y &gt;= <span class="built_in">ord</span>(<span class="string">&#x27;z&#x27;</span>)):</span><br><span class="line">            y -= <span class="number">26</span></span><br><span class="line">        mingwen[i] = <span class="built_in">chr</span>(y)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        mingwen[i] = miwen[i]</span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(<span class="string">&quot;&quot;</span>.join(mingwen))</span><br><span class="line"><span class="built_in">print</span>(mingwen)</span><br></pre></td></tr></table></figure><h1 id="GWCTF-2019-pyre"><a href="#GWCTF-2019-pyre" class="headerlink" title="[GWCTF 2019]pyre"></a>[GWCTF 2019]pyre</h1><p>拿到题目反编译后得到这样的python代码</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20261012190202174.png" alt="image-20261012190202174"></p><p>分析第二个循环一下能够知道，反着算就行，code的最后一位是不变的</p><p>由于最后一位code[i + 1]没变，从后往前走，code[i + 1] ^ code [i]得到的就是异或前的code[i]</p><p>从后往前异或完得到的就是num</p><p>然后分析第一个循环</p><p>num &#x3D; (input[i] + i) % 128</p><p>反着算就是flag</p><p>num &#x3D; (input[i] - i) % 128</p><p>编写exp</p><figure class="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></pre></td><td class="code"><pre><span class="line">code = [<span class="string">&#x27;\x1f&#x27;</span>,<span class="string">&#x27;\x12&#x27;</span>,<span class="string">&#x27;\x1d&#x27;</span>,<span class="string">&#x27;(&#x27;</span>,<span class="string">&#x27;0&#x27;</span>,<span class="string">&#x27;4&#x27;</span>,<span class="string">&#x27;\x01&#x27;</span>,<span class="string">&#x27;\x06&#x27;</span>,<span class="string">&#x27;\x14&#x27;</span>,<span class="string">&#x27;4&#x27;</span>,<span class="string">&#x27;,&#x27;</span>,<span class="string">&#x27;\x1b&#x27;</span>,<span class="string">&#x27;U&#x27;</span>,<span class="string">&#x27;?&#x27;</span>,<span class="string">&#x27;o&#x27;</span>,<span class="string">&#x27;6&#x27;</span>,<span class="string">&#x27;*&#x27;</span>,<span class="string">&#x27;:&#x27;</span>,<span class="string">&#x27;\x01&#x27;</span>,<span class="string">&#x27;D&#x27;</span>,<span class="string">&#x27;;&#x27;</span>,<span class="string">&#x27;%&#x27;</span>,<span class="string">&#x27;\x13&#x27;</span>]</span><br><span class="line"><span class="built_in">len</span> = <span class="built_in">len</span>(code)</span><br><span class="line">flag = <span class="string">&#x27;&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="built_in">len</span> - <span class="number">2</span>, -<span class="number">1</span>, -<span class="number">1</span>):</span><br><span class="line">    code[i] = <span class="built_in">chr</span>(<span class="built_in">ord</span>(code[i]) ^ <span class="built_in">ord</span>(code[i + <span class="number">1</span>]))</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="built_in">len</span>):</span><br><span class="line">    flag += <span class="built_in">chr</span>((<span class="built_in">ord</span>(code[i]) - i )% <span class="number">128</span>)</span><br><span class="line"><span class="built_in">print</span>(flag)</span><br></pre></td></tr></table></figure>]]>
    </content>
    <id>https://www.hanlior.top/2026/10/16/reverse-engineering-basics/</id>
    <link href="https://www.hanlior.top/2026/10/16/reverse-engineering-basics/"/>
    <published>2026-10-16T12:47:51.000Z</published>
    <summary>
      <![CDATA[<p>本文整理 Android 注册逻辑、Java 解密、ELF 与 Windows 程序等基础逆向分析题目的思路和脚本。</p>]]>
    </summary>
    <title>基础逆向分析学习</title>
    <updated>2026-10-16T12:47:57.430Z</updated>
  </entry>
  <entry>
    <author>
      <name>HanLior</name>
    </author>
    <category term="博客搭建" scheme="https://www.hanlior.top/categories/%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/"/>
    <category term="Mac" scheme="https://www.hanlior.top/tags/Mac/"/>
    <category term="Hexo" scheme="https://www.hanlior.top/tags/Hexo/"/>
    <category term="NexT" scheme="https://www.hanlior.top/tags/NexT/"/>
    <category term="GitHub Pages" scheme="https://www.hanlior.top/tags/GitHub-Pages/"/>
    <content>
      <![CDATA[<p>本文介绍在 Mac 上搭建 Hexo 博客的步骤，包括环境安装、NexT 主题、自定义域名和 GitHub Pages 发布。</p><span id="more"></span><h2 id="配置Github项目"><a href="#配置Github项目" class="headerlink" title="配置Github项目"></a>配置Github项目</h2><p>在Github右上角点击<code>Repository</code></p><p>然后去New一个</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20261016175738215.png" alt="image-20261016175738215"></p><p>按照下面的输入配置，名字输入自己想要起的名字就可以</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20261016175714562.png" alt="image-20261016175714562"></p><figure class="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></pre></td><td class="code"><pre><span class="line">生成密钥</span><br><span class="line">ssh-keygen -t rsa -b 4096</span><br><span class="line">然后一路回车，可以看到生成到了/Users/cr1sp/.ssh/id_rsa  这里Cr1sp是我电脑的用户名</span><br><span class="line">用编辑器打开，去复制id_rsa.pub到github：</span><br><span class="line">https://github.com/settings/ssh</span><br><span class="line">改变密钥认证方式：</span><br><span class="line">ssh-keyscan -t ed25519 github.com &gt;&gt; ~/.ssh/known_hosts</span><br><span class="line">测试是否成功：</span><br><span class="line">ssh -T git@github.com</span><br></pre></td></tr></table></figure><p>如果出现这样的字就是代表可以链接成功</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20261016181146553.png" alt="image-20261016181146553"></p><p>设置账号信息：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git config --global user.name &quot;HanLior&quot;</span><br></pre></td></tr></table></figure><p>设置github邮箱：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git config --global user.email &quot;你的 GitHub 邮箱&quot;</span><br></pre></td></tr></table></figure><h2 id="下载Git"><a href="#下载Git" class="headerlink" title="下载Git"></a>下载Git</h2><p>这里我用的<code>homebrew</code>下载的git</p><h3 id="1-先安装homebrew"><a href="#1-先安装homebrew" class="headerlink" title="1.先安装homebrew"></a>1.先安装homebrew</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;</span><br></pre></td></tr></table></figure><h3 id="2-通过Homebrew安装Git"><a href="#2-通过Homebrew安装Git" class="headerlink" title="2.通过Homebrew安装Git"></a>2.通过Homebrew安装Git</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">brew install git</span><br></pre></td></tr></table></figure><h3 id="3-验证是否安装成功"><a href="#3-验证是否安装成功" class="headerlink" title="3.验证是否安装成功"></a>3.验证是否安装成功</h3><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20261016180454015.png" alt="image-20261016180454015"></p><p>出现这样的就是安装成功</p><h2 id="安装node-js"><a href="#安装node-js" class="headerlink" title="安装node.js"></a>安装node.js</h2><h3 id="1-下载node-js"><a href="#1-下载node-js" class="headerlink" title="1.下载node.js"></a>1.下载<code>node.js</code></h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">brew install node</span><br></pre></td></tr></table></figure><h3 id="2-验证是否下载成功"><a href="#2-验证是否下载成功" class="headerlink" title="2.验证是否下载成功"></a>2.验证是否下载成功</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">node --version</span><br></pre></td></tr></table></figure><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20261016181508935.png" alt="image-20261016181508935"></p><h2 id="搭建Hexo"><a href="#搭建Hexo" class="headerlink" title="搭建Hexo"></a>搭建Hexo</h2><h3 id="1-切换阿里云镜像源"><a href="#1-切换阿里云镜像源" class="headerlink" title="1.切换阿里云镜像源"></a>1.切换阿里云镜像源</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm config set registry https://registry.npmmirror.com</span><br></pre></td></tr></table></figure><h3 id="2-安装cnpm"><a href="#2-安装cnpm" class="headerlink" title="2.安装cnpm"></a>2.安装cnpm</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g cnpm --registry=https://registry.npmmirror.com</span><br></pre></td></tr></table></figure><h3 id="3-用-cnpm-安装-hexo"><a href="#3-用-cnpm-安装-hexo" class="headerlink" title="3.用 cnpm 安装 hexo"></a>3.用 cnpm 安装 hexo</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cnpm install -g hexo-cli</span><br></pre></td></tr></table></figure><h3 id="4-验证是否安装成功"><a href="#4-验证是否安装成功" class="headerlink" title="4.验证是否安装成功"></a>4.验证是否安装成功</h3><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20261016181759230.png" alt="image-20261016181759230"></p><h2 id="本地创建Hexo博客文件"><a href="#本地创建Hexo博客文件" class="headerlink" title="本地创建Hexo博客文件"></a>本地创建Hexo博客文件</h2><p>先在本地目录里面创建一个文件夹</p><figure class="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">mkdir blog</span><br><span class="line">cd blog</span><br><span class="line">hexo init</span><br></pre></td></tr></table></figure><p>然后看到blog目录文件里面有这些东西就可以</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20261016182022391.png" alt="image-20261016182022391"></p><figure class="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></pre></td><td class="code"><pre><span class="line">node_modules: 依赖包</span><br><span class="line">public：存放生成的页面</span><br><span class="line">scaffolds：生成文章的一些模板</span><br><span class="line">source：用来存放你的文章</span><br><span class="line">themes：放下下载的主题</span><br><span class="line">_config.yml: 博客的核心配置文件（设置主体、标题等属性）</span><br></pre></td></tr></table></figure><p>启动<code>cnpm install</code></p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20261016182214771.png" alt="image-20261016182214771"></p><p>启动hexo <code>hexo s -g</code></p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20261016182256053.png" alt="image-20261016182256053"></p><p>访问<code>127.0.0.1:4000</code></p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20261016182322636.png" alt="image-20261016182322636"></p><p>配置域名解析，可以参考这篇文章</p><p><a href="https://www.duheweb.com/post/20210417143744.html">https://www.duheweb.com/post/20210417143744.html</a></p><p>然后去github配置一下域名，启用https</p><p><img src="https://raw.githubusercontent.com/xhcola/typora_drawing_bed/main/Image/image-20261016192203746.png" alt="image-20261016192203746"></p><h2 id="本站实际配置记录"><a href="#本站实际配置记录" class="headerlink" title="本站实际配置记录"></a>本站实际配置记录</h2><p>以下配置对应本博客当前使用的 GitHub 仓库和域名：</p><ul><li>GitHub 用户：<code>HanLior</code></li><li>Pages 仓库：<code>HanLior/HanLior.github.io</code></li><li>域名：<code>www.hanlior.top</code></li><li>Hexo 项目目录：<code>/Users/cr1sp/blog</code></li><li>Hexo：8.1.2；NexT：8.21.1，Pisces 风格</li></ul><h3 id="配置-DNS"><a href="#配置-DNS" class="headerlink" title="配置 DNS"></a>配置 DNS</h3><p>在域名服务商的 DNS 解析页面添加以下记录。根域名用 4 条 A 记录，<code>www</code> 用 CNAME；CNAME 的记录值不要带 <code>https://</code> 或末尾路径。</p><table><thead><tr><th>主机记录</th><th>类型</th><th>记录值</th></tr></thead><tbody><tr><td><code>@</code></td><td>A</td><td><code>185.199.108.153</code></td></tr><tr><td><code>@</code></td><td>A</td><td><code>185.199.109.153</code></td></tr><tr><td><code>@</code></td><td>A</td><td><code>185.199.110.153</code></td></tr><tr><td><code>@</code></td><td>A</td><td><code>185.199.111.153</code></td></tr><tr><td><code>www</code></td><td>CNAME</td><td><code>HanLior.github.io</code></td></tr></tbody></table><p>在 GitHub 仓库 <code>HanLior/HanLior.github.io</code> 的 <strong>Settings → Pages</strong> 中，发布来源选择 <code>Deploy from a branch</code>，分支选择 <code>main</code>、目录选择 <code>/(root)</code>。Custom domain 填 <code>www.hanlior.top</code>。等 DNS 检查和 TLS 证书签发完成后，再启用 <strong>Enforce HTTPS</strong>。</p><p>在 Hexo 的 <code>source/CNAME</code> 文件中只写自定义域名：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">www.hanlior.top</span><br></pre></td></tr></table></figure><p>不要把 <code>CNAME</code> 文件放在 <code>source/_posts</code> 里，也不要把它命名为 <code>CNAME.txt</code>。</p><h3 id="配置-Hexo-部署到-GitHub-Pages"><a href="#配置-Hexo-部署到-GitHub-Pages" class="headerlink" title="配置 Hexo 部署到 GitHub Pages"></a>配置 Hexo 部署到 GitHub Pages</h3><p>在博客根目录 <code>/Users/cr1sp/blog</code> 安装部署插件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-deployer-git --save</span><br></pre></td></tr></table></figure><p>在根目录的 <code>_config.yml</code> 配置仓库和分支：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">deploy:</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">git</span></span><br><span class="line">  <span class="attr">repo:</span> <span class="string">git@github.com:HanLior/HanLior.github.io.git</span></span><br><span class="line">  <span class="attr">branch:</span> <span class="string">main</span></span><br></pre></td></tr></table></figure><p>每次发布前先清理并重新生成，再部署：</p><figure class="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">npx hexo clean</span><br><span class="line">npx hexo generate</span><br><span class="line">npx hexo deploy</span><br></pre></td></tr></table></figure><p>也可以依次使用 <code>hexo clean</code>、<code>hexo generate</code>、<code>hexo deploy</code>。第一次在本机部署时需要已经配置 GitHub SSH Key，并确认 <code>ssh -T git@github.com</code> 可以连接。</p><h3 id="安装并启用-NexT-主题"><a href="#安装并启用-NexT-主题" class="headerlink" title="安装并启用 NexT 主题"></a>安装并启用 NexT 主题</h3><p>本站使用 NexT 8.21.1，主题通过 npm 安装并由 <code>package.json</code> 管理：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-theme-next@8.21.1 --save</span><br></pre></td></tr></table></figure><p>Hexo 根目录 <code>_config.yml</code> 中设置：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">theme:</span> <span class="string">next</span></span><br></pre></td></tr></table></figure><p>主题设置写在博客根目录的 <code>_config.next.yml</code>，不是 <code>themes/next/_config.yml</code>。本站使用 Pisces、深色模式、左侧文章侧栏、中文导航和 GitHub 个人链接：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">scheme:</span> <span class="string">Pisces</span></span><br><span class="line"><span class="attr">darkmode:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="attr">sidebar:</span></span><br><span class="line">  <span class="attr">position:</span> <span class="string">left</span></span><br><span class="line">  <span class="attr">display:</span> <span class="string">post</span></span><br><span class="line"></span><br><span class="line"><span class="attr">menu:</span></span><br><span class="line">  <span class="attr">home:</span> <span class="string">/</span> <span class="string">||</span> <span class="string">home</span></span><br><span class="line">  <span class="attr">categories:</span> <span class="string">/categories/</span> <span class="string">||</span> <span class="string">th</span></span><br><span class="line">  <span class="attr">tags:</span> <span class="string">/tags/</span> <span class="string">||</span> <span class="string">tags</span></span><br><span class="line">  <span class="attr">about:</span> <span class="string">/about/</span> <span class="string">||</span> <span class="string">user</span></span><br><span class="line"></span><br><span class="line"><span class="attr">social:</span></span><br><span class="line">  <span class="attr">GitHub:</span> <span class="string">https://github.com/HanLior</span> <span class="string">||</span> <span class="string">fab</span> <span class="string">fa-github</span></span><br></pre></td></tr></table></figure><p><code>menu</code> 中的页面需在 <code>source</code> 目录下创建对应页面。本站有分类、标签和关于页面；目前没有文章，所以暂时不显示归档入口。以后发布文章后，可以在主题配置里加上：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">archives:</span> <span class="string">/archives/</span> <span class="string">||</span> <span class="string">archive</span></span><br></pre></td></tr></table></figure><h3 id="创建分类、标签和关于页面"><a href="#创建分类、标签和关于页面" class="headerlink" title="创建分类、标签和关于页面"></a>创建分类、标签和关于页面</h3><p>可用 Hexo 命令生成页面：</p><figure class="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">npx hexo new page categories</span><br><span class="line">npx hexo new page tags</span><br><span class="line">npx hexo new page about</span><br></pre></td></tr></table></figure><p>命令会创建 <code>source/&lt;页面名&gt;/index.md</code>。分类页和标签页的 front matter 分别设置 <code>type: categories</code>、<code>type: tags</code>；这些页面以及关于页均可设置 <code>comments: false</code>。例如：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">分类</span></span><br><span class="line"><span class="attr">type:</span> <span class="string">categories</span></span><br><span class="line"><span class="attr">comments:</span> <span class="literal">false</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><h3 id="本站开启的搜索和-SEO-基础功能"><a href="#本站开启的搜索和-SEO-基础功能" class="headerlink" title="本站开启的搜索和 SEO 基础功能"></a>本站开启的搜索和 SEO 基础功能</h3><p>安装搜索索引、Atom 订阅和站点地图插件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-generator-searchdb hexo-generator-feed hexo-generator-sitemap --save</span><br></pre></td></tr></table></figure><p>Hexo 根目录 <code>_config.yml</code> 中配置搜索索引、订阅和站点地图：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">search:</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">search.xml</span></span><br><span class="line">  <span class="attr">field:</span> <span class="string">post</span></span><br><span class="line">  <span class="attr">content:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">format:</span> <span class="string">striptags</span></span><br><span class="line"></span><br><span class="line"><span class="attr">feed:</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">atom</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">atom.xml</span></span><br><span class="line">  <span class="attr">limit:</span> <span class="number">20</span></span><br><span class="line"></span><br><span class="line"><span class="attr">sitemap:</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">sitemap.xml</span></span><br><span class="line">  <span class="attr">tags:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">categories:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><p>NexT 的 <code>_config.next.yml</code> 开启本地搜索：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">local_search:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">top_n_per_article:</span> <span class="number">1</span></span><br><span class="line">  <span class="attr">unescape:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">preload:</span> <span class="literal">false</span></span><br></pre></td></tr></table></figure><p>本站还在 <code>_config.next.yml</code> 中启用了代码块复制和 Busuanzi 访问统计：</p><figure class="highlight yaml"><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"><span class="attr">codeblock:</span></span><br><span class="line">  <span class="attr">copy_button:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">style:</span> <span class="string">mac</span></span><br><span class="line"></span><br><span class="line"><span class="attr">busuanzi_count:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">total_visitors:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">total_visitors_icon:</span> <span class="string">fa</span> <span class="string">fa-user</span></span><br><span class="line">  <span class="attr">total_views:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">total_views_icon:</span> <span class="string">fa</span> <span class="string">fa-eye</span></span><br><span class="line">  <span class="attr">post_views:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">post_views_icon:</span> <span class="string">far</span> <span class="string">fa-eye</span></span><br></pre></td></tr></table></figure><p>根目录配置还要填写站点标题、作者、语言、时区和正式网址。本站当前值如下：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">title:</span> <span class="string">HanLior</span></span><br><span class="line"><span class="attr">subtitle:</span> <span class="string">技术学习与实践</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">HanLior</span> <span class="string">的个人博客，记录技术学习、项目实践与思考。</span></span><br><span class="line"><span class="attr">keywords:</span> <span class="string">Hexo,</span> <span class="string">NexT,</span> <span class="string">HanLior</span></span><br><span class="line"><span class="attr">author:</span> <span class="string">HanLior</span></span><br><span class="line"><span class="attr">language:</span> <span class="string">zh-CN</span></span><br><span class="line"><span class="attr">timezone:</span> <span class="string">Asia/Shanghai</span></span><br><span class="line"><span class="attr">url:</span> <span class="string">https://www.hanlior.top</span></span><br></pre></td></tr></table></figure><p>搜索引擎抓取规则放在 <code>source/robots.txt</code>：</p><figure class="highlight text"><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">User-agent: *</span><br><span class="line">Allow: /</span><br><span class="line">Sitemap: https://www.hanlior.top/sitemap.xml</span><br></pre></td></tr></table></figure><p>本站还开启了 NexT 深色模式。访问统计需要访客打开网页后才会逐步积累数据。</p><h3 id="删除默认示例文章"><a href="#删除默认示例文章" class="headerlink" title="删除默认示例文章"></a>删除默认示例文章</h3><p>Hexo 初始化时会生成 <code>source/_posts/hello-world.md</code>。删除该文件并重新部署后，文章和归档列表里就不会再显示 Hello World。删除博客最后一篇文章时，Hexo 可能不再生成首页，所以本站创建了 <code>source/index.md</code> 作为首页提示：</p><figure class="highlight markdown"><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">---</span><br><span class="line">title: 首页</span><br><span class="line">layout: page</span><br><span class="line"><span class="section">comments: false</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"></span><br><span class="line">文章正在整理中，欢迎稍后再来。</span><br></pre></td></tr></table></figure><p>之后写新文章可运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx hexo new post <span class="string">&quot;文章标题&quot;</span></span><br></pre></td></tr></table></figure><p>完成编辑后再运行清理、生成和部署命令。</p>]]>
    </content>
    <id>https://www.hanlior.top/2026/10/16/mac-hexo-next-custom-domain-blog/</id>
    <link href="https://www.hanlior.top/2026/10/16/mac-hexo-next-custom-domain-blog/"/>
    <published>2026-10-16T11:48:03.000Z</published>
    <summary>
      <![CDATA[<p>本文介绍在 Mac 上搭建 Hexo 博客的步骤，包括环境安装、NexT 主题、自定义域名和 GitHub Pages 发布。</p>]]>
    </summary>
    <title>在Mac上搭建个人博客：Hexo + NexT + 自定义域名搭建永久有效的个人博客网站</title>
    <updated>2026-10-16T12:44:41.415Z</updated>
  </entry>
</feed>
