<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>NotionNext BLOG</title>
        <link>https://www.reveone.cn//</link>
        <description>这是一个由NotionNext生成的站点</description>
        <lastBuildDate>Tue, 21 May 2024 09:14:05 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-CN</language>
        <copyright>All rights reserved 2024, Reveone</copyright>
        <item>
            <title><![CDATA[区块链技术浅析及漏洞挖掘]]></title>
            <link>https://www.reveone.cn//article/77b85ce5-2675-4e78-9aab-d706b32e19af</link>
            <guid>https://www.reveone.cn//article/77b85ce5-2675-4e78-9aab-d706b32e19af</guid>
            <pubDate>Sun, 10 Sep 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[区块链技术浅析及漏洞挖掘是一篇介绍区块链技术及漏洞挖掘的文章。文章内容包括区块链、以太坊、智能合约的概念和特点，围绕区块链技术的几个问题进行探讨，以及智能合约环境搭建的步骤和演示。
该文章是一篇技术分享的博客，发布日期为2023年9月10日，标签为区块链，分类为技术分享。
]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-77b85ce526754e789aabd706b32e19af"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-52732fd262324282babbda4234e1200a" data-id="52732fd262324282babbda4234e1200a"><span><div id="52732fd262324282babbda4234e1200a" class="notion-header-anchor"></div><a class="notion-hash-link" href="#52732fd262324282babbda4234e1200a" title="一、什么是区块链、以太坊、智能合约？"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">一、什么是区块链、以太坊、智能合约？</span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-f9a52fd07ca5405eb71ee8bd317eadf1" data-id="f9a52fd07ca5405eb71ee8bd317eadf1"><span><div id="f9a52fd07ca5405eb71ee8bd317eadf1" class="notion-header-anchor"></div><a class="notion-hash-link" href="#f9a52fd07ca5405eb71ee8bd317eadf1" title="1.区块链相关特性："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.区块链相关特性：</span></span></h4><ul class="notion-list notion-list-disc notion-block-57df15c5187d4c68ad6ad381f37d77d9"><li><b>多元化数据库</b>：区块链是一个特殊的多元化数据库系统，其中每台计算机上都存储相同的数据信息。即使某台计算机发生故障，其上的信息也不会丢失，因为这些数据还保存着在网络的其他计算机上。</li></ul><ul class="notion-list notion-list-disc notion-block-4fe5681d5c1a4469b1c81b1a4db3237a"><li><b>去中心化结构</b>：与传统数据库不同，区块链是完全分散的，没有中心节点。每一个加入网络的节点（无论是服务器、笔记本电脑还是手机）都存储有一个完整实时同步的数据。</li></ul><ul class="notion-list notion-list-disc notion-block-89e89e3fb91541b59ca59c43f0ee46be"><li><b>与传统体系的区别</b>：与传统的银行体制形成对比，银行将每一笔交易记录在自己的系统中。而区块链则通过公开透明的规则和协议（如特定算法）来操作，所有的操作全部由机器完成，除了人为主体。这改变了我们从依赖对人的信任转向对技术的信任。</li></ul><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-9c50b628defa478bb8a1eaa48b29d18f" data-id="9c50b628defa478bb8a1eaa48b29d18f"><span><div id="9c50b628defa478bb8a1eaa48b29d18f" class="notion-header-anchor"></div><a class="notion-hash-link" href="#9c50b628defa478bb8a1eaa48b29d18f" title="2.浅谈区块链技术的诞生："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.浅谈区块链技术的诞生：</span></span></h4><div class="notion-text notion-block-634d83b6fa0e4377b0f626be3f11106f">尤瓦尔·赫拉利在《人类简史》中有提到货币的诞生是基于人们之间的共同信任。在早期的交易方式(以物易物)中，交换物品的两方都必须对所交换的物品有需求。但货币改变了这一情况，人们不再直接交换物品，而是使用一个普遍接受的中介——货币。这时为货币背书的可能是一个国家的君主，一个宗教的神灵，为了增强货币的公信力，在铸造货币时往往会刻上其标志或肖像。货币的价值不在于它自身，而在于人们对其所寄予的信任。货币本质上是一种集体的“心理建构”，即使是金币或银币，其价值也远超过它们的物质价值。</div><div class="notion-text notion-block-68f2e8160b754506a0d9d7aebbf91897">基于一个国家或一个宗教的权威而发行和管理的货币交易体系，可以被视为中心化的交易模式。然而，随着数字化时代的到来，中心化的信任机制开始面临挑战。如何在一个去中心化的网络中确保交易的安全性和真实性，成为了一个迫切的问题。</div><div class="notion-text notion-block-5422f8f31d73428e8a054291a2b51ae3">区块链技术的诞生，就是对信任机制的一次重构。与传统的货币不同，区块链技术的信任是建立在技术基础上，而不是集体心理或中心机构。如赫拉利描述的，货币的价值来源于人们的共同信任，而区块链技术则将这种信任转移到了技术上。通过去中心化的结构，区块链确保了数据的不可篡改性和透明性，从而建立了一个新的信任机制。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-fae62aacd4da43309e22722bea735df6" data-id="fae62aacd4da43309e22722bea735df6"><span><div id="fae62aacd4da43309e22722bea735df6" class="notion-header-anchor"></div><a class="notion-hash-link" href="#fae62aacd4da43309e22722bea735df6" title="3.什么是以太坊："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3.什么是以太坊：</span></span></h4><div class="notion-text notion-block-d2c46bd7fd544956b247cd1d7a683f29">区块链提供了比特币的公共分类账，是一个有序和有时间标记的交易记录，用于防止重复支出或修改交易记录。</div><div class="notion-text notion-block-efb3319edcfe41ad8dad67dcda426bd5">和其他区块链一样，以太坊也拥有原生加密货币，叫作Ether (ETTH)。ETH是一种纯数字货币，可以被即时发送给世界上任何地方的任何人。ETH是去中心化且具稀缺性的。</div><div class="notion-text notion-block-5959f69b6a714b808269ed38364c361c">与以bitcoin为首的第一代区块链不同的是，以太坊可以做更多的工作。以太坊是可编程的，开发者可以用它来构建不同于以往的应用程序。这些去中心化的应用程序(或称dapps)基于加密货币与区块链技术，因而值得信任。也就是说，dapps一旦被上传到以太坊，将始终按照编好的程序运行。这些应用程序可以控制数字资产，以便创造新的金融应用。以太坊具有以下特性。</div><ul class="notion-list notion-list-disc notion-block-93d79d17a3bb4a8e89a49608040ab30b"><li>内建货币与支付。</li></ul><ul class="notion-list notion-list-disc notion-block-1c40b4b5a5564ca1b557521049027aa3"><li>用户拥有个人数据主权，且不会被各类应用监听或窃取数据。</li></ul><ul class="notion-list notion-list-disc notion-block-90b172195e694d2b84ddd9c0b15895ff"><li>人人都有权使用开放的金融系统。</li></ul><ul class="notion-list notion-list-disc notion-block-e747162bd366453d941908578c5fed0d"><li>基于中立且开源的基础架构，不受任何组织或个人控制。</li></ul><ul class="notion-list notion-list-disc notion-block-b339564543c04343b3e3f757c8aa0bf2"><li>是世界上第一个可编程区块链，开发者可以在以太坊区块链上部署智能合约，从而对区块链上的数据进行修改或者使用。</li></ul><div class="notion-text notion-block-8f5e80ee31b44cf5887ad56e2d610d2f">以太坊存在多个网络版本。最核心、也是交易价值最大的，被称为“<code class="notion-inline-code">主网络</code>”或“<code class="notion-inline-code">主链</code>”。此外，还有为了开发和测试目的而设立的“测试网络”，其中一个常用的<code class="notion-inline-code">测试网络（测试链）</code>是<code class="notion-inline-code">Ropsten</code>。这些测试网络允许开发者免费获取测试用的以太币，以方便进行智能合约的测试和验证。此外，还可以自建私有的以太坊网络，称为“私链”。正因为这样的设置，让我们可以不需花费任何成本就能学习智能合约。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-59aac96c3c8943a88039c509a39fe93d" data-id="59aac96c3c8943a88039c509a39fe93d"><span><div id="59aac96c3c8943a88039c509a39fe93d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#59aac96c3c8943a88039c509a39fe93d" title="4.智能合约概念介绍(Smart Contract)"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">4.智能合约概念介绍(<b>Smart</b> Contract)</span></span></h4><div class="notion-text notion-block-8d5ce5dd40a1430f8ef4c559dfdf363e">智能合约是一组自动执行预定义规则的代码，类似于我们生活中的自动售货机。当用户选择商品并支付后，售货机会自动释放商品，用户不必担心交易的信任问题，因为售货机按照预设的程序操作。类似地，信用卡的自动还款也是一种实现了智能合约逻辑的机制：在设定自动还款之后，到期时系统会自动扣款。</div><div class="notion-text notion-block-d6f4aa6e0832428c8c6de972e4012758">智能合约的这一概念，在数字货币和区块链领域得到了更深入的应用和发展。2008年，一个化名为中本聪的人或团队发表了《比特币：一种点对点的电子现金系统》论文，这标志着比特币的诞生。比特币的底层技术框架，即<code class="notion-inline-code">区块链</code>，后来成为了许多技术创新的基础。2013年，受比特币启发，维塔利克·布特林提出了<code class="notion-inline-code">以太坊</code>概念，这被称为第<code class="notion-inline-code">二代区块链平台</code>。以太坊的独特之处在于它引入了智能合约功能，使其不仅仅是一个数字货币，而是一个完整的编程平台。在以太坊上，任何掌握<code class="notion-inline-code">Solidity</code>（这个语言与JavaScript的语法类似）的人，只要支付足够的矿工费，都可以编写和部署智能合约。</div><div class="notion-text notion-block-c82c13be027c4ec583e1489679a44000">简单来说，以太坊智能合约就是一段可以运行在以太坊上的代码。之所以被称作合约，是因为用户可以通过这段运行在以太坊上的代码控制有价值的事物，例如ETH或其他数字资产。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-011e026133b7458d9db47aded7359060" data-id="011e026133b7458d9db47aded7359060"><span><div id="011e026133b7458d9db47aded7359060" class="notion-header-anchor"></div><a class="notion-hash-link" href="#011e026133b7458d9db47aded7359060" title="二、围绕区块链技术的几个问题："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">二、围绕区块链技术的几个问题：</span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-d2b4a3b0bb3b455a9454066f74d22dcf" data-id="d2b4a3b0bb3b455a9454066f74d22dcf"><span><div id="d2b4a3b0bb3b455a9454066f74d22dcf" class="notion-header-anchor"></div><a class="notion-hash-link" href="#d2b4a3b0bb3b455a9454066f74d22dcf" title="1.信任的构建："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.信任的构建：</span></span></h4><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-46f70af76b434410adb7984d3dfbf045"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:656px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fbe5563e7-ae1e-4ed5-aad0-373d6f157a2b%2FUntitled.png?table=block&amp;id=46f70af7-6b43-4410-adb7-984d3dfbf045&amp;t=46f70af7-6b43-4410-adb7-984d3dfbf045" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-c405528fb1d84e39994df523c6c95f82">从上图中可以看到信任的两种情况，前一种也就是所谓的三人成虎，第二种就是一个公信度极高人的背书。</div><div class="notion-text notion-block-c2a6dfc3db81470bbc5788aa90537de9">金融交易基于信任。一个国家的货币之所以有价值，很大程度上是因为人们对该国有信心。例如，人们相信一些画家的画很有价值，这幅画就可以卖出高价。所以无论是什么东西只要人们相信它具有价值那么他就是有价值的。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-75611fb62f6e41228e597de5c38a51bd"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F6495f4ad-7dcb-4e8c-8234-dea8b0bb4d87%2FUntitled.png?table=block&amp;id=75611fb6-2f6e-4122-8e59-7de5c38a51bd&amp;t=75611fb6-2f6e-4122-8e59-7de5c38a51bd" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-871c51fda5ae462bab63bb0e7d35d17b">上图是金融交易试的两种信任情况的具体表现，中本聪提出的比特币就属于后者的情况，其核心思想是创建一个去中心化的货币系统，其中通过特定的技术和协议确保每一笔交易的完整性、安全性和不可篡改性。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-66b6d103a46e4286ad3ca1f7f42855a5" data-id="66b6d103a46e4286ad3ca1f7f42855a5"><span><div id="66b6d103a46e4286ad3ca1f7f42855a5" class="notion-header-anchor"></div><a class="notion-hash-link" href="#66b6d103a46e4286ad3ca1f7f42855a5" title="2.交易的公正与透明："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.<b><b>交易的公正与透明：</b></b></span></span></h4><div class="notion-text notion-block-edbdfe4b5b834927a436806a2d913769">中本聪通过比特币展示了如何在一个去中心化的网络中记录交易。矿工的引入不仅确保了交易信息的录入，还通过奖励机制激励了他们。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-4a89605714834f568961a6997825efc4"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fb79ee534-392d-4edc-8d35-257b543bf80e%2FUntitled.png?table=block&amp;id=4a896057-1483-4f56-8961-a6997825efc4&amp;t=4a896057-1483-4f56-8961-a6997825efc4" alt="notion image" loading="lazy" decoding="async"/></div></figure><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-75703614399f4929b3ccc98c072b3026" data-id="75703614399f4929b3ccc98c072b3026"><span><div id="75703614399f4929b3ccc98c072b3026" class="notion-header-anchor"></div><a class="notion-hash-link" href="#75703614399f4929b3ccc98c072b3026" title="3.如何保证每笔交易的安全性和不可篡改性："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3.如何保证每笔交易的安全性和不可篡改性：</span></span></h4><div class="notion-text notion-block-6bf03cc3a2ca4308add6778eb2931997">区块链保证交易安全性和不可篡改性的关键在于其独特的结构以及对密码的应用：</div><ul class="notion-list notion-list-disc notion-block-328f43d105824abf91f2b8c2e18717b7"><li><b>链式结构</b>：区块链是由一系列区块组成的链条。每个区块包含了一批交易记录，并且还有前一个区块的哈希值。这意味着，为了修改任何一个区块中的信息，不仅需要修改该区块，还需要修改它后面的所有区块，这在实际操作中几乎是不可能的。</li></ul><ul class="notion-list notion-list-disc notion-block-fde8aafe4f3f43aa879461cef89b3ce2"><li><b>哈希函数</b>：每个区块都通过哈希函数生成一个唯一的哈希值。哈希函数的特性是，即使只修改区块中的一个微小的数据，产生的哈希值也会完全不同。因此，任何篡改都会被立刻被检测到。</li></ul><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-6edba1eb8f724dc3858465442faf2fc1" data-id="6edba1eb8f724dc3858465442faf2fc1"><span><div id="6edba1eb8f724dc3858465442faf2fc1" class="notion-header-anchor"></div><a class="notion-hash-link" href="#6edba1eb8f724dc3858465442faf2fc1" title="4.有很多人记账后，选择谁写的账单："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">4.有很多人记账后，选择谁写的账单：</span></span></h4><div class="notion-text notion-block-7ec0a35b09c24233bff55bc4a2fafae5">在一个没有中心化机构的网络中，如何确保账本的真实性？工作量证明策略被提出，旨在提高伪造账本的成本，确保每一个交易的真实与不变。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-a73e6b2650ea4f7aaa7cace1645e81ce"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F7b36207d-ff43-43e5-a5e9-d9d8aba49655%2FUntitled.png?table=block&amp;id=a73e6b26-50ea-4f7a-aa7c-ace1645e81ce&amp;t=a73e6b26-50ea-4f7a-aa7c-ace1645e81ce" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-468a77fc2abc4044931bd502472facb6"><b>工作量证明（Proof of Work，PoW）机制：</b></div><div class="notion-text notion-block-13770f84b81e4e8ca2427643dcd76465"><b>1. 为什么需要PoW机制：</b></div><div class="notion-text notion-block-163da87fea4b4dc8b72925fdb6572525">在去中心化的网络中，记账节点间可能出现分歧，导致不同的账本版本。面对多个版本，如何判断哪一个是正确的呢？在没有中心权威进行确认的情况下，这是个大问题。而&quot;少数服从多数&quot;的原则在此处并不适用，因为恶意攻击者可以创建众多伪造的节点来占据多数，这种攻击被称为“女巫攻击”。简单地提高加入网络的成本是无法防止此类攻击的，因为对于某些攻击者来说，这只是一次性成本。</div><div class="notion-text notion-block-f979dcb6aa36498c959bd56ea491082c"><b>2. PoW机制的目的：</b></div><div class="notion-text notion-block-6562547312384ccfa3eebc601f7bfc8e">工作量证明机制的目的是确保对网络的攻击成本极高，使得攻击变得不实际。为了篡改区块链上的数据，攻击者不仅需要控制超过50%的网络算力，还需要重新完成所有篡改后的区块的计算，这对攻击者来说是巨大的资源消耗。</div><div class="notion-text notion-block-73e743c0723648979354a49486a225d9"><b>3. PoW机制的工作方法：</b></div><ul class="notion-list notion-list-disc notion-block-a463284bb1fd477e89cbde2280c70a16"><li><b>区块构建</b>：矿工从交易池中选取交易，将它们打包成一个区块。</li></ul><ul class="notion-list notion-list-disc notion-block-a2d97a90fb9a450191687942e9e43ff2"><li><b>计算Merkle树</b>：矿工计算所有交易的Merkle树的根哈希值，并将其包含在新区块的头部。</li></ul><ul class="notion-list notion-list-disc notion-block-94fd9d255c6846c6b967f654efd9d953"><li><b>计算区块哈希</b>：矿工在新区块头部中添加上一个区块的哈希值、Merkle根和其他必要信息。</li></ul><ul class="notion-list notion-list-disc notion-block-d0b4c0e18fb5474da046867c0109f654"><li><b>找到符合条件的哈希</b>：矿工开始变更头部的一个字段，通常称为“随机数”（nonce），并计算新区块的哈希值，直到找到一个满足网络当前难度目标的哈希值。</li></ul><ul class="notion-list notion-list-disc notion-block-c5bfd3274bdf4920897b111a088db3ad"><li><b>广播新区块</b>：一旦找到了满足条件的哈希值，矿工就可以将新区块广播到整个网络，其他节点会验证新区块，并决定是否将其添加到自己的区块链版本中。</li></ul><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-a41e48899ed74a0494434a20b23401f8" data-id="a41e48899ed74a0494434a20b23401f8"><span><div id="a41e48899ed74a0494434a20b23401f8" class="notion-header-anchor"></div><a class="notion-hash-link" href="#a41e48899ed74a0494434a20b23401f8" title="三、智能合约环境搭建："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">三、智能合约环境搭建：</span></span></h3><div class="notion-row notion-block-ce84cdbdba1447ccbfa533db0a19650f"><div class="notion-column notion-block-dc93d0af1539497a800b432743e90268" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.5)"><h4 class="notion-h notion-h3 notion-block-870adb28e010429287a2e7fa8b1fe7c6" data-id="870adb28e010429287a2e7fa8b1fe7c6"><span><div id="870adb28e010429287a2e7fa8b1fe7c6" class="notion-header-anchor"></div><a class="notion-hash-link" href="#870adb28e010429287a2e7fa8b1fe7c6" title="1.环境准备："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.环境准备：</span></span></h4><ul class="notion-list notion-list-disc notion-block-bfa6f668fa334ffc95ea5657d652ad62"><li>Chrome</li></ul><ul class="notion-list notion-list-disc notion-block-619bb9fbabd94a2091cd189779d0d8ab"><li>MetaMask插件</li></ul><ul class="notion-list notion-list-disc notion-block-1f4a4dae0551439399fc4ae10ac8bfed"><li>Remix</li></ul><h4 class="notion-h notion-h3 notion-block-2f0de564064d4c519c2f00c912146403" data-id="2f0de564064d4c519c2f00c912146403"><span><div id="2f0de564064d4c519c2f00c912146403" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2f0de564064d4c519c2f00c912146403" title="2.常用测试链介绍："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.常用测试链介绍：</span></span></h4><ul class="notion-list notion-list-disc notion-block-fec7100f38634f9586eee2385e69b0d7"><li>Rinkeby：只支持geth客户端，一个POW的区块链，非常类似于以太坊主网</li></ul><ul class="notion-list notion-list-disc notion-block-0e5a36cb8eb149a1bb8dc798f574c44f"><li>Kovan：只支持Parity客户端。一个POA的区块链，不能挖矿，只能申请。</li></ul><ul class="notion-list notion-list-disc notion-block-f0c9d491e7064247ae02df95d555e5c3"><li>Ropsten：支持geth和Parity客户端。一个POA的区块链，不能挖矿，只能申请。</li></ul></div><div class="notion-spacer"></div><div class="notion-column notion-block-863542c919444665b038823c23057f49" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.5)"><h4 class="notion-h notion-h3 notion-block-c5fa53e191d54bd4b41281fc4d6aae43" data-id="c5fa53e191d54bd4b41281fc4d6aae43"><span><div id="c5fa53e191d54bd4b41281fc4d6aae43" class="notion-header-anchor"></div><a class="notion-hash-link" href="#c5fa53e191d54bd4b41281fc4d6aae43" title="3.必备网站："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3.必备网站：</span></span></h4><ol start="1" class="notion-list notion-list-numbered notion-block-4ade2ee232cb4a06b667c3c336dc3809"><li>以太坊区块链的信息查看：</li><ol class="notion-list notion-list-numbered notion-block-4ade2ee232cb4a06b667c3c336dc3809"><li>真实链：</li><ol class="notion-list notion-list-numbered notion-block-b03815b6555141cd9d3d0d78e96e7920"><div class="notion-text notion-block-3a8645c200554a10bdce70db285979d6"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://etherscan.io/">https://etherscan.io/</a></div></ol><li>测试链：</li><ol class="notion-list notion-list-numbered notion-block-a0e55d5a64904bf18b76d6a1812b6ef8"><div class="notion-text notion-block-647d16ee845c4587b5cc03f52efab227"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://ropsten.etherscan.io/">https://ropsten.etherscan.io/</a></div></ol></ol></ol><ol start="2" class="notion-list notion-list-numbered notion-block-08ced468031647a6b1fe09479758c869"><li>Remix：<b><b>Solidity语言的在线IDE</b></b></li><ol class="notion-list notion-list-numbered notion-block-08ced468031647a6b1fe09479758c869"><ul class="notion-list notion-list-disc notion-block-8f0e33c1844c4133aaf973e8325b842a"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="http://remix.ethereum.org/">http://remix.ethereum.org/</a></li></ul></ol></ol><h4 class="notion-h notion-h3 notion-block-a7efb72261a646e48ca3bcc2ea54da26" data-id="a7efb72261a646e48ca3bcc2ea54da26"><span><div id="a7efb72261a646e48ca3bcc2ea54da26" class="notion-header-anchor"></div><a class="notion-hash-link" href="#a7efb72261a646e48ca3bcc2ea54da26" title="4.使用的编程语言："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">4.使用的编程语言：</span></span></h4><div class="notion-text notion-block-a1702c9cef9b449fb2c712cce7f9464c"><a class="notion-link" href="/d33f8b95a9c74bb4817f471bbd88730a"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-title-icon notion-page-icon" role="img" aria-label="🎃">🎃</span></div><span class="notion-page-title-text">Solidity语言</span></span></a> </div></div><div class="notion-spacer"></div></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-db05f86388fd478ea7b9db78f6f96201" data-id="db05f86388fd478ea7b9db78f6f96201"><span><div id="db05f86388fd478ea7b9db78f6f96201" class="notion-header-anchor"></div><a class="notion-hash-link" href="#db05f86388fd478ea7b9db78f6f96201" title="三、智能合约基本操作演示："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">三、智能合约基本操作演示：</span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-e5ffbc0440554c1e832efaab9d45fcc5" data-id="e5ffbc0440554c1e832efaab9d45fcc5"><span><div id="e5ffbc0440554c1e832efaab9d45fcc5" class="notion-header-anchor"></div><a class="notion-hash-link" href="#e5ffbc0440554c1e832efaab9d45fcc5" title="1.在测试链上实现账户之间的交易："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.在测试链上实现账户之间的交易：</span></span></h4><details class="notion-toggle notion-block-16da43e2b2434b70aeb116305b031143"><summary>Toggle</summary><div><a class="notion-page-link notion-block-d260b3376f88458cb7fcf1c11e9d6993" href="/d260b3376f88458cb7fcf1c11e9d6993"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-title-icon notion-page-icon" role="img" aria-label="🎄">🎄</span></div><span class="notion-page-title-text">创建MetaMask账户</span></span></a><ol start="1" class="notion-list notion-list-numbered notion-block-3421e5c1beaf48809d028189337a16c3"><li>创建第一个账户，并且往钱包里面弄几个ETH(以太币)：</li><ol class="notion-list notion-list-numbered notion-block-3421e5c1beaf48809d028189337a16c3"><li>在MetaMask中选择Ropsten测试链：</li><ol class="notion-list notion-list-numbered notion-block-7798f6a2c8684507926df1f320fef514"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-8fd32963bf7546c2ae853a8b5adc764e"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:270px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fabcc97d8-3eba-41bc-be9f-23ec7ccabde6%2FUntitled.png?table=block&amp;id=8fd32963-bf75-46c2-ae85-3a8b5adc764e&amp;t=8fd32963-bf75-46c2-ae85-3a8b5adc764e" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol><li>此时测试链里只有一个账户。ETH为0，点击“购买”下滑到测试水管，选择获取Ether</li><ol class="notion-list notion-list-numbered notion-block-492c684a84a641da89eced617c932195"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2d3d9fef332e49dc9e0ca155e19c12d3"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:367px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F697858fd-0ea4-405f-a502-d25a925e7ad2%2FUntitled.png?table=block&amp;id=2d3d9fef-332e-49dc-9e0c-a155e19c12d3&amp;t=2d3d9fef-332e-49dc-9e0c-a155e19c12d3" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol><li>点击四五下“request 1 ether from faucet”以获取ETH</li><ol class="notion-list notion-list-numbered notion-block-519f4901bab845099044263abafe89d9"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-dbb8e3b0cd754b3385c14dee17c1e0d5"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F9f90612c-74e3-449e-972b-e943ad442c12%2FUntitled.png?table=block&amp;id=dbb8e3b0-cd75-4b33-85c1-4dee17c1e0d5&amp;t=dbb8e3b0-cd75-4b33-85c1-4dee17c1e0d5" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol></ol></ol><ol start="2" class="notion-list notion-list-numbered notion-block-f0ea515a0998468998b23d870bed9d0e"><li>创建一个新的账户：账户名：lual</li><ol class="notion-list notion-list-numbered notion-block-f0ea515a0998468998b23d870bed9d0e"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-623a45677e1a4bbe991fb1b541658bb0"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:328px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F1fe1fd65-6184-4997-b960-562dfb79c180%2FUntitled.png?table=block&amp;id=623a4567-7e1a-4bbe-991f-b1b541658bb0&amp;t=623a4567-7e1a-4bbe-991f-b1b541658bb0" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol></ol><ol start="3" class="notion-list notion-list-numbered notion-block-d053ba97fb7b4853a6dfebaf0d325d43"><li>实现第一笔交易：</li><ol class="notion-list notion-list-numbered notion-block-d053ba97fb7b4853a6dfebaf0d325d43"><li>复制被转账账户的地址：</li><ol class="notion-list notion-list-numbered notion-block-d4a5955891224ee1ad182ae916a8020e"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-a8ca219ffe1945f2ab41738e2a6da9ca"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:374px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F72057862-32f1-4a04-8ca9-c195c0caa02e%2FUntitled.png?table=block&amp;id=a8ca219f-fe19-45f2-ab41-738e2a6da9ca&amp;t=a8ca219f-fe19-45f2-ab41-738e2a6da9ca" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol><li>回到第一个账户，选择发送，粘贴lual的账户地址：</li><ol class="notion-list notion-list-numbered notion-block-a32d6c817ab5493c9fb72c78d80b78f1"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-ccbbc80ed0654814bd1fbbcb2be2d0af"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:431px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F16736236-ba1d-473a-a6ca-93a5c7091298%2FUntitled.png?table=block&amp;id=ccbbc80e-d065-4814-bd1f-bbcb2be2d0af&amp;t=ccbbc80e-d065-4814-bd1f-bbcb2be2d0af" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol><li>下一步之后确认就行了：</li><ol class="notion-list notion-list-numbered notion-block-2d284bc7f32a4ba7be0bad97c776ec7c"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-4b0d743905724531ab3c05ac5fc738a1"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:414px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Feb1df8d0-0fd3-4406-b06b-2dd101292ce2%2FUntitled.png?table=block&amp;id=4b0d7439-0572-4531-ab3c-05ac5fc738a1&amp;t=4b0d7439-0572-4531-ab3c-05ac5fc738a1" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol></ol></ol><div class="notion-blank notion-block-656db69e59f54fdda525db3b52a5275d"> </div></div></details><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-d1cbab8f7ba4439ab18d1eeccf52cb87" data-id="d1cbab8f7ba4439ab18d1eeccf52cb87"><span><div id="d1cbab8f7ba4439ab18d1eeccf52cb87" class="notion-header-anchor"></div><a class="notion-hash-link" href="#d1cbab8f7ba4439ab18d1eeccf52cb87" title="2.部署智能合约："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.部署智能合约：</span></span></h4><details class="notion-toggle notion-block-edeb8200c6024974aab57f7ed482f658"><summary>实验附件：</summary><div><div class="notion-file notion-block-095d1224a9bc48e3aeb969b41da3db5b"><a target="_blank" rel="noopener noreferrer" class="notion-file-link" href="https://notion.so/signed/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F551f9aba-25ea-45ab-932b-a616fd92c460%2Fbaby.sol?table=block&amp;id=095d1224-a9bc-48e3-aeb9-69b41da3db5b"><svg class="notion-file-icon" viewBox="0 0 30 30"><path d="M22,8v12c0,3.866-3.134,7-7,7s-7-3.134-7-7V8c0-2.762,2.238-5,5-5s5,2.238,5,5v12c0,1.657-1.343,3-3,3s-3-1.343-3-3V8h-2v12c0,2.762,2.238,5,5,5s5-2.238,5-5V8c0-3.866-3.134-7-7-7S6,4.134,6,8v12c0,4.971,4.029,9,9,9s9-4.029,9-9V8H22z"></path></svg><div class="notion-file-info"><div class="notion-file-title">baby.sol</div><div class="notion-file-size">0.3KB</div></div></a></div></div></details><ol start="1" class="notion-list notion-list-numbered notion-block-34dbd575bdaa4810b4753875d6b25413"><li>在Remix里将程序编译好：</li><ol class="notion-list notion-list-numbered notion-block-34dbd575bdaa4810b4753875d6b25413"><div class="notion-text notion-block-143a248fb9614033913a7d19ff68ffa0">打开Remix网站后，新建一个babysol.sol文件，将附件里的代码贴进去</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-9555828f236f4c07b95c057adc66a260"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:541px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F8554cf77-1908-4e8f-b6c0-6aec08b398f8%2FUntitled.png?table=block&amp;id=9555828f-236f-4c07-b95c-057adc66a260&amp;t=9555828f-236f-4c07-b95c-057adc66a260" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-aeb2cb5bbda74995b1e555a6d9caba9d">这里注意一下第一行代码，<code class="notion-inline-code">pragma</code>表示的是<code class="notion-inline-code">solidity</code>编译器的版本，这个代码的依赖的版本号为0.4.22到0.6.0。可以在网站的最右边选择编译器的版本，这里选择0.4.26，然后勾选Auto complile，编译器就会自动编译程序。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-39c9a48289d94bffbaeae1f028ea4e62"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:528px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F08601c0a-7db3-4966-9d00-f75c0677a28b%2FUntitled.png?table=block&amp;id=39c9a482-89d9-4bff-baea-e1f028ea4e62&amp;t=39c9a482-89d9-4bff-baea-e1f028ea4e62" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol></ol><ol start="2" class="notion-list notion-list-numbered notion-block-5c30e1cb360a468d987ea87b036822b3"><li>部署到测试链：</li><ol class="notion-list notion-list-numbered notion-block-5c30e1cb360a468d987ea87b036822b3"><div class="notion-text notion-block-827f78bf3ae84cdb9801b7d70010e30c">选择编译的下面那个图标，并在<code class="notion-inline-code">ENVIRONMENT</code>中选择“<code class="notion-inline-code">Injected Web3</code>”：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-b14804de149340a2b1b7cffa66a3b229"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:341px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fa5915cf6-bf3e-4d30-bd54-4a5d7a5c660a%2FUntitled.png?table=block&amp;id=b14804de-1493-40a2-b1b7-cffa66a3b229&amp;t=b14804de-1493-40a2-b1b7-cffa66a3b229" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-17943a181c324150825691d189d8e345">tips：JavaScript VM是在本地做测试</div><div class="notion-text notion-block-fd55b6fb4eab41f28aec61167224f8cc">这时MetaMask会弹出一个窗口，这里是想要申请相应权限：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-b0ffd1bcc47048169504c1112da0b492"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:240px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F172bfa6a-a45c-4dbd-9e20-bbfcb7924c8c%2FUntitled.png?table=block&amp;id=b0ffd1bc-c470-4816-9504-c1112da0b492&amp;t=b0ffd1bc-c470-4816-9504-c1112da0b492" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-fd2fbf8d42d44df68cb8f80814f09217">这里将所有账户全部添加进去，之后就是下一步然后连接即可。</div><div class="notion-text notion-block-adc2967e31f24a13b6e7b1b37a52a081">连接成功后会在<code class="notion-inline-code">Account</code>中看到自己的钱包地址：(这里显示的是我的devil账户钱包的地址)</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-034cbe08013343e29fce6fae2d91ee76"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:312px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F231b6c34-c431-49f4-8a72-c1f87d6acecd%2FUntitled.png?table=block&amp;id=034cbe08-0133-43e2-9fce-6fae2d91ee76&amp;t=034cbe08-0133-43e2-9fce-6fae2d91ee76" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-193483bd449d415398bc7dd0de943aff">之后选择下方的黄底按钮(Deploy)将合约推送至测试链，点完之后注意到编译器下方显示的信息，这里会有一定的等待时间：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-777131d90854469bb716762917cdb722"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fb8be9dbc-0947-46ef-bae0-748805bfafae%2FUntitled.png?table=block&amp;id=777131d9-0854-469b-b716-762917cdb722&amp;t=777131d9-0854-469b-b716-762917cdb722" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-5b2ad4506b2a4e5296bb5fa5da5b0b44">直到编译器下方出现一个对勾，就表示部署成功了：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-e64e5a92ceeb468981686be4433f3f20"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:676px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fce3dd819-47fe-4d95-8f35-d3610011fef0%2FUntitled.png?table=block&amp;id=e64e5a92-ceeb-4689-8168-6be4433f3f20&amp;t=e64e5a92-ceeb-4689-8168-6be4433f3f20" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-e82dd8ee46074423a3bf45da64cfea53">此时左边窗格也会出现和合约交互的一个接口：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2c74e602b7e34e6bb9e33618363db82b"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:295px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F1becbcda-cba1-459f-83f9-3669d1dbe6cd%2FUntitled.png?table=block&amp;id=2c74e602-b7e3-4e6b-b9e3-3618363db82b&amp;t=2c74e602-b7e3-4e6b-b9e3-3618363db82b" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol></ol><ol start="3" class="notion-list notion-list-numbered notion-block-b568ec4a6e594b23a9852f770f60db4c"><li>测试合约交互功能：</li><ol class="notion-list notion-list-numbered notion-block-b568ec4a6e594b23a9852f770f60db4c"><div class="notion-text notion-block-78d30d8d4b554fa89e9cc3d6f8a6e2fa">可以看到合约交互的接口有两个功能一个是变更合约的拥有者一个是查看当前合约的拥有者，这些功能都是之前代码写了的，这里详细分析一下代码：</div><div class="notion-text notion-block-7f2a642468b54a3d9d61c3472ea54859">也就是说我们只要在MetaMask插件里换一个账户然后选择changeowner，合约的所有者就切换了：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-5dcb90ca4a70470b9c19a9a5053119bd"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:269px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F5839ffda-3009-428e-9b33-d932957f146b%2FUntitled.png?table=block&amp;id=5dcb90ca-4a70-470b-9c19-a9a5053119bd&amp;t=5dcb90ca-4a70-470b-9c19-a9a5053119bd" alt="notion image" loading="lazy" decoding="async"/></div></figure><h3 class="notion-h notion-h2 notion-block-3a944447b1154042b67edcac927d2a06" data-id="3a944447b1154042b67edcac927d2a06"><span><div id="3a944447b1154042b67edcac927d2a06" class="notion-header-anchor"></div><a class="notion-hash-link" href="#3a944447b1154042b67edcac927d2a06" title="四、智能合约相关漏洞简介"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">四、智能合约相关漏洞简介</span></span></h3><h4 class="notion-h notion-h3 notion-block-7bf381a219814df69ac034db5571d4e3" data-id="7bf381a219814df69ac034db5571d4e3"><span><div id="7bf381a219814df69ac034db5571d4e3" class="notion-header-anchor"></div><a class="notion-hash-link" href="#7bf381a219814df69ac034db5571d4e3" title="1.DASP top 10："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.DASP top 10：</span></span></h4><div class="notion-row notion-block-7640699f8f2240b1b0eb844cb76218a4"><div class="notion-column notion-block-7653e89049ae46d9b84e929bc0d62bd8" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.5)"><ul class="notion-list notion-list-disc notion-block-4302b44a00394bfd8294165348372c5a"><li>重入</li></ul><ul class="notion-list notion-list-disc notion-block-cba1c9f32051493f937d6d956a984717"><li>访问控制</li></ul><ul class="notion-list notion-list-disc notion-block-8afbc79661804edd802508f5e08efdd7"><li>整数溢出</li></ul><ul class="notion-list notion-list-disc notion-block-fe860d42788e4e5f80de133092f587d3"><li>未检查返回值的低级别调用</li></ul><ul class="notion-list notion-list-disc notion-block-13ed774fbe5940e498d56c83ee32ddbd"><li>拒绝服务</li></ul></div><div class="notion-spacer"></div><div class="notion-column notion-block-dc69671bf27c41a8852fd14bdd326637" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.5)"><ul class="notion-list notion-list-disc notion-block-da326f480787471a93014e49f4c8ee79"><li>错误随机</li></ul><ul class="notion-list notion-list-disc notion-block-3d93c65a819f4a7882ab9c88cc394760"><li>竞争条件</li></ul><ul class="notion-list notion-list-disc notion-block-30d1a59e8fea46c6a663115b3980206b"><li>时间戳依赖</li></ul><ul class="notion-list notion-list-disc notion-block-2ad4cb23baa74eb58ec6d757c8bd39f9"><li>短地址攻击</li></ul><ul class="notion-list notion-list-disc notion-block-147437fd8404495eaa0314f30b770d89"><li>未知</li></ul></div><div class="notion-spacer"></div></div><h4 class="notion-h notion-h3 notion-block-ce68867f687643068395b0e444329cf2" data-id="ce68867f687643068395b0e444329cf2"><span><div id="ce68867f687643068395b0e444329cf2" class="notion-header-anchor"></div><a class="notion-hash-link" href="#ce68867f687643068395b0e444329cf2" title="2.各漏洞简介："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.各漏洞简介：</span></span></h4><div class="notion-text notion-block-2e8eb962088741fcb961e4097530b96e">智能合约是运行在区块链上的自动执行代码。由于它们的不可逆性和与金钱相关的特性，智能合约的安全问题受到了广泛关注。以下是一些常见的智能合约漏洞：</div><li><b>整数溢出与下溢</b>：当整数变量的值超出其允许的范围时，可能会发生溢出或下溢，导致不可预测的结果。</li><li><b>重入攻击</b>：在一个函数调用中，被调用的合约再次调用原函数，可能导致不希望的多次执行。例如，著名的DAO攻击就是重入攻击的一种。</li><li><b>短时间浮动</b>：在区块链上，时间和块高度可以被操纵。攻击者可以利用这点，通过挖矿操作来操纵合约的时间逻辑。</li><li><b>随机性问题</b>：在以太坊等区块链平台上，产生随机数是有挑战的，因为所有信息都是公开的。攻击者可能预测或操纵随机结果。</li><li><b>委托调用</b>：使用<code class="notion-inline-code">delegatecall</code>或其他低级调用可能导致合约中的状态被意外修改。</li><li><b>异常处理不当</b>：如果合约在遇到异常时没有正确处理，可能导致资金丢失或被锁定。</li><li><b>未初始化的存储指针</b>：如果合约使用了未初始化的存储指针，可能会导致存储被意外修改。</li><li><b>控制流可预测性</b>：如果攻击者可以预测或操纵合约的控制流，他们可能会利用这点执行恶意操作。</li><li><b>前端/后端不匹配</b>：智能合约的后端代码和前端应用的逻辑可能存在不匹配，导致用户资金损失。</li><li><b>权限过于宽松</b>：如果合约的权限控制设置得过于宽松，攻击者可能利用这点执行不应允许的操作。</li><li><b>固定合约逻辑</b>：由于智能合约一旦部署就无法更改，任何发现的漏洞都无法直接修复。需要有升级机制来处理此问题。</li><h4 class="notion-h notion-h3 notion-block-45b066a131b146639bd823ab683a47df" data-id="45b066a131b146639bd823ab683a47df"><span><div id="45b066a131b146639bd823ab683a47df" class="notion-header-anchor"></div><a class="notion-hash-link" href="#45b066a131b146639bd823ab683a47df" title="相关工具介绍："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">相关工具介绍：</span></span></h4><h4 class="notion-h notion-h3 notion-block-7724de8bf8cd4008ade88bc221d917d4" data-id="7724de8bf8cd4008ade88bc221d917d4"><span><div id="7724de8bf8cd4008ade88bc221d917d4" class="notion-header-anchor"></div><a class="notion-hash-link" href="#7724de8bf8cd4008ade88bc221d917d4" title="1.账户："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.账户：</span></span></h4><div class="notion-text notion-block-ec07c40080894ab79869e5f86d3541d0">Account(账户)对应的是十六进制串。MetaMask插件界面正上方的选择框为网络选择框，点击头像可以切换账户。Ethereum主网使用的代币为Ether，即以太币。</div><h4 class="notion-h notion-h3 notion-block-5177b411195f457b98c2a5565cdd5887" data-id="5177b411195f457b98c2a5565cdd5887"><span><div id="5177b411195f457b98c2a5565cdd5887" class="notion-header-anchor"></div><a class="notion-hash-link" href="#5177b411195f457b98c2a5565cdd5887" title="2.Geth："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.Geth：</span></span></h4><div class="notion-text notion-block-e833ef0e0a1c49b595268c82bf82ec9a">Geth是以太坊的 Go客户端，可以对合约进行交互、部署等操作。下载地址为：</div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-6a31fa2294434a7983b7d6e441b899ff" href="https://geth.ethereum.org/docs/getting-started/installing-geth"><div><div class="notion-bookmark-title">Installing Geth | go-ethereum</div><div class="notion-bookmark-description">Guide to installing Geth</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://geth.ethereum.org/favicon.ico?t=6a31fa22-9443-4a79-83b7-d6e441b899ff" alt="Installing Geth | go-ethereum" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://geth.ethereum.org/docs/getting-started/installing-geth</div></div></div><div class="notion-bookmark-image"><img style="object-fit:cover" src="https://geth.ethereum.org/images/metadata-gopher.png?t=6a31fa22-9443-4a79-83b7-d6e441b899ff" alt="Installing Geth | go-ethereum" loading="lazy" decoding="async"/></div></a></div><h4 class="notion-h notion-h3 notion-block-590043cf69114d779dc7a0e91967bf7d" data-id="590043cf69114d779dc7a0e91967bf7d"><span><div id="590043cf69114d779dc7a0e91967bf7d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#590043cf69114d779dc7a0e91967bf7d" title="3.安全测试工具："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3.安全测试工具：</span></span></h4><ul class="notion-list notion-list-disc notion-block-cafa9eb858674633b10834bfbdd69925"><li><code class="notion-inline-code">Solgraph</code>是一个漏洞可视化检测工具，可以根据合约的代码生成一个无向图，显示可能存在的漏洞。 下载地址为：<!-- -->。 </li><ul class="notion-list notion-list-disc notion-block-cafa9eb858674633b10834bfbdd69925"><div class="notion-text notion-block-71306048c9f442ba8df8affac806c425">Solgraph对函数的解析如图所示：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-6d19a56ece644e6797f67ee61f2ea198"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:432px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F5f9df178-2fa6-405f-ac80-f72fc895e3f8%2FUntitled.png?table=block&amp;id=6d19a56e-ce64-4e67-97f6-7ee61f2ea198&amp;t=6d19a56e-ce64-4e67-97f6-7ee61f2ea198" alt="notion image" loading="lazy" decoding="async"/></div></figure></ul></ul><ul class="notion-list notion-list-disc notion-block-5097329bc37c47e9bef2e9f039dc42b8"><li><code class="notion-inline-code">SEecurify 2.0</code>是由以太坊基金会和 ChainSecurity合作开发的合约安全扫描器。当前支持对38个漏洞的检测，下载地址为：</li></ul><ul class="notion-list notion-list-disc notion-block-6d308ffae59b4d8aab599c15d8b09707"><li><code class="notion-inline-code">Mythril</code>是一款强大的EVM字节码安全分析工具。它从字节码人手，利用多种手段，从多个方向为Ethereum、Hedera、QuorumVechain、 Roostock,Tron和其他秉容EVM（以太坊虚拟机）的区块链提供智能合约漏洞检测，下载地址为：<!-- -->。</li></ul><h4 class="notion-h notion-h3 notion-block-15f3716b536d4dce84ef483c5e872cdd" data-id="15f3716b536d4dce84ef483c5e872cdd"><span><div id="15f3716b536d4dce84ef483c5e872cdd" class="notion-header-anchor"></div><a class="notion-hash-link" href="#15f3716b536d4dce84ef483c5e872cdd" title="4.Remix："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">4.Remix：</span></span></h4><div class="notion-text notion-block-6be8a28326d847a4b8d7f4ef83e6806e">Remix是一款为以太坊智能合约量身定故的在线IDE，地址为<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://remix.ethereum.org/">https://remix.ethereum.org/</a></div><h3 class="notion-h notion-h2 notion-block-39c20f8a40d3456cb3ad35c6d16c0dcf" data-id="39c20f8a40d3456cb3ad35c6d16c0dcf"><span><div id="39c20f8a40d3456cb3ad35c6d16c0dcf" class="notion-header-anchor"></div><a class="notion-hash-link" href="#39c20f8a40d3456cb3ad35c6d16c0dcf" title="智能合约漏洞举例："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">智能合约漏洞举例：</span></span></h3><h4 class="notion-h notion-h3 notion-block-d5b8379aa7f94f9f92124eacb335ca09" data-id="d5b8379aa7f94f9f92124eacb335ca09"><span><div id="d5b8379aa7f94f9f92124eacb335ca09" class="notion-header-anchor"></div><a class="notion-hash-link" href="#d5b8379aa7f94f9f92124eacb335ca09" title="举例分析一：整数溢出漏洞"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">举例分析一：整数溢出漏洞</span></span></h4><details class="notion-toggle notion-block-d91d0d8e850a4df1b7ae5f6c37964d0f"><summary>整数溢出相关知识点补充</summary><div><ul class="notion-list notion-list-disc notion-block-48e7d9542d64435cb1544eea663a075d"><li>uint8：0~2^8-1</li></ul><ul class="notion-list notion-list-disc notion-block-078779b82fe7461f892c05dd3ca655cb"><li>uint256：0~2^256-1</li></ul><h4 class="notion-h notion-h3 notion-block-d6bb1eea843b41bab2e5f3d0eef8d257" data-id="d6bb1eea843b41bab2e5f3d0eef8d257"><span><div id="d6bb1eea843b41bab2e5f3d0eef8d257" class="notion-header-anchor"></div><a class="notion-hash-link" href="#d6bb1eea843b41bab2e5f3d0eef8d257" title="整数溢出类型："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">整数溢出类型：</span></span></h4><ul class="notion-list notion-list-disc notion-block-8bc5a2c1284c4de9b2415d284921dd08"><li>乘法溢出</li></ul><ul class="notion-list notion-list-disc notion-block-ba969c4e93b148e0917c130b1e6329df"><li>加法溢出</li></ul><ul class="notion-list notion-list-disc notion-block-779b6904790f441b825c7349d29d3d46"><li>减法溢出</li></ul><ul class="notion-list notion-list-disc notion-block-d2150ebc19ae4f2c854ea582160038b9"><li>uint8到uint256，以及int8到int256</li></ul></div></details><div class="notion-text notion-block-f73a9571f7f94e1395494b0b4be89eb4">Example 1：</div><div class="notion-text notion-block-f72e7fbea9b8489c93a6f876483ec3be"><code class="notion-inline-code">balances[msg.sender]</code>和<code class="notion-inline-code">_amout</code>都是无符号的int型本身不存在小于0的情况，这里的两个值只要不相等，判断就会成立，就可以通过第四行达到一个减法下溢。</div><div class="notion-text notion-block-f5a6efc9249743d39fab9a5e197b20a7">Example 2：</div><div class="notion-text notion-block-d8f5e62aab824cc5a34ba725defaf3da">当数组<code class="notion-inline-code">arrayOfThings</code>长度为0时，同样会造成一个减法下溢，从而导致可以以此来控制其他地方的变量。</div><div class="notion-text notion-block-c43528a374a04cddbc10d7f74f0b62de">Example 3：</div><div class="notion-text notion-block-12b7687cf000406c942c3e87d21fb1be"><code class="notion-inline-code">var</code>是一个<code class="notion-inline-code">uint8</code>类型，假设<code class="notion-inline-code">somethingLarge</code>是一个<code class="notion-inline-code">uint256</code>类型的值，那么这里的<code class="notion-inline-code">i</code>永远不会超过256.</div><div class="notion-text notion-block-b05bf78abf8b432bbdf59c12efb6e269">漏洞防止措施：</div><div class="notion-text notion-block-092862f3757d405fb210baaffd28730f">加法溢出：</div><div class="notion-text notion-block-fbe03f2aceaf430e82ccc1b94a57ed4e">减法溢出：</div><div class="notion-text notion-block-9f15d70d5d2d4388984e27ed9d9cc624">乘法溢出：</div><div class="notion-text notion-block-9bf8e64c3da744dbb6140d8916cc81dc">具体实例分析：</div><div class="notion-text notion-block-ddeaa7157fc74f2eaf8c37e88ac8f7fb">解体思路：</div><li>部署合约</li><li>查看自己账户的余额</li><li>放入1个token，取走2个token</li><li>买flag</li><div class="notion-text notion-block-a424cc932fb6412a8c8149d0df914f73">将题目部署到测试链上面后，审一下代码：</div><div class="notion-text notion-block-335322dce1fe48ceb8e5f3762de787ef">分析代码可以知道。flag需要用币买下来，但是我们要花10000000000及以上的币才能买到flag，如果一个币一个币的申请将会十分耗时，不知道要猴年马月才能买下flag。仔细观察<code class="notion-inline-code">withdraw</code>函数是存在一个整数下溢的漏洞的，变量<code class="notion-inline-code">_amount</code>和<code class="notion-inline-code">balances[msg.sender]</code>都是<code class="notion-inline-code">uint256</code>类型，所以不存在负数，就没有小于0这一说，当我们的余额小于要取出的余额就会导致最后我们的余额超级翻倍，这里可以先获得一个币，再取两个币。这样根据uint类型的一个回还，最终我们的账户就有了2^256-1个币。</div><div class="notion-text notion-block-db54514579714449a645b78e29168a9c">操作一下通过<code class="notion-inline-code">bavanceOf</code>函数查看余额：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-83c3b1a20ee24a6da7469359692a0f43"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:276px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F89f44792-c327-4a9a-a88c-90bff435472a%2FUntitled.png?table=block&amp;id=83c3b1a2-0ee2-4a6d-a746-9359692a0f43&amp;t=83c3b1a2-0ee2-4a6d-a746-9359692a0f43" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-55137d1ba65544938793952f1bb7f13c">正好是2^256-1，此时就可以购买flag了</div><h4 class="notion-h notion-h3 notion-block-a7bf5d6f1bd346a3a6c015d443160b9b" data-id="a7bf5d6f1bd346a3a6c015d443160b9b"><span><div id="a7bf5d6f1bd346a3a6c015d443160b9b" class="notion-header-anchor"></div><a class="notion-hash-link" href="#a7bf5d6f1bd346a3a6c015d443160b9b" title="举例分析二：重入漏洞"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">举例分析二：重入漏洞</span></span></h4><div class="notion-text notion-block-4147b9a4962e4effafa82528e2f37518">条件：逻辑顺序（检查、取钱、扣除余额）</div><div class="notion-text notion-block-f4e3ace261964cd69ddabb006986243a">攻击条件：多次提钱/绕过验证逻辑</div><div class="notion-text notion-block-dc18a78d81c2458b91a7f59ccde42038">For Example：</div><div class="notion-text notion-block-35e674d64eeb4e16bfbdd4f41b3ba845">注意这行代码，和之前的整数溢出里的实例不同，这里一开始就有一个if判断，保证了取的金额一定小于账户的余额。</div><div class="notion-text notion-block-1c6b478e3da74d97beacdbed25b7bdd7">这里虽然没有整数溢出，但是又引出了一个新的问题，注意第三行代码，这里做的是一个取钱的操作，取完之后再做的第四行从余额里扣掉取出的钱数。那么假设我在第一次取钱之后马上又做一次取钱操作，账户余额中的钱数是没有变的(因为在执行第三行代码的时候余额还没有被改变)。</div><div class="notion-text notion-block-7037b83cfd244bb3881725ff70a22502">这里我们简单分析一下记账的流程：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-ce38784fed324a95af176c59eb48d6d2"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:527px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F1ef66603-f882-407e-b2f2-485efd31b2bc%2FUntitled.png?table=block&amp;id=ce38784f-ed32-4a95-af17-6c59eb48d6d2&amp;t=ce38784f-ed32-4a95-af17-6c59eb48d6d2" alt="notion image" loading="lazy" decoding="async"/></div></figure><li>用户触发转账事件，提取100ETH</li><li>合约接受请求</li><li>在合约中进行判断取出的钱是否小于等于现有的余额</li><li>如果满足条件则进入转账进程，向用户发送请求</li><li>如果此时我们再次申请转账，我们余额是没有变的，这就是重入漏洞的一个大概逻辑</li><div class="notion-text notion-block-d29230c7ef0544299cc918e93d944251">所以重入漏洞是一种基于逻辑上的漏洞，这里代码的思路是先check，然后就做了取款操作，之后才更新余额。</div><div class="notion-text notion-block-91944213fa224343a8ffa1159f4bae1b">这里的修复方法是，check后先更新余额再做取款操作。</div></ol></ol></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Python逆向实战]]></title>
            <link>https://www.reveone.cn//article/9ced4f1b-7f94-430d-9e4d-748d99079a99</link>
            <guid>https://www.reveone.cn//article/9ced4f1b-7f94-430d-9e4d-748d99079a99</guid>
            <pubDate>Sat, 02 Sep 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[本文介绍了Python逆向的实战技巧。主要涉及Python字节码和编译后的.pyc文件的反编译。通常情况下，可以使用工具uncompyle6将.pyc文件直接转换成.py文件。
实例一：基本的反汇编操作]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-9ced4f1b7f94430d9e4d748d99079a99"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-e3423f518ca14faa8a870702ba367423">关于python的逆向主要是针对Python字节码和Python编译后的<code class="notion-inline-code">.pyc</code>文件进行的。在一般情况下拿到一个pyc文件可以直接使用工具uncompyle6将pyc文件直接转换成py文件。</div><div class="notion-text notion-block-4d1e164b6ced40f5bfec37969c09f8e5">关于uncompyle6的下载可以直接使用pip进行安装：</div><div class="notion-text notion-block-4b78f010180a41fab49519a955f8bbd9">使用方法也很简单：</div><div class="notion-text notion-block-975e3977f49d4826b3979e6a064c89d8">下面通过一个实例对基本的pyc反编译的操作进行介绍：</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-0f91f2b6e12d47aea8be69699e8bff79" data-id="0f91f2b6e12d47aea8be69699e8bff79"><span><div id="0f91f2b6e12d47aea8be69699e8bff79" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0f91f2b6e12d47aea8be69699e8bff79" title="实例一：基本的反汇编操作"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">实例一：基本的反汇编操作</span></span></h3><details class="notion-toggle notion-block-fe63301308024685953c2945ca7ced7f"><summary>附件</summary><div><div class="notion-file notion-block-4544572d760747b9a8a3eb7c3d86dda9"><a target="_blank" rel="noopener noreferrer" class="notion-file-link" href="https://notion.so/signed/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fb1afb251-8d05-4d4a-acec-ac8b9ddcc883%2Ffindkey.pyc?table=block&amp;id=4544572d-7607-47b9-a8a3-eb7c3d86dda9"><svg class="notion-file-icon" viewBox="0 0 30 30"><path d="M22,8v12c0,3.866-3.134,7-7,7s-7-3.134-7-7V8c0-2.762,2.238-5,5-5s5,2.238,5,5v12c0,1.657-1.343,3-3,3s-3-1.343-3-3V8h-2v12c0,2.762,2.238,5,5,5s5-2.238,5-5V8c0-3.866-3.134-7-7-7S6,4.134,6,8v12c0,4.971,4.029,9,9,9s9-4.029,9-9V8H22z"></path></svg><div class="notion-file-info"><div class="notion-file-title">findkey.pyc</div><div class="notion-file-size">2.6KB</div></div></a></div></div></details><div class="notion-text notion-block-631d4777b4a4466d8b90b6b5c9b349dd">使用命令行输入如下命令：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-5cc62dcaf8ec40838087f20a58986a43"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:549px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fc09c8cf0-a233-455f-88f5-f77b47b2bb9c%2FUntitled.png?table=block&amp;id=5cc62dca-f8ec-4083-8087-f20a58986a43&amp;t=5cc62dca-f8ec-4083-8087-f20a58986a43" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-1e4d4d5cdc05416aab02ef39b41508dd">如上图键入命令后，ubcompyle6就反编译出了一个py文件，打开这个文件查看一下反编译后的源代码：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-d5ca5fcbccc147aaaef3a16dbabd219e"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:501px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F045928d0-6cbb-477a-889a-765c4c57f95f%2FUntitled.png?table=block&amp;id=d5ca5fcb-ccc1-47aa-aef3-a16dbabd219e&amp;t=d5ca5fcb-ccc1-47aa-aef3-a16dbabd219e" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-ced6fef645414a41a31bc0f0c45c00c1">可以看到反编译的效果非常好，顺便解出这个题的flag，难度并不大。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-ab9e0bfbaca9491ebe3ecfba7e7ad1ac"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fe9057b26-ce85-4039-9274-4ecdf46987c4%2FUntitled.png?table=block&amp;id=ab9e0bfb-aca9-491e-be3e-cfba7e7ad1ac&amp;t=ab9e0bfb-aca9-491e-be3e-cfba7e7ad1ac" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-8ce8db17dc784d3e877d9d7ad0c6deef">flag为：PCTF{PyC_Cr4ck3r}</div><div class="notion-text notion-block-77cda5264cac45afb78c85adda1043ae">看到这里是不是感觉python逆向就这？别急，下面慢慢上难度。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-1b8f095c08104c71a0529e76c6ebdbf0" data-id="1b8f095c08104c71a0529e76c6ebdbf0"><span><div id="1b8f095c08104c71a0529e76c6ebdbf0" class="notion-header-anchor"></div><a class="notion-hash-link" href="#1b8f095c08104c71a0529e76c6ebdbf0" title="实例二：被打包成可执行程序的py逆向"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">实例二：被打包成可执行程序的py逆向</span></span></h3><div class="notion-text notion-block-42a07f38dada43819c9aebdb3fd3fbb1">为了在没有安装 Python 解释器的计算机上运行 Python 程序，诞生了一些工具将python文件打包成可执行程序。经过打包后的可执行程序如果直接使用ida进行分析的话是非常困难的Python本身是一种高级语言，其生成的二进制代码通常比C或C++更复杂，而且打包的程序包含了 Python 解释器和所有必要的库，这使得反编译的结果更加复杂，因为不仅需要理解python脚本中的原代码，还需要理解 Python 解释器的工作原理。所以碰到打包成exe的python程序首先是考虑提取还原出pyc文件再反汇编成py文件。</div><div class="notion-text notion-block-cae47ed221b64de7b640d11ae5ba0169">关于将Python程序打包成可执行文件的最常用工具通常是 PyInstaller、cx_Freeze、Py2exe。其中最常见的打包工具为PyInstaller。下面简单介绍一下PyInstaller的使用。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-82b55a9715164054994faa5233acfea1" data-id="82b55a9715164054994faa5233acfea1"><span><div id="82b55a9715164054994faa5233acfea1" class="notion-header-anchor"></div><a class="notion-hash-link" href="#82b55a9715164054994faa5233acfea1" title="1.PyInstaller使用："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.PyInstaller使用：</span></span></h4><div class="notion-text notion-block-a0032c2a9dd241d9a658417d7d1c6235">1.下载Pyinstaller：</div><div class="notion-text notion-block-80c72258aeee4133a22e33f9c49b591f">2.使用pyinstaller打包程序：</div><div class="notion-text notion-block-91b2a3ec8b614fee93c812fe44229940">基本命令如下：</div><table class="notion-simple-table notion-block-d5dcbfba589849adaf4b5b56176f71e0"><tbody><tr class="notion-simple-table-row notion-block-7e88883c5afe4b80bd16407dc6dd8fdf"><td class="" style="width:232px"><div class="notion-simple-table-cell">-h，--help</div></td><td class="" style="width:476px"><div class="notion-simple-table-cell">查看该模块的帮助信息</div></td></tr><tr class="notion-simple-table-row notion-block-50c5190cf4944ed38e619ed627471508"><td class="" style="width:232px"><div class="notion-simple-table-cell">-F，-onefile</div></td><td class="" style="width:476px"><div class="notion-simple-table-cell">产生单个的可执行文件</div></td></tr><tr class="notion-simple-table-row notion-block-93f0e58a45c344e5ad795146c31244e5"><td class="" style="width:232px"><div class="notion-simple-table-cell">-D，--onedir</div></td><td class="" style="width:476px"><div class="notion-simple-table-cell">产生一个目录（包含多个文件）作为可执行程序</div></td></tr><tr class="notion-simple-table-row notion-block-f44c2be1868847b78a83341503bd0ce9"><td class="" style="width:232px"><div class="notion-simple-table-cell">-a，--ascii</div></td><td class="" style="width:476px"><div class="notion-simple-table-cell">不包含 Unicode 字符集支持</div></td></tr><tr class="notion-simple-table-row notion-block-6add3da53d074a9b8f622c7244479e9c"><td class="" style="width:232px"><div class="notion-simple-table-cell">-d，--debug</div></td><td class="" style="width:476px"><div class="notion-simple-table-cell">产生 debug 版本的可执行文件</div></td></tr><tr class="notion-simple-table-row notion-block-c448c0338005476a979b1d44015600b2"><td class="" style="width:232px"><div class="notion-simple-table-cell">-w，--windowed，--noconsolc</div></td><td class="" style="width:476px"><div class="notion-simple-table-cell">指定程序运行时不显示命令行窗口（仅对 Windows 有效）</div></td></tr><tr class="notion-simple-table-row notion-block-9c63cdc6a7424fbd89e9bb00f6945e6f"><td class="" style="width:232px"><div class="notion-simple-table-cell">-c，--nowindowed，--console</div></td><td class="" style="width:476px"><div class="notion-simple-table-cell">指定使用命令行窗口运行程序（仅对 Windows 有效）</div></td></tr><tr class="notion-simple-table-row notion-block-4d3dc44d23334f62a3725346c2bad84e"><td class="" style="width:232px"><div class="notion-simple-table-cell">-o DIR，--out=DIR</div></td><td class="" style="width:476px"><div class="notion-simple-table-cell">指定 spec 文件的生成目录。如果没有指定，则默认使用当前目录来生成 spec 文件</div></td></tr><tr class="notion-simple-table-row notion-block-d8497b488fb44d08b089078833f094d2"><td class="" style="width:232px"><div class="notion-simple-table-cell">-p DIR，--path=DIR</div></td><td class="" style="width:476px"><div class="notion-simple-table-cell">设置 Python 导入模块的路径（和设置 PYTHONPATH 环境变量的作用相似）。也可使用路径分隔符（Windows 使用分号，Linux 使用冒号）来分隔多个路径</div></td></tr><tr class="notion-simple-table-row notion-block-b5d2ad14f59e4702965feb2573906c96"><td class="" style="width:232px"><div class="notion-simple-table-cell">-n NAME，--name=NAME</div></td><td class="" style="width:476px"><div class="notion-simple-table-cell">指定项目（产生的 spec）名字。如果省略该选项，那么第一个脚本的主文件名将作为 spec 的名字</div></td></tr><tr class="notion-simple-table-row notion-block-303d09c6a1d84cfebb4c07e55b2da9ff"><td class="" style="width:232px"><div class="notion-simple-table-cell">-i ICON.ico, -icon=ICON.ico</div></td><td class="" style="width:476px"><div class="notion-simple-table-cell">指定生成后程序的图标</div></td></tr></tbody></table><div class="notion-text notion-block-0c6aa57dfe5e459b89da99deef76dbd7">介绍完了工具接下来就产生了一个问题：如何判断分析的可执行程序是不是经过打包的python程序？</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-bc60d9bdbbd048c68b85d71acbbb4fad" data-id="bc60d9bdbbd048c68b85d71acbbb4fad"><span><div id="bc60d9bdbbd048c68b85d71acbbb4fad" class="notion-header-anchor"></div><a class="notion-hash-link" href="#bc60d9bdbbd048c68b85d71acbbb4fad" title="2.判断可执行程序是否是经过打包的py程序"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.判断可执行程序是否是经过打包的py程序</span></span></h4><div class="notion-text notion-block-c17b9477736d46cd82bb91f003ae78e7">首先前面有说过经过打包的程序包含了 Python 解释器和所有必要的库，程序的体积必然不小基本都是几兆大小。其二是直接看图标，在打包时如果没有指定打包后exe的图标的话，默认打包后的exe图标长下面这个样子：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-b450e621c38d456ea168dc85f9c060ec"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:303px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F9c4fba65-5826-4b5e-8d68-4dad763ac3bd%2FUntitled.png?table=block&amp;id=b450e621-c38d-456e-a168-dc85f9c060ec&amp;t=b450e621-c38d-456e-a168-dc85f9c060ec" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-0cb52151aae34cfb9ef453130aafa7f0">如果看到这个图标基本就可以确定这其实是打包后的python程序，当然如果指定了生成后的程序图标这个办法就白瞎了。</div><div class="notion-text notion-block-b6a383960eb444ff921f7c9a9c559962">最后还可以将exe丢到ida中然后shift+f12查看程序的字符串，到包的程序会有很多python相关的字符串。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-90cd417459af456aa1293bc608cc4d0d"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:671px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F0fe44167-5060-4ac4-80b8-ccacac00e974%2FUntitled.png?table=block&amp;id=90cd4174-59af-456a-a129-3bc608cc4d0d&amp;t=90cd4174-59af-456a-a129-3bc608cc4d0d" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-8d56f3e49e17408bb567a949f956ef0a">根据这三点基本就可以判断出是否是打包的python程序了。</div><div class="notion-text notion-block-fce98b0c0be344e98f74caf95950e262">下面还是通过实例来讲解打包后的exe如何逆向。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-8c137b04a07c41309ba16273ac0b67e6" data-id="8c137b04a07c41309ba16273ac0b67e6"><span><div id="8c137b04a07c41309ba16273ac0b67e6" class="notion-header-anchor"></div><a class="notion-hash-link" href="#8c137b04a07c41309ba16273ac0b67e6" title="3.相关逆向办法："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3.相关逆向办法：</span></span></h4><details class="notion-toggle notion-block-290c46ab8f9e416ebc7621840dd3b3a9"><summary>附件</summary><div><div class="notion-text notion-block-9ca9b51e4acf4613aef904816464507e">将后缀txt修改成exe</div><div class="notion-file notion-block-f1be65b59a1c44c990902ca695b360c9"><a target="_blank" rel="noopener noreferrer" class="notion-file-link" href="https://notion.so/signed/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fea741401-9c22-4fe0-af56-cfa6cd0e9cd2%2Flogin.txt?table=block&amp;id=f1be65b5-9a1c-44c9-9090-2ca695b360c9"><svg class="notion-file-icon" viewBox="0 0 30 30"><path d="M22,8v12c0,3.866-3.134,7-7,7s-7-3.134-7-7V8c0-2.762,2.238-5,5-5s5,2.238,5,5v12c0,1.657-1.343,3-3,3s-3-1.343-3-3V8h-2v12c0,2.762,2.238,5,5,5s5-2.238,5-5V8c0-3.866-3.134-7-7-7S6,4.134,6,8v12c0,4.971,4.029,9,9,9s9-4.029,9-9V8H22z"></path></svg><div class="notion-file-info"><div class="notion-file-title">login.txt</div><div class="notion-file-size">3882.7KB</div></div></a></div></div></details><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-886e8f0c95b2439e9a8a15414998058f"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:636px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F0437bd57-b993-4546-be0c-feafa4121622%2FUntitled.png?table=block&amp;id=886e8f0c-95b2-439e-9a8a-15414998058f&amp;t=886e8f0c-95b2-439e-9a8a-15414998058f" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-7adee6e0107945d284c59d91b707e711">看到实例的图标就可以确定这是由PyInstaller打包的python程序了，为了验证这个说法可以拖进ida查看其字符串可以看到确实有很多python相关的字符串：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-24a205be4c0c4829a61e2431919fa7f0"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F078cea17-e268-4204-a7b0-1c3d95752ab7%2FUntitled.png?table=block&amp;id=24a205be-4c0c-4829-a61e-2431919fa7f0&amp;t=24a205be-4c0c-4829-a61e-2431919fa7f0" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-c15fa50f0fe14e148bf8f49e83b2ac2a">下面介绍一下如何从exe中提取出pyc文件，这里需要用到的工具为pyinstxtractor，github链接为：</div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-221bcff941a0442192f09b99eac983ff" href="https://github.com/extremecoders-re/pyinstxtractor/tree/master"><div><div class="notion-bookmark-title">GitHub - extremecoders-re/pyinstxtractor: PyInstaller Extractor</div><div class="notion-bookmark-description">PyInstaller Extractor. Contribute to extremecoders-re/pyinstxtractor development by creating an account on GitHub.</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://github.com/fluidicon.png?t=221bcff9-41a0-4421-92f0-9b99eac983ff" alt="GitHub - extremecoders-re/pyinstxtractor: PyInstaller Extractor" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://github.com/extremecoders-re/pyinstxtractor/tree/master</div></div></div><div class="notion-bookmark-image"><img style="object-fit:cover" src="https://opengraph.githubassets.com/7c9cf11c0755847d5eb6550d48e617784a07f363d537c5847278ead76994858f/extremecoders-re/pyinstxtractor?t=221bcff9-41a0-4421-92f0-9b99eac983ff" alt="GitHub - extremecoders-re/pyinstxtractor: PyInstaller Extractor" loading="lazy" decoding="async"/></div></a></div><div class="notion-text notion-block-62da728a4100407294ec37959371db56">将其中的pyinstxtractor.py下载下来，键入命令：</div><div class="notion-text notion-block-629fa3a65f6d40cc82d637dbb7c22b02">运行后显示提取成功，cmd内容如下：</div><div class="notion-text notion-block-e04760408a714a88a04de8c44ea48d8a">上面的回显显示提取出来的东西放在了文件名夹加exetracted的目录下</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-f276b354639a46cc9c0095f1d874e623"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:646px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F653b2533-7b11-452d-be95-ffea2735c24f%2FUntitled.png?table=block&amp;id=f276b354-639a-46cc-9c00-95f1d874e623&amp;t=f276b354-639a-46cc-9c00-95f1d874e623" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-05c940f96f1e4ec69bf256dca29b3934">进入login.exe_extracted文件夹</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-b67b38af4d7342f1989111fde4ae0590"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:626px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Febc5389f-6f7b-46c1-8392-d5cdde6ad167%2FUntitled.png?table=block&amp;id=b67b38af-4d73-42f1-9891-11fde4ae0590&amp;t=b67b38af-4d73-42f1-9891-11fde4ae0590" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-13b84f8dd78d4c799fd8cf596e9625f8">在这个文件夹中可以看到其中一个pyc文件就是提取出来的login.pyc，得到pyc文件后继续使用uncompyle6反编译成py文件：</div><div class="notion-text notion-block-6a68486a8f834361b462467d26a02072">打开反汇编后的代码：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-9fa9156e40b64c5984c1c7666857f4c9"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F1d40568a-a465-48c2-9406-5b75243ef121%2FUntitled.png?table=block&amp;id=9fa9156e-40b6-4c59-84c1-c7666857f4c9&amp;t=9fa9156e-40b6-4c59-84c1-c7666857f4c9" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-e176ec2fdea34717b451929843f7a853">可以看到到这里代码就成功反编译出来了，这里顺便贴一下exp：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-d6aa8fd2bfcf42baa247efa3b88a5239"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F6124baa1-eb8c-486d-9e83-8cab13e131c7%2FUntitled.png?table=block&amp;id=d6aa8fd2-bfcf-42ba-a247-efa3b88a5239&amp;t=d6aa8fd2-bfcf-42ba-a247-efa3b88a5239" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-d32f00c442844b43b881393110feff8b">OK，又搞定一个下面继续加大难度。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-e9aaec9afa804a37854d0c1adf0296eb" data-id="e9aaec9afa804a37854d0c1adf0296eb"><span><div id="e9aaec9afa804a37854d0c1adf0296eb" class="notion-header-anchor"></div><a class="notion-hash-link" href="#e9aaec9afa804a37854d0c1adf0296eb" title="实例三："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">实例三：</span></span></h3><details class="notion-toggle notion-block-64e4673e3df4480faef1c7b6227cf876"><summary>附件</summary><div><div class="notion-file notion-block-7698fb926bff42b49acbe9ad143d8aab"><a target="_blank" rel="noopener noreferrer" class="notion-file-link" href="https://notion.so/signed/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fad43a617-00f5-490a-addd-01dae71002be%2FBabyMaze.pyc?table=block&amp;id=7698fb92-6bff-42b4-9acb-e9ad143d8aab"><svg class="notion-file-icon" viewBox="0 0 30 30"><path d="M22,8v12c0,3.866-3.134,7-7,7s-7-3.134-7-7V8c0-2.762,2.238-5,5-5s5,2.238,5,5v12c0,1.657-1.343,3-3,3s-3-1.343-3-3V8h-2v12c0,2.762,2.238,5,5,5s5-2.238,5-5V8c0-3.866-3.134-7-7-7S6,4.134,6,8v12c0,4.971,4.029,9,9,9s9-4.029,9-9V8H22z"></path></svg><div class="notion-file-info"><div class="notion-file-title">BabyMaze.pyc</div><div class="notion-file-size">2.9KB</div></div></a></div></div></details><div class="notion-text notion-block-975feab65401447283238009855e2e15">在前面的两个实例中我们都是使用工具将pyc直接反汇编成py，但设想一下有没有什么办法可以让uncompyle6在pyc→pc的过程中反编译失败呢？</div><div class="notion-text notion-block-d1b42efe0b09422794cfae466e6154b2">在这个实例中就会出现这个问题，使用uncompyle6先尝试对其进行反编译：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-0347dd80fe384bd6a430c08fb3eaa335"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:475px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fcde7c761-d67c-41fe-bcc7-6a6dbeb77341%2FUntitled.png?table=block&amp;id=0347dd80-fe38-4bd6-a430-c08fb3eaa335&amp;t=0347dd80-fe38-4bd6-a430-c08fb3eaa335" alt="报错信息的部分截图" loading="lazy" decoding="async"/><figcaption class="notion-asset-caption">报错信息的部分截图</figcaption></div></figure><div class="notion-text notion-block-0d640104c6744b16b3cf5cfcba5a3ff2">看到命令行的回显最后一行显示反编译失败，然后上面报出了一大堆数据。根据现有的手段到了这里基本就是束手无策了。所以我们需要get一些新知识。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-5f4c1233575941469860fb26662dcd73" data-id="5f4c1233575941469860fb26662dcd73"><span><div id="5f4c1233575941469860fb26662dcd73" class="notion-header-anchor"></div><a class="notion-hash-link" href="#5f4c1233575941469860fb26662dcd73" title="1.dis模块介绍："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.dis模块介绍：</span></span></h4><div class="notion-text notion-block-d48049dcb4574c58b1023bb01daf6a12">在原理篇中有介绍到：Python 代码先被编译为字节码后，再由Python虚拟机来执行字节码， Python的字节码是一种类似汇编指令的中间语言， 一个Python语句会对应若干字节码指令，虚拟机一条一条执行字节码指令， 从而完成程序执行。</div><div class="notion-text notion-block-88cdcfefc07b4515ae3cbb55530edfd0">而dis模块可以帮助我们查看Python代码的字节码，它是python中内置的一个模块。下面看一下关于这个模块的简单示例：</div><div class="notion-text notion-block-5f6a1df6d68f48e09564cb3e67e05465">上面这段代码首先是导入了dis模块，然后随便定义了一个函数，最后的输出dis.dis(函数名）表示输出对应函数的字节码，然后看一下输出：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-52f3ab577fb44283b3e6103b66501936"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:388px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fb7391a84-42ea-4306-8d4e-9689af2eeee0%2FUntitled.png?table=block&amp;id=52f3ab57-7fb4-4283-b3e6-103b66501936&amp;t=52f3ab57-7fb4-4283-b3e6-103b66501936" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-48956cc9bd90476bb2ba643b6d6f5929">这里我们可以手动将输出分成三列来看：</div><ul class="notion-list notion-list-disc notion-block-1334b3f37f774053a9e8e42eaba67cb8"><li>第一列表示当前字节码在源代码中的行号为第四行</li></ul><ul class="notion-list notion-list-disc notion-block-b3c10c798e384962906ed32ed1843e6c"><li>第二列是字节码的偏移量和对应的字节码，0表示当前字节码，LOAD_FAST是 Python 虚拟机要执行的操作，(LOAD_FAST表示将一个局部变量加载到栈顶)</li></ul><ul class="notion-list notion-list-disc notion-block-64cff8bbf61e4cad824c6db2317263de"><li>第三列是字节码指令的参数。这是字节码指令的操作数。第一个 <code class="notion-inline-code">LOAD_FAST</code> 指令的参数是 <code class="notion-inline-code">0</code>，表示它将第 0 个局部变量（即 <code class="notion-inline-code">a</code>）加载到栈顶。</li></ul><div class="notion-text notion-block-3ee09925109a4411a120240bb69cbeac">接着我们换个视角加深对字节码的理解，在原来的代码上加一行代码：</div><div class="notion-text notion-block-bf91df68a16045ad886ca3ff0e119887">最后这段代码将打印出 <code class="notion-inline-code">add</code> 函数的字节码指令的二进制表示形式的整数列表。每个整数对应一个字节。查看一下输出情况：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-15733ec229264dd2a7b0ed8eb0cc24e8"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:420px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fbe715023-8b85-4082-a82d-93b4e45f3bfa%2FUntitled.png?table=block&amp;id=15733ec2-2926-4dd2-a7b0-ed8eb0cc24e8&amp;t=15733ec2-2926-4dd2-a7b0-ed8eb0cc24e8" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-187e4df443494402b58da0b8246998c0">下面这个列表的[124,0]就是上面第一行的<code class="notion-inline-code">0 LOAD_FAST 0 (a)</code>，所以124也就是字节码指令(124对应的字节码为<code class="notion-inline-code">LOAD_FAST</code>)，该字节码指令所在的列表偏移为0。第二个元素0就是字节码指令的参数。上一篇写的原理分析有讲过<code class="notion-inline-code">PyCodeObject</code>对象中的<code class="notion-inline-code">co_varnames</code>保存了在当前作用域的变量，以字符串的形式保存了变量名，而现在看到的这个0其实就表示<code class="notion-inline-code">co_varnames</code>下标0处的变量。这样就相对好理解字节码相关的知识点了。最后还有一个问题就是如何得知字节码指令对应的数字是多少？</div><div class="notion-text notion-block-003c768d24244eb1a9745637364e9d2b">python源码中的<code class="notion-inline-code">opcode.h</code>定义了 Python 的字节码指令集，可以去官网直接查看定义：</div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-20f48a9e78bf4fb5a15f1911a7083887" href="https://github.com/python/cpython/blob/v3.8.10/Include/opcode.h"><div><div class="notion-bookmark-title">github.com</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-text">https://github.com/python/cpython/blob/v3.8.10/Include/opcode.h</div></div></div></a></div><details class="notion-toggle notion-block-10bc05a205e3429cb86991be714816cc"><summary>tips：版本之间关于字节码的定义会有不同，我这里给的是v3.8.10版本的定义</summary><div></div></details><div class="notion-text notion-block-c163f9315627438392cfb18777aa1ec1">了解完dis模块，我们就可以发现前面在反编译实例时出现的报错好像有点眼熟，这些返回的信息不就是字节码嘛：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-17a742fc863f4063b8404d5c98ca6843"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:475px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fcde7c761-d67c-41fe-bcc7-6a6dbeb77341%2FUntitled.png?table=block&amp;id=17a742fc-863f-4063-b840-4d5c98ca6843&amp;t=17a742fc-863f-4063-b840-4d5c98ca6843" alt="报错信息的部分截图" loading="lazy" decoding="async"/><figcaption class="notion-asset-caption">报错信息的部分截图</figcaption></div></figure><div class="notion-text notion-block-b0c8d7b142f6480388a571aedec39049">到这里起码不是完全云里雾里了，接下来介绍一下python的花指令。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-7d16345f56db49eabd383a644ef1bc9b" data-id="7d16345f56db49eabd383a644ef1bc9b"><span><div id="7d16345f56db49eabd383a644ef1bc9b" class="notion-header-anchor"></div><a class="notion-hash-link" href="#7d16345f56db49eabd383a644ef1bc9b" title="2.python的花指令："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.python的花指令：</span></span></h4><div class="notion-text notion-block-6caa5560735e4fe49b31b10fb9212706">花指令指的是插入到Python字节码中的额外、无意义或误导性的指令，用于干扰或误导反编译工具和分析者。还是用前面第例子：</div><div class="notion-text notion-block-c87aac6e05214d909f56ab111da33f88">前面有说到使用【数的字节码为：</div><div class="notion-text notion-block-9473c28aea0a4a49a53932c234e28c30">根据上面这些字节码我们尝试插入一些花指令，这里可以考虑插入一些无效的跳转和无意义的操作。在Python字节码中，一个常见的花指令是使用<code class="notion-inline-code"><b>POP_TOP</b></code>来移除栈顶项（这不会影响函数的实际行为）和<code class="notion-inline-code"><b>JUMP_FORWARD</b></code>来进行无效的跳转。</div><div class="notion-text notion-block-1c846160765b4071adf8c0b57c9b7a6c">在这里，<code class="notion-inline-code"><b>JUMP_FORWARD</b></code>指令实际上跳过了<code class="notion-inline-code"><b>POP_TOP</b></code>指令，这使得实际上没有执行。但是，当尝试反编译这段字节码时，这些额外的指令可能会导致反编译工具产生更为复杂或难以理解的代码。</div><div class="notion-text notion-block-6a9b2758937f41a8999207e4e0a87869"><b>补充知识：</b></div><blockquote class="notion-quote notion-block-f8c5d9b054e349c5b63cc56b2515a418"><div><b>POP_TOP</b>:</div><ul class="notion-list notion-list-disc notion-block-82b2664acc034bd485e63f536bf08af3"><li><b>功能</b>：从堆栈顶部移除一个项并丢弃</li></ul><div class="notion-text notion-block-f4f7e22eb5f04464a6cb547643b591d6">举个例子，考虑以下Python代码：</div><div class="notion-text notion-block-1e04690596e945a980ef4ee5f1d2123c">对应的字节码大致如下：</div><div class="notion-text notion-block-38ae80da0d794c7587b8cfa9d0535173"><b>JUMP_FORWARD</b>:</div><ul class="notion-list notion-list-disc notion-block-53cd16a55516484aaa04ba7eff6a0236"><li><b>功能</b>：向前跳过指定数量的字节码。</li></ul><div class="notion-text notion-block-9f9444621ca6447386544d14be478e39">举个例子，考虑以下Python代码：</div><div class="notion-text notion-block-439bee7962334f3786c41c8e5c6ead19">对应的字节码大致如下：</div><div class="notion-text notion-block-2dba12510cb54411924d081ec345257e">在上面的例子中，<code class="notion-inline-code">POP_JUMP_IF_FALSE</code>是根据<code class="notion-inline-code">x == 0</code>的结果进行跳转的另一个指令。如果条件为<code class="notion-inline-code">False</code>，它会跳到标签12。<code class="notion-inline-code">JUMP_FORWARD</code>指令确保，如果条件为<code class="notion-inline-code">True</code>，解释器会跳过接下来的指令并直接转到标签12。</div></blockquote><div class="notion-text notion-block-92c92fcab6834d49aaaebc2f1dc3c242">接着再看下一个花指令的例子：</div><div class="notion-text notion-block-26f1c3a9d9b944349abae0c398acfafe">正常的字节码如下：</div><div class="notion-text notion-block-a3d82d2a99a3445882492efae1a61b54">现在，我们插入一些花指令来干扰反编译：</div><div class="notion-text notion-block-f6de836b655540eda961f8c044e4ef69">假设我们在<code class="notion-inline-code"><b>COMPARE_OP</b></code>后面插入一些额外的指令，包括一个无效的<code class="notion-inline-code"><b>JUMP_FORWARD</b></code>和一个不会被执行的<code class="notion-inline-code"><b>LOAD_CONST</b></code>，如下：</div><div class="notion-text notion-block-a5e6f5e763724c19a0eb0a938b5e57cc">在这里，我们插入了一个<code class="notion-inline-code"><b>JUMP_FORWARD</b></code>指令来跳过一个<code class="notion-inline-code"><b>LOAD_CONST</b></code>指令，该指令尝试加载一个常数值<code class="notion-inline-code"><b>42</b></code>（这只是一个随便给的一个数）。</div><div class="notion-text notion-block-fa8fb3a733f849d7bbef5674dc3abce0">因为这个<code class="notion-inline-code"><b>LOAD_CONST</b></code>指令实际上被<code class="notion-inline-code"><b>JUMP_FORWARD</b></code>跳过了，所以它从未被执行。然而，对于某些反编译工具来说，这可能会造成困惑，因为它们可能会期望每个<code class="notion-inline-code"><b>LOAD_CONST</b></code>后面都有一个相关的操作（例如，一个<code class="notion-inline-code"><b>STORE_FAST</b></code>或<code class="notion-inline-code"><b>BINARY_ADD</b></code>）。当工具看到这个“悬挂”的<code class="notion-inline-code"><b>LOAD_CONST</b></code>时，它可能不知道如何正确地处理，于是就会返回报错。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-0f161b3a3ead4e8da41669244b297c26" data-id="0f161b3a3ead4e8da41669244b297c26"><span><div id="0f161b3a3ead4e8da41669244b297c26" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0f161b3a3ead4e8da41669244b297c26" title="3.实例三反编译报错原因解决："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3.实例三反编译报错原因解决：</span></span></h4><div class="notion-text notion-block-99e0c55686ba44b4be3a34fbc605b903">了解了这些知识点之后再头看实例三的报错：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-86951bd2711d4e12a19f96d346c48e16"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:507px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F7790fc30-ddea-4f40-a5df-ae59906c4ad6%2FUntitled.png?table=block&amp;id=86951bd2-711d-4e12-a19f-96d346c48e16&amp;t=86951bd2-711d-4e12-a19f-96d346c48e16" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-749c34d5549f494695f0ea40e49618aa">第一条到第三条很明显就是花指令：</div><ol start="1" class="notion-list notion-list-numbered notion-block-95293a8fff744c479512e712205f71ab"><li><code class="notion-inline-code"><b>0 JUMP_ABSOLUTE 4 &#x27;to 4&#x27;</b></code> - 这条指令跳转到标号 4 的位置。</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-0436be1c4e3f44509246c3454ad3b869"><li><code class="notion-inline-code"><b>2 JUMP_ABSOLUTE 6 &#x27;to 6&#x27;</b></code> - 如果上述跳转不执行，这条指令将跳转到标号 6 的位置。</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-5cbb984e593a44618d71dc262d15c5e8"><li><code class="notion-inline-code"><b>4 JUMP_BACK 2 &#x27;to 2&#x27;</b></code> - 这条指令跳回标号 2 的位置。</li></ol><div class="notion-text notion-block-6209bd7e3d564af693e858668dae2254">结合以上三条指令，代码会在 2 和 4 之间无限循环后面的代码就永远都不会被执行到。接下里就是将这三条指令删除掉，具体步骤如下：</div><div class="notion-text notion-block-dfcffdd749ce4bfab46094619613b6d4">上面的指令码中有贴到<code class="notion-inline-code">#define JUMP_ABSOLUTE 113</code> 113转换为十六进制为0x71，也就是说这三条指令转换为二进制就是<code class="notion-inline-code">71 04 71 06 71 02</code> ，将实例文件拖到010editor中。直接搜索二进制数据：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-9bf30429a3d44a58ac7983ae08d039bb"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F84f4bd25-9de0-405b-a3a7-af44bf113a21%2FUntitled.png?table=block&amp;id=9bf30429-a3d4-4a58-ac79-83ae08d039bb&amp;t=9bf30429-a3d4-4a58-ac79-83ae08d039bb" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3f0ce91da87c4290aff415d494722b26">然后将这段数据直接删掉。删完之后还没完，co_code中有一个<code class="notion-inline-code"><b>ob_size</b></code><b> </b>成员里面保存了co_code的长度，如果co_code的实际长度与ob_size里记录的长度不匹配的话反编译时依然会报错。接下来就是找到ob_size所在的位置将其进行修改，在python3.8版本里ob_size会以<code class="notion-inline-code"><b>s</b></code> 或 <code class="notion-inline-code"><b>t</b></code> 的类型标志开始接下来的几个字节会是一个整数，代表co_code的长度。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-d587ef385aac4a4ea7066cd0b9a6f337"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:648px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fb8781204-46c2-4dc9-8a22-9e3d843443f2%2FUntitled.png?table=block&amp;id=d587ef38-5aac-4a4e-a706-6cd0b9a6f337&amp;t=d587ef38-5aac-4a4e-a706-6cd0b9a6f337" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-a7f4594528bf45de862966400f4dfb9c">如上图在这个实例中ob_size的标志为s，后面的EE 07就是代码长度，还有不要忘记这是小端存储，所以最终的代码长度为7EE。除了这个办法还可以利用marshal模块输出co_code的长度。</div><blockquote class="notion-quote notion-block-36648419064e44498fceab83c0546cec"><div><code class="notion-inline-code"><b>marshal</b></code> 模块提供了读写 Python 的内部值到字节流的能力。该模块主要用于支持 <code class="notion-inline-code"><b>.pyc</b></code> 文件的读写。marshal常用的方法为：</div><ul class="notion-list notion-list-disc notion-block-f4bcd307ec3348078406ce15ddad33ad"><li><b>marshal.dumps(value)：</b></li><ul class="notion-list notion-list-disc notion-block-f4bcd307ec3348078406ce15ddad33ad"><div class="notion-text notion-block-c152a8a13aaa4853ae4fa3b80a3bdce8">将值序列化为一个字节字符串。</div></ul></ul><ul class="notion-list notion-list-disc notion-block-2910672749124a909e8d998a7e56e5fa"><li><b>marshal.load(file)：</b></li><ul class="notion-list notion-list-disc notion-block-2910672749124a909e8d998a7e56e5fa"><div class="notion-text notion-block-98af1a00aac04ad3bb6b5b540a934a8f">从一个已打开的文件对象中读取一个值。</div></ul></ul></blockquote><div class="notion-text notion-block-a2281e25f95240d9912a91456482cc51">我们可以利用marshal模块编写一个简单的脚本来输出实例pyc的co_code的长度：</div><div class="notion-text notion-block-bf0070ac329b47e49f8cd5daa81f21fd">简单解析一下这个脚本首先是导入marshal模块，然后加载目标实例pyc到f中，read函数实际作用是跳过前16个字节因为marshal读取的是字节码，所以要跳过前面的魔数等。之后使用marshal的load函数读取实例pyc的co_code，再对其长度以十六进制的形式输出。</div><blockquote class="notion-quote notion-block-59a540f4cb5545fa989f6289a699e451"><div>tips：为什么跳过16字节：</div><div class="notion-text notion-block-4dcd235c6ff84342a9b672fcc6a8f588">上一篇原理部分有讲过从python3.7版本后魔数部分增长到了16个字节，我们又是如何知道这个pyc文件的版本的呢，其实很简单可以利用010editor查看pyc的版本号：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-c323ce9d090642a994dd0d43c599ab43"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fc49f9824-9dd2-4846-a5ad-d3ed55d8d7f4%2FUntitled.png?table=block&amp;id=c323ce9d-0906-42a9-94dd-0d43c599ab43&amp;t=c323ce9d-0906-42a9-94dd-0d43c599ab43" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-62aa8f24dd544a98aca98b32ac747a44">版本号为3413，还是去看上一篇里面有每个版本与数字的对应关系就可以了，3413对应的版本为<em>Python 3.8b4。</em>因此知道了我们需要跳过16个字节的魔数定义。</div></blockquote><div class="notion-text notion-block-965010eda1b64e94a14678368dd14989">运行脚本后输出的长度为：7EE</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-90471e8fd02c4d45841c99a29eaea437"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fd7d2a5ee-1e1e-477a-a54a-0f1bd985c601%2FUntitled.png?table=block&amp;id=90471e8f-d02c-4d45-841c-99a29eaea437&amp;t=90471e8f-d02c-4d45-841c-99a29eaea437" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-69e18872586d4007947223d10c822466">知道了长度注意改成小端存储形式，还是再010editor直接搜：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-69318ab377cd4f9593baba49e176c8f8"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F966f5606-b1b4-407c-bfce-d04b56453224%2FUntitled.png?table=block&amp;id=69318ab3-77cd-4f95-93ba-ba49e176c8f8&amp;t=69318ab3-77cd-4f95-93ba-ba49e176c8f8" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-d333617e988844b28f97d38cde1b010f">这样也能找到co_code的长度，删完了三条花指令(6个字节)，将原长度修改为7ee-6=7e8，将修改保存后再次尝试使用uncompyle6反编译，就可以看到反汇编已经成功了。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-b99939607c814a218f5fb25bbcc68436"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Fd6df054f-3de3-4131-ae8d-86ffc8f34c2a%2FUntitled.png?table=block&amp;id=b9993960-7c81-4a21-8f5f-b25bbcc68436&amp;t=b9993960-7c81-4a21-8f5f-b25bbcc68436" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-c50f958b0b8f48ebbe9383c977447867">这个题目是一个谜宫题，关于迷宫的题目还要介绍BFS和DFS，需要介绍的东西不少，这些内容可以看后面的一篇文章，这里提供这题的解法：使用BFS算法寻找这个地图的最短路径，图中方向键为wasd，数字5为起点，数字7位终点。编写如下脚本：</div><div class="notion-text notion-block-3a8c3e27d7634764a5f1e5992e00d8c7">当然这里可以手动解密，问题也不大。</div><div class="notion-blank notion-block-76374212529f4b65bb73a3348322b1fd"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[低功耗蓝牙协议浅析]]></title>
            <link>https://www.reveone.cn//article/6cdd65bb-0c6f-476d-8031-df0f314dd992</link>
            <guid>https://www.reveone.cn//article/6cdd65bb-0c6f-476d-8031-df0f314dd992</guid>
            <pubDate>Mon, 30 Oct 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[低功耗蓝牙协议（BLE）是从蓝牙4.0开始引入的一项技术，也被称为Bluetooth Smart。与经典蓝牙相比，BLE具有低功耗的特点，并能够实现通信。它在物联网领域发挥着重要作用，为各种设备提供长时间的运行期。BLE协议架构分为多个层次，从物理层到应用层，每个层次都承担着不同的功能。BLE的连接过程主要包括广播、扫描、连接和配对等阶段。连接成功后，设备会进行加密和绑定，以确保数据的安全性。BLE协议的运行流程分为中心设备和周边设备，通过广播和连接实现设备之间的信息传输。配对阶段使用不同的方法生成短期密钥，并根据长期密钥进行数据加密和传输。绑定阶段将长期密钥存储在设备中，以供下次连接使用。]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-6cdd65bb0c6f476d8031df0f314dd992"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-52baf8de589b4e0cacf5a8078c590455" data-id="52baf8de589b4e0cacf5a8078c590455"><span><div id="52baf8de589b4e0cacf5a8078c590455" class="notion-header-anchor"></div><a class="notion-hash-link" href="#52baf8de589b4e0cacf5a8078c590455" title="BLE简介："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">BLE简介：</span></span></h3><div class="notion-text notion-block-db12b1d0b8bc4acabecb4cccdefc12af">Bluetooth Low Energy (BLE) 是从蓝牙 4.0 开始引入的技术，又被称为 Bluetooth Smart。与经典的蓝牙相比，BLE 主要的特点是能够在维持相对低的功耗的同时实现通信。BLE因为其低功耗特性成为了物联网领域的一项重要技术，为大量的设备提供了长时间的运行期。</div><div class="notion-text notion-block-3d135da1bf824fed8aacf8c184cfa028">现代智能手机中的蓝牙芯片一般被设计为“双模”（Dual-mode），这意味着它可以同时支持经典蓝牙和BLE。像蓝牙耳机这种需要连续、低延迟、稳定的、高带宽的数据传输使用的就是经典蓝牙协议，而智能手环、智能灯泡、门锁等物联网设备使用的就是低功耗蓝牙协议。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-1b3e86bf1038402ca9532d2fd8c8bf4f" data-id="1b3e86bf1038402ca9532d2fd8c8bf4f"><span><div id="1b3e86bf1038402ca9532d2fd8c8bf4f" class="notion-header-anchor"></div><a class="notion-hash-link" href="#1b3e86bf1038402ca9532d2fd8c8bf4f" title="传统蓝牙与BLE对比："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">传统蓝牙与BLE对比：</span></span></h4><table class="notion-simple-table notion-block-6b8f929cfaf548d4b2f345a8ad0d9ea9"><tbody><tr class="notion-simple-table-row notion-block-3db6219a685841dc95852742ecd0d8ff"><td class="" style="width:120px"><div class="notion-simple-table-cell">ㅤ</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">传统蓝牙</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">BLE</div></td></tr><tr class="notion-simple-table-row notion-block-b732798239b4402887d532e3182347b4"><td class="" style="width:120px"><div class="notion-simple-table-cell">信道</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">79个信道</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">40个信道(37/38/39为广播信道)</div></td></tr><tr class="notion-simple-table-row notion-block-1a6c640118ac48389946df70ab9e7351"><td class="" style="width:120px"><div class="notion-simple-table-cell">发现/连接</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">查询</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">广播</div></td></tr><tr class="notion-simple-table-row notion-block-31c8303ca8354d08a7d90d0c44561438"><td class="" style="width:120px"><div class="notion-simple-table-cell">连接延时</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">100ms</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">6ms</div></td></tr><tr class="notion-simple-table-row notion-block-eee30af35a19400a81299c3fbe0ee779"><td class="" style="width:120px"><div class="notion-simple-table-cell">最大数据率</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">1-3Mbps</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">1Mbps</div></td></tr><tr class="notion-simple-table-row notion-block-333e52a824f4423cac0a0619679d763f"><td class="" style="width:120px"><div class="notion-simple-table-cell">工作距离</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">10米</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">最远100米</div></td></tr><tr class="notion-simple-table-row notion-block-1968b48fad444bb9bea348e8f02a677c"><td class="" style="width:120px"><div class="notion-simple-table-cell">最大输出功率</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">100mW</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">10mW</div></td></tr><tr class="notion-simple-table-row notion-block-d8cba85f807e46edb3a2c0913f093a54"><td class="" style="width:120px"><div class="notion-simple-table-cell">主要应用</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">无线播放、无线控制器</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">智能家居、穿戴设备</div></td></tr></tbody></table><details class="notion-toggle notion-block-0a2112e106434db9abd9bbea20a6377c"><summary>蓝牙协议的历史版本：</summary><div><ol start="1" class="notion-list notion-list-numbered notion-block-c6b751a1c14d4d829e6a7d9e1adfa97c"><li><b>蓝牙 1.0 &amp; 1.0B</b>：</li><ol class="notion-list notion-list-numbered notion-block-c6b751a1c14d4d829e6a7d9e1adfa97c"><ul class="notion-list notion-list-disc notion-block-4711e1b3dc8a4f3ab9509a4f3da96133"><li>初始版本，但由于许多问题并没有广泛使用。</li></ul><ul class="notion-list notion-list-disc notion-block-17640697f4404d458ef78a6bc4fa5e41"><li>数据传输速率为1 Mbps。</li></ul><details class="notion-toggle notion-block-6f34746ad04c40dabbc1afa5feca32c6"><summary><b>蓝牙 1.1</b>：</summary><div><ul class="notion-list notion-list-disc notion-block-d4b93ab3057a4a7d889ae3b02a6acf4e"><li>修复了1.0中的许多错误。</li></ul><ul class="notion-list notion-list-disc notion-block-443f636277ee425cb37d43ee0db0eee5"><li>IEEE开始对蓝牙协议进行标准化，命名为802.15.1。</li></ul></div></details><details class="notion-toggle notion-block-decc12007c1047328cacfa5ab3f932cc"><summary><b>蓝牙 1.2</b>：</summary><div><ul class="notion-list notion-list-disc notion-block-295cc8ce1b1741cba34a9bf8ad444370"><li>提供了更快的连接速度和改进的音频连接。</li></ul><ul class="notion-list notion-list-disc notion-block-0004f132f4114035b57328755278b5af"><li>介绍了适应性频率跳跃（AFH）以减少干扰。</li></ul></div></details></ol></ol><ol start="2" class="notion-list notion-list-numbered notion-block-284a6924aa3a4903a5438058102ee9a5"><li><b>蓝牙 2.0 + EDR (Enhanced Data Rate)</b>：</li><ol class="notion-list notion-list-numbered notion-block-284a6924aa3a4903a5438058102ee9a5"><ul class="notion-list notion-list-disc notion-block-e7f71407e74446778607027b361efd81"><li>大幅提高了数据传输速率，最高可达3 Mbps。</li></ul><ul class="notion-list notion-list-disc notion-block-eebb55d28460457b9311f92fd246af00"><li>通过EDR，改进了数据传输的效率。</li></ul><details class="notion-toggle notion-block-6bc257d0e73c4c98b374248569ddd8e0"><summary><b>蓝牙 2.1 + EDR</b>：</summary><div><ul class="notion-list notion-list-disc notion-block-8c0ca7d93894442295db393e3b268ac4"><li>简化了配对过程，引入了安全简单配对（SSP）。</li></ul><ul class="notion-list notion-list-disc notion-block-09fd666a512b41018cc4c0646b2f819f"><li>改进了安全性。</li></ul></div></details></ol></ol><ol start="3" class="notion-list notion-list-numbered notion-block-f6a5c16afe6b4ed0ade83cb094f158fd"><li><b>蓝牙 3.0 + HS (High Speed)</b>：</li><ol class="notion-list notion-list-numbered notion-block-f6a5c16afe6b4ed0ade83cb094f158fd"><ul class="notion-list notion-list-disc notion-block-0de8c031a53a4fd59a6a663db426a6a2"><li>基于Wi-Fi的高速数据传输，最高可达24 Mbps。</li></ul><ul class="notion-list notion-list-disc notion-block-0e62e5b5bfe945e58651448fbe11e730"><li>保持了蓝牙的低功耗特性。</li></ul></ol></ol><ol start="4" class="notion-list notion-list-numbered notion-block-38fe753cd2424b59a9b63046728de8d9"><li><b>蓝牙 4.0</b>：</li><ol class="notion-list notion-list-numbered notion-block-38fe753cd2424b59a9b63046728de8d9"><ul class="notion-list notion-list-disc notion-block-0e106cfb38cf43f3bc877a3b235d9a48"><li>引入了蓝牙低功耗技术（BLE或Bluetooth Low Energy），为低功耗应用开启了新的可能性，如健康监测和智能家居设备。</li></ul><ul class="notion-list notion-list-disc notion-block-404b1a3909fa422699fdde65d64d01e1"><li>能够支持经典蓝牙和BLE设备。</li></ul><ul class="notion-list notion-list-disc notion-block-1340fa53db9e497eac4490f6c54f795f"><li>最远传输举例扩大到100米</li></ul><details class="notion-toggle notion-block-592fceaf91aa42bfa60df9d7aadb3502"><summary><b>蓝牙 4.1</b>：</summary><div><ul class="notion-list notion-list-disc notion-block-d4069cab03f14cd8baf4e2ceaf957227"><li>对4.0进行了优化，增加了设备间的协作能力。</li></ul><ul class="notion-list notion-list-disc notion-block-3ea4028f29f84a7782e8aac2074e983e"><li>改进了连接稳定性和数据传输效率。</li></ul></div></details><details class="notion-toggle notion-block-cc5dbfdfc25b41279899050372c6ad26"><summary><b>蓝牙 4.2</b>：</summary><div><ul class="notion-list notion-list-disc notion-block-9494972ac4bf4dadba674cb25ad9134c"><li>提高了数据传输速度。</li></ul><ul class="notion-list notion-list-disc notion-block-33a149b43eb44f13a44246a691cfa12e"><li>引入了互联网连接的支持。</li></ul><ul class="notion-list notion-list-disc notion-block-74fbef4e7f6b46aaa13e631ec5f863ad"><li>增加了隐私和安全特性。</li></ul></div></details></ol></ol><ol start="5" class="notion-list notion-list-numbered notion-block-5e212a6db00043de9ec4790f492a8dcc"><li><b>蓝牙 5.0</b>：</li><ol class="notion-list notion-list-numbered notion-block-5e212a6db00043de9ec4790f492a8dcc"><ul class="notion-list notion-list-disc notion-block-09600836f2714a378aec1ad16d913b71"><li>2倍的速度，4倍的范围和8倍的广播消息容量相对于蓝牙 4.2。</li></ul><ul class="notion-list notion-list-disc notion-block-0a68ae50a37e4e31b6df131ca965e606"><li>改进了对IoT设备的支持。</li></ul><details class="notion-toggle notion-block-91a044b9c17c4f689f7f18d5504ecd0a"><summary><b>蓝牙 5.1</b>：</summary><div><ul class="notion-list notion-list-disc notion-block-be42e86b75044205aea00854d8998a90"><li>提供了定向查找和定位功能。</li></ul><ul class="notion-list notion-list-disc notion-block-ebb34d87bf0c4ddab43c370cbeba70e1"><li>改进了设备连接能力和稳定性。</li></ul></div></details><details class="notion-toggle notion-block-866ece5981314b8db09ca584631a62cd"><summary><b>蓝牙 5.2</b>：</summary><div><ul class="notion-list notion-list-disc notion-block-5119e2ef06f443c0b6c668c1d2d6b09d"><li>为BLE引入了支持多音频流的功能。</li></ul><ul class="notion-list notion-list-disc notion-block-d2a55e2d597042999306a067992da15b"><li>提高了音频质量和连接稳定性。</li></ul></div></details></ol></ol></div></details><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-b6b68fab76944dc0a251ac1441e8aa1d" data-id="b6b68fab76944dc0a251ac1441e8aa1d"><span><div id="b6b68fab76944dc0a251ac1441e8aa1d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#b6b68fab76944dc0a251ac1441e8aa1d" title="蓝牙协议架构分析："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">蓝牙协议架构分析：</span></span></h3><div class="notion-text notion-block-91306cf961564bc592539a5e2c67ad13">下图就是蓝牙协议的架构，这个架构参考了OSI七层模型但又没完全OSI模型的所有层次，不过为了方便介绍，这里还是以OSI模型的框架进行介绍。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-e4d8d0ba714e4a1f95fe1ee1be72ec24"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F924babaa-032b-4ca1-8f10-fb4258808e82%2FUntitled.png?table=block&amp;id=e4d8d0ba-714e-4a1f-95fe-1ee1be72ec24&amp;t=e4d8d0ba-714e-4a1f-95fe-1ee1be72ec24" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-0bd653cb3881422589c80da7fc7aa77d">从下往上来说。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-1688aeb379c7492c8f81d3496edd5bb1" data-id="1688aeb379c7492c8f81d3496edd5bb1"><span><div id="1688aeb379c7492c8f81d3496edd5bb1" class="notion-header-anchor"></div><a class="notion-hash-link" href="#1688aeb379c7492c8f81d3496edd5bb1" title="物理层 (Radio Layer)："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>物理层 (Radio Layer)</b>：</span></span></h4><ul class="notion-list notion-list-disc notion-block-d725271d823a46afb447a883e1e8daab"><li>Radio(射频层)：将上层数据转换为信号发送出去，将接收的数据转换成信号返回给上层。</li></ul><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-6b50972ceace4ed7859b9a8a193612e3" data-id="6b50972ceace4ed7859b9a8a193612e3"><span><div id="6b50972ceace4ed7859b9a8a193612e3" class="notion-header-anchor"></div><a class="notion-hash-link" href="#6b50972ceace4ed7859b9a8a193612e3" title="基带与链路控制层 (Baseband and Link Control Layer)："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>基带与链路控制层 (Baseband and Link Control Layer)：</b></span></span></h4><ul class="notion-list notion-list-disc notion-block-f42f1207b16c4b74a7290ada0577e463"><li>Baseband(基带层)：对蓝牙通信的建立、维护和断开提供了基本机制(链路管理、数据处理和通信控制)</li><ul class="notion-list notion-list-disc notion-block-f42f1207b16c4b74a7290ada0577e463"><li>管理蓝牙设备之间的连接过程，包括扫描可用设备、广播、配对和建立连接。它还管理连接的断开。</li><li>实施蓝牙的跳频技术，使得蓝牙通信在2.4 GHz频段中能够减少干扰。在蓝牙通信过程中，设备会定期在多个频道之间跳转。</li></ul></ul><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-c308b2418e3e4bca9ccaba1a97a822c5" data-id="c308b2418e3e4bca9ccaba1a97a822c5"><span><div id="c308b2418e3e4bca9ccaba1a97a822c5" class="notion-header-anchor"></div><a class="notion-hash-link" href="#c308b2418e3e4bca9ccaba1a97a822c5" title="链路管理层 (Link Manager Protocol, LMP)："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>链路管理层 (Link Manager Protocol, LMP)：</b></span></span></h4><ul class="notion-list notion-list-disc notion-block-1ce8b32f2f1144fd802af9029f3e9503"><li>Link Manage(链路管理层)：负责建立并管理蓝牙连接。</li></ul><blockquote class="notion-quote notion-block-da46e7eef2ac4aa58df1de164c2e3992"><div>Attention：
Baseband和LM都有建立和断开链接的功能不过需要注意的是Baseband处理的是物理电路的建立和断开。它确保无线电频率上的通信信号得以传输和接收。在这一层，数据被打包成合适的帧格式，并且有一定的流量控制以确保有效传输。而LM是在逻辑层面上处理连接的建立、管理和断开。这包括初始的设备查询、配对、身份验证、加密等。LM协商连接的详细参数，例如连接间隔、超时时间、角色切换等。</div></blockquote><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-ae25ebf2542445859e861db33225cf34" data-id="ae25ebf2542445859e861db33225cf34"><span><div id="ae25ebf2542445859e861db33225cf34" class="notion-header-anchor"></div><a class="notion-hash-link" href="#ae25ebf2542445859e861db33225cf34" title="逻辑链路控制和适配协议层 (L2CAP)："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>逻辑链路控制和适配协议层 (L2CAP)</b>：</span></span></h4><ul class="notion-list notion-list-disc notion-block-cecb3c70287645d2bbea3a7b5b8eb50f"><li>L2CAP层(Logical Link Control and Adaptation Protocol)：位于Baseband和高层协议之间，由于Baseband层对数据包的大小有限制，L2CAP层能够将较大的数据包分段为更小的数据包以进行传输，并在接收端重新组合这些数据包。所以L2CAP层的主要作用就是将高层数据进行封装打包成下层跟容易接收的形式。</li></ul><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-fe9d415a5fbf49d3a690c8555a0567fc" data-id="fe9d415a5fbf49d3a690c8555a0567fc"><span><div id="fe9d415a5fbf49d3a690c8555a0567fc" class="notion-header-anchor"></div><a class="notion-hash-link" href="#fe9d415a5fbf49d3a690c8555a0567fc" title="高层协议："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">高层协议：</span></span></h4><ul class="notion-list notion-list-disc notion-block-fcf87fa1ea714d8c860c223552d1fdd7"><li>RF COMM(Radio Frequency Communication)：它是蓝牙协议栈中的一个传输协议，用于模拟串行数据通信。这意味着 RFCOMM 提供了一个虚拟的串行端口以实现无线通信。</li></ul><ul class="notion-list notion-list-disc notion-block-d249914218bb4604a17f415f0dff35e3"><li>OBEX(Object Exchange)：主要用于设备间的结构化数据对象的交换。说白了就是用来传输数据(推送，如联系人、日历事件、图片等)。</li></ul><ul class="notion-list notion-list-disc notion-block-b30277d28ae141b5afad5171cd3191d3"><li>PPP 和 BNEP：这是两个协议，PPP 是一个在直接连接的两个网络节点之间建立数据链路的协议(点对点连接)。BNEP 用于在两个蓝牙设备之间传输封装的网络数据包，可用于创建蓝牙个人局域网 (PAN)。这两个协议的上层是tcp\udp与ip协议这就比较好理解了，上层的网络数据由PPP/BNEPl来进行封装并实现点对点的传输。</li></ul><ul class="notion-list notion-list-disc notion-block-16bf4ce611be4dc4a700e6fb523d4296"><li>AT modem commands主要作用是调制解调，应用场景如下：</li><ul class="notion-list notion-list-disc notion-block-16bf4ce611be4dc4a700e6fb523d4296"><ol start="1" class="notion-list notion-list-numbered notion-block-548153b174454ace9459037de37ba74d"><li><b>Hands-Free Profile (HFP) 和 Headset Profile (HSP)</b>：这两个配置文件定义了无线耳机、汽车套件和手机之间的通信。为了实现这些功能（如拨打电话、接听电话、调整音量等），手机和无线耳机/汽车套件之间会交换 AT 命令。</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-3a2624da1a0c479eb8cbfcb14fa27b58"><li><b>通信控制</b>：通过 AT 命令，设备可以查询另一设备的状态、发起操作或配置设备。例如，检查电池电量、设置扬声器音量、拨打电话号码等。</li></ol></ul></ul><ul class="notion-list notion-list-disc notion-block-249e63b73a7146e0ab800172713aab25"><li>TCS BIN（Telephony Control Protocol Specification Binary）设计用来支持蓝牙设备之间的语音和电话服务的建立和控制。TCS BIN 主要在<b>呼叫控制、多方通话、DTMF（双音多频）</b>等几个方面发挥作用。</li></ul><ul class="notion-list notion-list-disc notion-block-1ead6efecae7401f9ca4ac90fbdbd3e5"><li>SDP(Service Discovery Protocol)：这个协议是蓝牙协议栈中的一个关键协议，设计用于在蓝牙设备之间的一个发现服务。其主要作用如下：</li><ul class="notion-list notion-list-disc notion-block-1ead6efecae7401f9ca4ac90fbdbd3e5"><ol start="1" class="notion-list notion-list-numbered notion-block-0335df04564744cbb6a2753c3af5ecc7"><li><b>服务发现</b>：当两个蓝牙设备首次配对时，SDP 用于查询和列出远程设备上可用的蓝牙服务。例如，一个手机可以查询耳机是否支持高级音频分发配置文件 (A2DP) 以进行立体声音频流。</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-998e28af3df04e5b99407485e7361797"><li><b>获取服务属性</b>：除了识别服务外，SDP 还提供关于每个服务的详细信息，如服务的版本、通道号、特定功能等。</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-c262b8a4bb5a4d219e45f20396ee1304"><li><b>动态服务发现</b>：设备可能会在其生命周期内增加或减少蓝牙服务。通过 SDP，设备可以在任何时间动态地发现其他设备当前提供的服务。</li></ol></ul></ul><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-e199b4fc42f446659fccaf05672f85a9" data-id="e199b4fc42f446659fccaf05672f85a9"><span><div id="e199b4fc42f446659fccaf05672f85a9" class="notion-header-anchor"></div><a class="notion-hash-link" href="#e199b4fc42f446659fccaf05672f85a9" title="应用程序："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">应用程序：</span></span></h4><ul class="notion-list notion-list-disc notion-block-95d7854e2be54f4d80c859e60043cafe"><li>Audio APP：音频传输，这个协议有点特殊它是直接通过Audio协议像基带层发送音频数据。</li></ul><ul class="notion-list notion-list-disc notion-block-8b80a16afd814bf182b8828b5872db21"><li>File APP：文件传输。</li></ul><ul class="notion-list notion-list-disc notion-block-a0466aa874494d3eada3b8f17032c9bb"><li>NW APP：网络数据传输。</li></ul><ul class="notion-list notion-list-disc notion-block-2429516b42944724a99ea567ba26a5e1"><li>Tel App：电话数据传输。</li></ul><ul class="notion-list notion-list-disc notion-block-3da3685f0d274386830e96c19a0d337f"><li>Mgmt App：设备管理、连接管理。</li></ul><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-432d7d7548064f448bb8769258c80a27" data-id="432d7d7548064f448bb8769258c80a27"><span><div id="432d7d7548064f448bb8769258c80a27" class="notion-header-anchor"></div><a class="notion-hash-link" href="#432d7d7548064f448bb8769258c80a27" title="BLE协议介绍："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">BLE协议介绍：</span></span></h3><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-d276a3f17b9d49b6b565a462e478f4e9"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:588px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F8ffdf4ab-4e61-4acd-a3a2-d6b34f5c2509%2FUntitled.png?table=block&amp;id=d276a3f1-7b9d-49b6-b565-a462e478f4e9&amp;t=d276a3f1-7b9d-49b6-b565-a462e478f4e9" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-98569bc6733d400ab1b6a9503a3b351a">上图是BLE协议的架构，这里的协议不多就直接从下往上的一个一个介绍</div><ul class="notion-list notion-list-disc notion-block-47b5502fc9b1446fa5035d1255a8ed76"><li>Physical Layer(PHY)：作为协议栈中的最低层，一共定义了40个信道(其中三个广播信道，37个数据传输的信道)，负责无线电信号的发送和接收。</li></ul><ul class="notion-list notion-list-disc notion-block-58b17b6bc51f4558bb565cf01d905d68"><li>Link Layer(LL)：为BLE设备之间的通信提供了基础的链路功能，当两个BLE设备决定建立持续连接时，LL负责初始化、维护和断开这些连接。也就是说LL规定了蓝牙设备是如何建立连接的。LL操作基于状态机，其中主要的状态包括就绪、广播、扫描、初始化和连接。</li></ul><ul class="notion-list notion-list-disc notion-block-cfc046e674524969a7daf8882742b6ba"><li>L2CAP：这一层在上面的蓝牙协议由说过，就是对上层的数据进行封装以便于下层进行数据传输。</li></ul><ul class="notion-list notion-list-disc notion-block-030af45e5d7c4fb7a696861f3dbc252c"><li>ATT：该协议是BLE设备用于存储和访问数据的协议。ATT定义了一种结构化的方法来组织和访问数据，这些数据以&quot;属性&quot;的形式存储。每个属性都有一个唯一的句柄、一个UUID（Universally Unique Identifier）来标识其类型、权限、值以及其他可能的元数据。在ATT中，存在两种设备角色：服务器和客户端。服务器存储属性，而客户端请求或修改这些属性。ATT定义了一系列的操作，使客户端能够与服务器交互。这些操作包括读、写、查找属性等。其中每个属性都可以设置不同的访问权限，如只读、只写或加密读写。这确保了数据的安全性和完整性。</li></ul><ul class="notion-list notion-list-disc notion-block-de18e8d4ef254e4d8dbfa05f2cd231d7"><li>GATT：该协议为ATT的访问提供了一个通用且具有结构化的的方法来组织和访问数据。</li></ul><ul class="notion-list notion-list-disc notion-block-f280d297b645400a8d24a68a17b1c7a8"><li>SM：顾名思义安全管理协议主要负责BLE设备间的配对和绑定过程，以及安全性相关的功能。其中配对是一个过程，其中两个BLE设备交换安全密钥以建立受保护的连接。绑定则是一个更长期的过程，其中密钥被持久化存储在设备中，以便将来可以重新建立安全连接，而无需再次配对。</li></ul><ul class="notion-list notion-list-disc notion-block-d53c30ca75dc4ca78540d413d6487aef"><li>GAP：该协议定义了设备之间如何发现、连接和进行安全认证。</li></ul><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-a96087e221c94f269d2668fcdbfcecc2" data-id="a96087e221c94f269d2668fcdbfcecc2"><span><div id="a96087e221c94f269d2668fcdbfcecc2" class="notion-header-anchor"></div><a class="notion-hash-link" href="#a96087e221c94f269d2668fcdbfcecc2" title="BLE协议运行流程解析："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">BLE协议运行流程解析：</span></span></h3><div class="notion-text notion-block-a5faecd9d88b48949c350b9654a90586">在BLE中设备可以分为两类：中心设备、周边设变。我们将智能手表，智能门锁这类体积较小功耗较低的设备称为周边设备。对于手机这类具有相对较强运算能力的设备称为中心设备。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-2f4958c1f5484d4691059ddf7a5371d4" data-id="2f4958c1f5484d4691059ddf7a5371d4"><span><div id="2f4958c1f5484d4691059ddf7a5371d4" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2f4958c1f5484d4691059ddf7a5371d4" title="BLE的连接过程："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">BLE的连接过程：</span></span></h4><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-1263d2a6ab5b453ba03efc73c6dd1104"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:576px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2Ffcf1f1d5-a1b1-4674-9964-81a24601c5ab%2FUntitled.png?table=block&amp;id=1263d2a6-ab5b-453b-a03e-fc73c6dd1104&amp;t=1263d2a6-ab5b-453b-a03e-fc73c6dd1104" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-57b21a6e07b248cdb5b0e1f4b998cdf0">在上面的传统蓝牙与BLR对比表中有写到BLE的连接方式是以广播的形式进行连接。周边设备在没有与中心设备连接时会持续对外进行广播，而广播的状态可以分为四种：</div><ul class="notion-list notion-list-disc notion-block-d1437b512d7d440bbd32d199d8437744"><li>ADV_IND：常见的广播状态，表示可以被连接，可以被扫描。</li></ul><ul class="notion-list notion-list-disc notion-block-2fe434db8b8b4b649381ee71bfcc1226"><li>ADV_DIRECT_IND：表示只能被特定的设备进行连接。</li></ul><ul class="notion-list notion-list-disc notion-block-3cddf4c4f63d4798b0b257e37bd8e96f"><li>ADV_NONCONN_IND：表示既不可以被连接也不可以被扫描</li></ul><ul class="notion-list notion-list-disc notion-block-e56b7b6cf708432fa2828a999558647c"><li>ADV_SCAN_IND：表示只允许被扫描，不可以连接。</li></ul><div class="notion-text notion-block-107e57442a7e4644a8947c21ba74b799">当中心设备接收到广播中周边设备的广播信号时，就会发送一个SCAN_REQ信号，中文直译就是发了一个扫描请求包，如果周边当前设备可以被扫描，并且接收到了这个扫描请求包之后，就会向扫描请求包的发送方返回一个SCAN_RSP包，这个包里面一般是含有设备的生产厂商、版本号这类设备信息。中心设备接收到这些信息后会大概判断，比如如果中心设备使用的是米家的APP，接收到周边设备返回的厂家信息发现是华为的设备可能就会忽视掉这个广播信息，而如果周边设备返回的信息显示是小米生态链中的设备就会发送一个CONNECT_REQ包，向周边设备发起连接，连接成功后，周边设备在与主设备断开连接之前不再发起广播连接其他设备。此时中心设备被称为主设备，被连接的周边设备称为从设备。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-c031a93013cf49b9b715490c6d27583a" data-id="c031a93013cf49b9b715490c6d27583a"><span><div id="c031a93013cf49b9b715490c6d27583a" class="notion-header-anchor"></div><a class="notion-hash-link" href="#c031a93013cf49b9b715490c6d27583a" title="连接成功后："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">连接成功后：</span></span></h4><div class="notion-row notion-block-50dbf6403b5041b9bd8dfa2ac02b53ad"><div class="notion-column notion-block-b3438f373993404f8321280233d63520" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.5625)"><div class="notion-text notion-block-53601a39c0014fd48b28101947480be9">在设备连接成功后，刚开始设备之间的信息传输都是以明文的方式进行传输，接下里会进入配对阶段，在配对开始的时候两个设备都会生成一个短期的密钥。这种短期的密钥(Short Term Key, STK)生成方式有四种：</div><ul class="notion-list notion-list-disc notion-block-e2a688050a454d8ca5b7546266058231"><li><b>Just Works</b>：这是最简单的配对方法，适用于没有显示屏或输入能力的设备，例如一些传感器或智能灯泡。在这种方法中，双方不需要共享任何用户输入的PIN或数字。然而，由于缺乏用户干预，这种方法对中间人攻击（MITM）是脆弱的。</li></ul><ul class="notion-list notion-list-disc notion-block-48ed96625d164ef2ba250dd6a505e596"><li><b>Passkey Entry</b>：在这种配对方法中，一个设备显示一个六位数字（Passkey），另一个设备的用户需要手动输入这个数字来确认。这提供了一定程度的防护 against MITM攻击，因为攻击者需要知道或拦截这个Passkey来进行攻击。</li></ul></div><div class="notion-spacer"></div><div class="notion-column notion-block-007c454ce0e840f58e2e7ec330c045ac" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.43750000000000006)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-9fbcf6618d1748f9b067f3c0513a72da"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:379px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F6d6fdd84-2745-48b5-8cff-6450e97b3ce2%2FUntitled.png?table=block&amp;id=9fbcf661-8d17-48f9-b067-f3c0513a72da&amp;t=9fbcf661-8d17-48f9-b067-f3c0513a72da" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div></div><ul class="notion-list notion-list-disc notion-block-fc6e7c875c664e7eafc71295d3edecc1"><li><b>Numeric Comparison</b>：适用于双方设备都有显示屏的场景。在配对过程中，两个设备都会显示一个相同的六位数字。用户需要在两个设备上确认这些数字是否匹配。如果匹配，配对过程会继续。这种方法也提供了防护 against MITM攻击的能力。</li></ul><ul class="notion-list notion-list-disc notion-block-b360b26113704118afec55ebdabda19d"><li>OOB（Out of Band）配对：在这种方法中，设备使用一个与Bluetooth通信无关的通道或方法来交换或获取密钥信息。例如，可以通过NFC（近场通信）来交换配对信息。当用户将两个设备的NFC部分贴合在一起时，这些设备可以快速交换其加密信息。</li></ul><div class="notion-text notion-block-c9bba06ff5e34058b844b6005e58fa0d">在确定好密钥后下一步进入了加密阶段，此时设备两个设备都有了相同的短期密钥，然后双方根据固定的算法生成一个长期密钥。之后两个设备就会将明文的数据通过长期密钥进行加密，加密之后再进行传输。下一步就是绑定阶段，再绑定阶段中设备会将长期密钥存储起来，下次连接时直接使用之前生成的长期密钥进行密文传输。</div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[RFID技术浅析]]></title>
            <link>https://www.reveone.cn//article/00a548e8-9c07-45fe-8410-d892ac124c00</link>
            <guid>https://www.reveone.cn//article/00a548e8-9c07-45fe-8410-d892ac124c00</guid>
            <pubDate>Thu, 23 Mar 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[RFID技术是一种通过无线电波实现非接触式信息传输的技术，被广泛应用于物联网和近场通讯等领域。本文将探讨RFID技术的基本原理、应用以及未来发展方向。]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-00a548e89c0745fe8410d892ac124c00"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-sync-block notion-block-cb32c859955f428aad1a385d1cbdca0c"><details class="notion-toggle notion-block-816002e9d85f4b29831311a08d60fbaf"><summary>相关技术论坛</summary><div><div class="notion-text notion-block-4e20550783e6492796caca9af315beab"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://s.elecfans.com/s?type=1&amp;keyword=IC%E5%8D%A1&amp;page=2">https://s.elecfans.com/s?type=1&amp;keyword=IC卡&amp;page=2</a></div></div></details><h4 class="notion-h notion-h3 notion-block-c2c2949aa7714bc7a19de079c2de5faa" data-id="c2c2949aa7714bc7a19de079c2de5faa"><span><div id="c2c2949aa7714bc7a19de079c2de5faa" class="notion-header-anchor"></div><a class="notion-hash-link" href="#c2c2949aa7714bc7a19de079c2de5faa" title="前言："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">前言：</span></span></h4><div class="notion-text notion-block-c7767ba703214108bab0eaeef9d350ca">最近刚入职，公司的电梯与门禁都需要刷工卡，觉得有点麻烦，想把工卡里的数据写到手机NFC中，所以了解了一下相关方面的知识。</div><div class="notion-text notion-block-3754e7d02d95491db5a005282c38b416">tips：手机的NFC功能对于没有加密的门禁卡来说是可以直接复制的，可以先试着打开手机NFC功能然后将卡靠近手机NFC的识别区如果能正常复制就不需要去买设备了，我的门禁卡就直接复制成功了，不过还是想研究一下，就买了设备(设备买的是PM3)</div><h2 class="notion-h notion-h1 notion-block-28b908b8f59e4ee18feab18102ed33aa" data-id="28b908b8f59e4ee18feab18102ed33aa"><span><div id="28b908b8f59e4ee18feab18102ed33aa" class="notion-header-anchor"></div><a class="notion-hash-link" href="#28b908b8f59e4ee18feab18102ed33aa" title="RFID技术浅析："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">RFID技术浅析：</span></span></h2><div class="notion-text notion-block-2fb70a7dd0e04d2cb5f6169f60ed88b7">RFID全称为Radio Frequency Identification，即射频识别技术。RFID技术是一种无线通信技术，通过电磁场自动识别并读取相关数据，无需人工干预。现在市面上的门禁卡使用的就是这种技术。</div><h4 class="notion-h notion-h3 notion-block-81433deb22da4358a7f634da1fbe4de7" data-id="81433deb22da4358a7f634da1fbe4de7"><span><div id="81433deb22da4358a7f634da1fbe4de7" class="notion-header-anchor"></div><a class="notion-hash-link" href="#81433deb22da4358a7f634da1fbe4de7" title="RFID系统的组成："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">RFID系统的组成：</span></span></h4><div class="notion-text notion-block-3d735a9c968e4fbfb58d7a1426deef8f">RFID系统由控制系统阅读器和电子标签组成：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-a15216a5d1cd43b6abfa9929974b336a"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fcdd0adfd-0800-47d1-9ec5-bb8584222043%2FUntitled.png?table=block&amp;id=a15216a5-d1cd-43b6-abfa-9929974b336a&amp;t=a15216a5-d1cd-43b6-abfa-9929974b336a" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-72e8428b30934bd5ab49603fffca8917">控制系统负责处理数据，阅读器利用天线发出射频信号与电子标签进行交互。电子标签由耦合元件及芯片组成，每个标签都有唯一的电子编码当电子标签进入由阅读器产生的无限电射频信号区域时获得能量，然后向阅读器发送储存的信息及数据，有时也被称为射频卡。</div><div class="notion-row notion-block-538f486d8a46477f96474cca32adcb9a"><div class="notion-column notion-block-68a9f7699dd14ba28b57225c3a3d20e7" style="width:calc((100% - (3 * min(32px, 4vw))) * 0.5)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-5b5eb6aef81f479a819acb5dd15f7c58"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:298px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F944b96e2-a24b-47d5-a680-e282c70b4b2f%2FUntitled.png?table=block&amp;id=5b5eb6ae-f81f-479a-819a-cb5dd15f7c58&amp;t=5b5eb6ae-f81f-479a-819a-cb5dd15f7c58" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div><div class="notion-column notion-block-dbc75e7183fb4436907edeb657062bf1" style="width:calc((100% - (3 * min(32px, 4vw))) * 0.5)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-d17a5d5bfa5d469180adc1ff6cf310dc"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:304px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fe733d0b5-1656-4755-bd81-393ec4979c82%2FUntitled.png?table=block&amp;id=d17a5d5b-fa5d-4691-80ad-c1ff6cf310dc&amp;t=d17a5d5b-fa5d-4691-80ad-c1ff6cf310dc" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div><div class="notion-column notion-block-bd4d528c853f41ce9d1e039cf7dca96a" style="width:calc((100% - (3 * min(32px, 4vw))) * 0.5)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-60bed48aeae34c42b0fe3a5a3f8dc099"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:288px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fe0f86037-74b7-43d1-903f-440558798168%2FUntitled.png?table=block&amp;id=60bed48a-eae3-4c42-b0fe-3a5a3f8dc099&amp;t=60bed48a-eae3-4c42-b0fe-3a5a3f8dc099" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div><div class="notion-column notion-block-50e38bc940f34b488f0230197392dfa9" style="width:calc((100% - (3 * min(32px, 4vw))) * 0.5)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-c2f31ed4b4f0419698cedb2521ba998f"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:278px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Ff1ca510f-ce0b-4866-9b86-c3e3da7c9ffb%2FUntitled.png?table=block&amp;id=c2f31ed4-b4f0-4196-98ce-db2521ba998f&amp;t=c2f31ed4-b4f0-4196-98ce-db2521ba998f" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div></div><h4 class="notion-h notion-h3 notion-block-9281169211254b709e3d1f4d163c3c5a" data-id="9281169211254b709e3d1f4d163c3c5a"><span><div id="9281169211254b709e3d1f4d163c3c5a" class="notion-header-anchor"></div><a class="notion-hash-link" href="#9281169211254b709e3d1f4d163c3c5a" title="电子标签："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">电子标签：</span></span></h4><div class="notion-text notion-block-52f3c9fe34114659a586a7b15c9f7066">这里详细介绍一下电子标签，按照电子标签内有无内置电源可以将标签分为三种：</div><ul class="notion-list notion-list-disc notion-block-e08514711d1546f98395de06d96d4a43"><li>有源电子标签：特点距离远，应用场景：ETC、智能停车场等。</li></ul><ul class="notion-list notion-list-disc notion-block-594f06efaeba4dfca5496345db519738"><li>半有源电子标签：一般应用于区域管理，电子标签处于区域范围内时才会被激活，它弥补了无缘电子标签传输距离近的缺点，可以在几十米的区域进行数据传输。应用场景：工厂的流水线上跟踪物体等。</li></ul><ul class="notion-list notion-list-disc notion-block-510f4c33bb2b409bb24fa2a3ebc3a6ca"><li>无缘电子标签：其本身没有电源，所以只能靠近阅读器才能获得能量以此来进行数据传输，这也就代表着无缘电子标签的传输距离是很近的。应用场景：门禁卡、饭卡、公交IC卡等。</li></ul><div class="notion-text notion-block-9d40638268e24b66b4e804e215606500">电子标签的工作频率：(低频、中频、高频)</div><ul class="notion-list notion-list-disc notion-block-8e4de7cc5ef84f72a1f1fd6ba4e73bbf"><li>低频段可选范围：30kHz~300kHz，常用频段125kHz、135kHz</li></ul><ul class="notion-list notion-list-disc notion-block-4704511a72174b988b8155b036ae7d2d"><li>中高频段可选范围：3MHz~30MHz，常用频段13.56MHz</li></ul><ul class="notion-list notion-list-disc notion-block-82c194f21ce94181afec79ab11f0e2f5"><li>超高频段可选范围：3MHz~30MHz</li></ul><ul class="notion-list notion-list-disc notion-block-1c5973d3a8e145f6af14a72091fdc63a"><li>微波范围：3GHz以上</li></ul><div class="notion-text notion-block-705a59259cde4333a173b9fddd6dbd37">我们日常碰到一卡通、门禁卡、电梯卡以及银行卡属于高频或低频卡。而市场上主流生产公司主要是恩智普(NXP)公司所生产。</div><h4 class="notion-h notion-h3 notion-block-d75550c1ae7d474098b2c2ea1b16c802" data-id="d75550c1ae7d474098b2c2ea1b16c802"><span><div id="d75550c1ae7d474098b2c2ea1b16c802" class="notion-header-anchor"></div><a class="notion-hash-link" href="#d75550c1ae7d474098b2c2ea1b16c802" title="低频卡："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">低频卡：</span></span></h4><div class="notion-text notion-block-e708a187c86f45608cbe160f31749321">平时说的ID卡就是低频卡</div><ul class="notion-list notion-list-disc notion-block-7c03bf1bd07942cf953df0ee64718973"><li>EM4100：工作频率125kHz，卡内只存储卡号且无法修改成本低广泛用于门禁、身份识别，安防医疗系统</li></ul><ul class="notion-list notion-list-disc notion-block-8614b7d6386d46329d0ed4dea73d49fe"><li>HID ProxCard II：与M4系列卡片类似只存储卡号，名片大小，厚度较厚 </li></ul><ul class="notion-list notion-list-disc notion-block-1ef89bb0e7324a1caf074455a89151fa"><li>T5577卡：可写入数据可设置密码的低频卡，可用于复制ID和HID卡，共有8个块，共可存储256b数据。它复制ID卡那它就是ID卡复制HID卡那它就是HID卡。</li></ul><div class="notion-text notion-block-3d6cec5ff7054d209e29ca95f32dbc8d">For Example：</div><div class="notion-text notion-block-9a6b66fa3e6e4778962e583ffe340ad5">EM4100的存储数据规则如下：</div><div class="notion-row notion-block-92cee0ee18fa4d0c8755f8274e36843f"><div class="notion-column notion-block-9cd28c36bca9438fa843beaf6cd90b48" style="width:calc((100% - (1 * min(32px, 4vw))) * 1)"><ul class="notion-list notion-list-disc notion-block-d265616d903a463ca52f0bbcee7d6fe3"><li>首行是9个1</li></ul><ul class="notion-list notion-list-disc notion-block-1c1215be5a4f47bb907fe29599a5acba"><li>此外每行前4位是ID号 </li></ul><ul class="notion-list notion-list-disc notion-block-c71f7e00261e4ee1a25cd4f26ce18b42"><li>P0-P9为每行前四位的偶校验 </li></ul><ul class="notion-list notion-list-disc notion-block-9fecaede7832403f8c378ac78f630212"><li>PCO~PC3为每列的偶校验 </li></ul><ul class="notion-list notion-list-disc notion-block-16cdef6a9fdf42d4bf252ca91d20ef05"><li>S0为停止位0</li></ul><div class="notion-blank notion-block-aa31012dad784bada2af2d2e69256c45"> </div></div><div class="notion-spacer"></div><div class="notion-column notion-block-cdf55de057b246e99b5f8bfac9ab16c8" style="width:calc((100% - (1 * min(32px, 4vw))) * 1)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-29bad623ecfb4243851f5c01322ceaa2"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:679px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fa15a43dc-c880-4c99-b70d-10791c56c9b0%2FUntitled.png?table=block&amp;id=29bad623-ecfb-4243-851f-5c01322ceaa2&amp;t=29bad623-ecfb-4243-851f-5c01322ceaa2" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div></div><div class="notion-text notion-block-b3c0d507c5f34653bb31468e1a87e1ac">T5577结构的数据存储规则为：</div><div class="notion-text notion-block-c7d5095f7a714fd9a3f8ab6fa2be01b6">共有8个块每个块存32b数据</div><div class="notion-text notion-block-011bf2f822d747378f05dd0aff32fa5f">第0块表示调制方式和卡片类型，该块不能被随意修改，一旦写入错误可能会造成卡内数据无法读取</div><div class="notion-text notion-block-a1a5bfde961c4653864f53e85b39dc3e">第7块表示加密的密码，无密则表示普通数据</div><div class="notion-row notion-block-5893d348fbea485b8f2a6e5f53f51140"><div class="notion-column notion-block-a874a720d8484d30b12b26da2bb7d5d7" style="width:calc((100% - (1 * min(32px, 4vw))) * 1)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-34cbe067185c4282a43a9dedde66ef51"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:397px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fe1bb63f8-2679-4833-adf8-4c0827713095%2FUntitled.png?table=block&amp;id=34cbe067-185c-4282-a43a-9dedde66ef51&amp;t=34cbe067-185c-4282-a43a-9dedde66ef51" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div><div class="notion-column notion-block-9a4efcad0f1c4d8b886c35f0b2aad23a" style="width:calc((100% - (1 * min(32px, 4vw))) * 1)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-c68f16ba28224696a587d1dc8fee732b"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:393px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F11352a18-f1cc-4a33-83e8-9571cb6695f4%2FUntitled.png?table=block&amp;id=c68f16ba-2822-4696-a587-d1dc8fee732b&amp;t=c68f16ba-2822-4696-a587-d1dc8fee732b" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-98699c2f390e4383b94d68c42f220c9a"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:336px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F35b4ad93-bf55-49c4-8a2a-00a45e8d9c86%2FUntitled.png?table=block&amp;id=98699c2f-390e-4383-b94d-68c42f220c9a&amp;t=98699c2f-390e-4383-b94d-68c42f220c9a" alt="notion image" loading="lazy" decoding="async"/></div></figure><h4 class="notion-h notion-h3 notion-block-ec4c8bd8e6434d8f8987ee0272439d1f" data-id="ec4c8bd8e6434d8f8987ee0272439d1f"><span><div id="ec4c8bd8e6434d8f8987ee0272439d1f" class="notion-header-anchor"></div><a class="notion-hash-link" href="#ec4c8bd8e6434d8f8987ee0272439d1f" title="高频卡："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">高频卡：</span></span></h4><div class="notion-text notion-block-60d9402edccf423fbdcf6d2ae51fc812">高频卡就是平时常说的IC卡</div><div class="notion-text notion-block-2bb93f6e45e54603a324a97689a23d8e">NXP的Mifare方案有一下三种：(M1、S70、DESFire/JCOP)</div><ul class="notion-list notion-list-disc notion-block-4ebb70dfb9a94eb78df44b76b2073c97"><li>NXP Mifare S50(M1)：高频13.56Mz是最常见的射频卡。每张卡独一无二 UID号，可存储、修改16扇区(1K字节)的数据(一卡通，门禁，电梯卡)。 </li></ul><ul class="notion-list notion-list-disc notion-block-c3334bc974184c7790553b59ab7a54ff"><li>NXP Mifare S70：和M1差不多只是可修改的数据区域变大了 ，可容纳4KB数据，S50的卡类型(ATQA)是0004H，S70的卡类型(ATQA)是0002H。 </li></ul><ul class="notion-list notion-list-disc notion-block-3c74938d83114777927ee9129dde8deb"><li>NXP DESFire/JCOP：基于微处理器的芯片卡广泛应用如银行与金融，移动通信等领域。支持接触式、非接触式读写， JCOP版本内含操作系统，并提供40一80K字节EEPROM存储器。</li></ul><div class="notion-text notion-block-9474e77d2e7040b2b9a7d70b6d214962">For Example：以NXP Mifare S50(M1)卡为例：</div><ul class="notion-list notion-list-disc notion-block-066dd64e876c41b9926c67f2b0273298"><li>M1卡有16个扇区(Sectors),每个扇区都有独立的密钥。一个扇区有4个块(Block)每个块可以保存16字节的内容，共可以存储1kB数据。</li></ul><ul class="notion-list notion-list-disc notion-block-5a2eb34899f546a4b754e27a02f08d2e"><li>其中0扇区0块是特殊的数据块，用于存放制造商代码固化不可修改。
扇区的第4块用来保存密钥和控制字。</li></ul><div class="notion-row notion-block-ba3e607e572e45a88db5f6a72102e242"><div class="notion-column notion-block-3435eb49319b4be7b17af32964cea2c4" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.5)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-954cc276247b49bbb00896e32ba31078"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F8ac84af0-b2e3-498d-a88b-cc83aebfb5d5%2FUntitled.png?table=block&amp;id=954cc276-247b-49bb-b008-96e32ba31078&amp;t=954cc276-247b-49bb-b008-96e32ba31078" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-0210be7ad1a743398a4a799a2d9d5064">扩展：基于M1卡还有一下几种变种卡，多用于复制M1卡：</div><ul class="notion-list notion-list-disc notion-block-c94bcd682d9d4423bd964cd0069a0f4e"><li>UID卡是国人针对M1S50卡特制的变种卡，使用方式和M1完全一样，可用后门指令可对全卡任何数据编辑（包括UID号码），不需密钥即可读写数据，响应后门指令，可被读卡器鉴别发现。 </li></ul><ul class="notion-list notion-list-disc notion-block-540294d974d241339bfbe7caa7939638"><li>FUID卡是UID卡的优化版本，0扇区0块数据只可修改一次不响应后门指令，不可被读卡器鉴别。 </li></ul></div><div class="notion-spacer"></div><div class="notion-column notion-block-35dfe2ead0054180a0f5b9e6fd19e83b" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.5)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-ab87078a00314484878ed2a7ed30c7de"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:502px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F8bd13354-e010-4d90-8cc7-156b0e01607c%2FUntitled.png?table=block&amp;id=ab87078a-0031-4484-878e-d2a7ed30c7de&amp;t=ab87078a-0031-4484-878e-d2a7ed30c7de" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div></div><ul class="notion-list notion-list-disc notion-block-20faf12ea7d940b19c3a5686a957356f"><li>CUID卡是针对UID卡的进一步优化可对全卡任何数据编辑不响应后门指令，如果数据写入错误可能无法恢复。</li></ul><div class="notion-blank notion-block-cdee64dcf5b643409d4382442fe56e93"> </div><h3 class="notion-h notion-h2 notion-block-6ceebec9355e48e886ef7c794d6d6acd" data-id="6ceebec9355e48e886ef7c794d6d6acd"><span><div id="6ceebec9355e48e886ef7c794d6d6acd" class="notion-header-anchor"></div><a class="notion-hash-link" href="#6ceebec9355e48e886ef7c794d6d6acd" title="实操一：简单的IC卡复制"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">实操一：简单的IC卡复制</span></span></h3><details class="notion-toggle notion-block-36374418be924d5a934ef36d066098ef"><summary>设备信息</summary><div><ul class="notion-list notion-list-disc notion-block-864e151e329e4dd897d9a27ae86bc641"><li>淘宝买的：PM3  Pro(nfc模拟读写器)</li></ul><ul class="notion-list notion-list-disc notion-block-ea84521419a34d8ab0bb66012b17ca3a"><li>买设备时卖家送的复制卡</li></ul><ul class="notion-list notion-list-disc notion-block-ac43d84d745244cc9422860cf0ac39f3"><li>需要复制的门禁卡</li></ul></div></details><h4 class="notion-h notion-h3 notion-block-e57a45217b6849fb845a4bcae02c0b25" data-id="e57a45217b6849fb845a4bcae02c0b25"><span><div id="e57a45217b6849fb845a4bcae02c0b25" class="notion-header-anchor"></div><a class="notion-hash-link" href="#e57a45217b6849fb845a4bcae02c0b25" title="操作步骤："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">操作步骤：</span></span></h4><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-75dfb88a14f24cae90de702758e20de0"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F3f2e9ee4-48a4-499b-86c4-395a182af0e0%2FUntitled.png?table=block&amp;id=75dfb88a-14f2-4cae-90de-702758e20de0&amp;t=75dfb88a-14f2-4cae-90de-702758e20de0" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-c6c5a04709dd464d837c42c2ca79fc70">首先我这张门禁卡为IC卡也就是高频卡，在PM3上有两个读卡区域，上半区域为IC卡的读卡区域，下半区域为ID卡的读卡区域，打开PM3自带的程序，选择高频卡选项卡：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-5339e8f92fb94f39ada1cc7f405e8302"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fc0b9c029-a48b-4344-9383-d618a1e5db8d%2FUntitled.png?table=block&amp;id=5339e8f9-2fb9-4f39-ada1-cc7f405e8302&amp;t=5339e8f9-2fb9-4f39-ada1-cc7f405e8302" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-5f1edf8e3bc84cc5883d30bc27b6f6a9">然后将门禁卡放入上半区域，这时会听到一声嗡鸣声，接着选择软件中的开始解码：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-d5b85a66c4454151993341ca64cdc278"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F3d94b89b-cee3-4db6-9b52-acaf6f28fe76%2FUntitled.png?table=block&amp;id=d5b85a66-c445-4151-9933-41ca64cdc278&amp;t=d5b85a66-c445-4151-9933-41ca64cdc278" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-b2f96a9a99e84d9c9da6c08d9d695f05">稍等片刻后，听到PM3发出连续的两声嗡鸣，软件上面就会显示解码成功：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-643ba88448fc4be99ce758ccf41a2771"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:332px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F7f0a2900-b0e7-4dd3-bb8d-fe342db6d22e%2FUntitled.png?table=block&amp;id=643ba884-48fc-4be9-9ce7-58ccf41a2771&amp;t=643ba884-48fc-4be9-9ce7-58ccf41a2771" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-53410547fd5d483b8720c817f91398de">这时将待写入的IC卡放入读卡区域点击一键写卡即可实现IC卡的复制操作。</div><div class="notion-text notion-block-2fed54596da64df5ae16cc14edf01e17">tips:这篇博客暂时到这结束，我对这方面的研究并不深刻，之后拥有更深刻的理解再更。</div></div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[程序常见加密算法分析]]></title>
            <link>https://www.reveone.cn//article/6eeeff5c-1e07-4e9d-9072-d06dba143dc8</link>
            <guid>https://www.reveone.cn//article/6eeeff5c-1e07-4e9d-9072-d06dba143dc8</guid>
            <pubDate>Mon, 20 Feb 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[这篇博客介绍了常见加密算法的原理和逆向方法，包括分组加密、流密码、非对称加密和单向散列算法。介绍了密码学的基础知识，并分析了各个算法的特点和工作模式。此外，还给出了DES、AES和TEA加密的原理分析和逆向特征，以及一些逆向实例。]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-6eeeff5c1e074e9d9072d06dba143dc8"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-a1fec0137fd149e683d589cbe964fe7f">应用程序中有许多数据需要加密，例如数据传输过程中的数据加密、密码的存储和验证、序列号的验证。而在密码学中已有许多成熟的加密算法，在逆向程序时，如果对加密算法有了解，就可以更快地编写出注册机。</div><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-f473535415a1489cbf3d012132d3effd" data-id="f473535415a1489cbf3d012132d3effd"><span><div id="f473535415a1489cbf3d012132d3effd" class="notion-header-anchor"></div><a class="notion-hash-link" href="#f473535415a1489cbf3d012132d3effd" title="密码学相关知识："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">密码学相关知识：</span></span></h4><div class="notion-text notion-block-b05751402c594f48a4bb809fa392d078">在对各个算法进行分析前，首先大致介绍一下密码学的基础知识：</div><div class="notion-text notion-block-8b7dc611e8bf44bd854328ecc7228b67">加密算法可以分为三类：对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption)以及单项散列算法(Single-item Hash Algorithm).</div><div class="notion-text notion-block-bf4a351fa3a140d3a8d2ff9199a31587">对称加密即使用一个密钥来加密和解密信息，发送方和接收方使用相同的密钥，所以安全性取决于密钥的安全性，DES、3DES、AES、RC4、IDEA等均属于对称加密算法。</div><div class="notion-text notion-block-e25a4c1eec8f4049b1d01edcef3bceed">非对称加密也称为公钥加密，它使用一对公钥和私钥，每个用户有一对公钥和私钥，公钥加密的内容只有私钥才能解开，RSA、DSA、ECC等均属于非对称加密算法。</div><div class="notion-text notion-block-2730fdfd13524253aab4cee326d89273">最后单项散列算法是将任意长度的消息压缩为固定长度的摘要，常见的有MD5、SHA-1、SHA-2、SHA-256等，它们只能用于加密，不能用于解密。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-bfcf928f443b43da865f8ef8d7d9ea29"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffe50af0c-8131-4f10-be0f-6fde1e5f1c72%2F522e0555-07c1-4a20-a923-54d1e07241a7%2FUntitled.png?table=block&amp;id=bfcf928f-443b-43da-865f-8ef8d7d9ea29&amp;t=bfcf928f-443b-43da-865f-8ef8d7d9ea29" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-6ff11f35019c4325b7d8bc1393136798">上图是平常刷题和比赛常见的一些加密算法分类，一些古典密码的实现原理在此不过多赘述，下面主要分析分组加密、流密码、非对称加密、单向散列算法的密码学原理和逆向方法。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-b7bd5ef126374b6cb3d5b67bcd1ac6aa" data-id="b7bd5ef126374b6cb3d5b67bcd1ac6aa"><span><div id="b7bd5ef126374b6cb3d5b67bcd1ac6aa" class="notion-header-anchor"></div><a class="notion-hash-link" href="#b7bd5ef126374b6cb3d5b67bcd1ac6aa" title="一、分组密码："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">一、分组密码：</span></span></h3><div class="notion-text notion-block-04234cbeb6ce4534a428894852643b23">也叫块加密(block cyphers)，一次加密明文中的一个块。是将明文按一定的位长分组，明文组经过加密运算得到密文组，密文组经过解密运算（加密运算的逆运算），还原成明文组。</div><div class="notion-text notion-block-e36bf57ced8c4548b66dbe900fc39485">分组密码通常由四个部分组成：加密模式、密钥、初始向量和填充算法。这些组件共同确定加密数据块的方式。加密模式确定了加密的模式，密钥用于控制加密的强度，初始向量用于避免重复的模式，而填充算法用于确保最后输出的数据大小与输入的数据大小一致。</div><div class="notion-text notion-block-f264688dc94d41b3b3a2ebe2267b3860">分组密码的工作模式主要有：分组加密模式（ECB模式）、电子代码本模式（CBC模式）、计数器模式（CTR模式）和输出反馈模式（OFB模式）。其中ECB模式是最常用的模式，它简单易用，但是存在着明文攻击的风险。CBC模式和CTR模式则可以有效防止明文攻击，但是比ECB模式费时费力。OFB模式则是用到了流密码的思想，它可以有效防止密码泄露。</div><div><div></div><div class="notion-collection-header"><div class="notion-collection-header-title">分组加密工作模式简介</div></div></div><div class="notion-collection notion-block-8f5c7659636a4f709886c3ca59628fa0"><div class="notion-list-collection"><div class="notion-list-view"><div class="notion-list-body"><a class="notion-list-item notion-page-link" href="/3134708c96f04f44ab445b63fbcad90f"><div class="notion-list-item-title"><span class="notion-property notion-property-title"><a class="notion-page-link" href="/3134708c96f04f44ab445b63fbcad90f"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="ECB加密模式" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">ECB加密模式</span></span></a></span></div><div class="notion-list-item-body"><div class="notion-list-item-property"><span class="notion-property notion-property-multi_select"></span></div></div></a><a class="notion-list-item notion-page-link" href="/907da2252cd746bca6aa8475cae70251"><div class="notion-list-item-title"><span class="notion-property notion-property-title"><a class="notion-page-link" href="/907da2252cd746bca6aa8475cae70251"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="CBC加密模式" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">CBC加密模式</span></span></a></span></div><div class="notion-list-item-body"><div class="notion-list-item-property"><span class="notion-property notion-property-multi_select"></span></div></div></a><a class="notion-list-item notion-page-link" href="/f78e712fac3a424893e0d7fe801fc3cd"><div class="notion-list-item-title"><span class="notion-property notion-property-title"><a class="notion-page-link" href="/f78e712fac3a424893e0d7fe801fc3cd"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="OFB加密模式" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">OFB加密模式</span></span></a></span></div><div class="notion-list-item-body"><div class="notion-list-item-property"><span class="notion-property notion-property-multi_select"></span></div></div></a><a class="notion-list-item notion-page-link" href="/a6b03e7287614de3b64235c014135861"><div class="notion-list-item-title"><span class="notion-property notion-property-title"><a class="notion-page-link" href="/a6b03e7287614de3b64235c014135861"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="CFB加密模式" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">CFB加密模式</span></span></a></span></div><div class="notion-list-item-body"><div class="notion-list-item-property"><span class="notion-property notion-property-multi_select"></span></div></div></a></div></div></div></div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-9e8bcebe9369492c8f1b673fd364e4a9" data-id="9e8bcebe9369492c8f1b673fd364e4a9"><span><div id="9e8bcebe9369492c8f1b673fd364e4a9" class="notion-header-anchor"></div><a class="notion-hash-link" href="#9e8bcebe9369492c8f1b673fd364e4a9" title="1.DES加密："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.DES加密：</span></span></h4><div class="notion-text notion-block-6b84bd0f34e147f38ff464acce74a7ac">Data Encryption Standard(DES)，数据加密标准，是典型的块加密，其基本信息如下：</div><ul class="notion-list notion-list-disc notion-block-3a878f03a77c40139877a8830bc05d01"><li>将要机密的明文分成n个64 位的数据块进行输入 </li></ul><ul class="notion-list notion-list-disc notion-block-9969becf5c994d41b3a15ceb29677f6c"><li>加密后的密文同样为 64 位</li></ul><ul class="notion-list notion-list-disc notion-block-fee8134e18854fa3b748fba991b7ce37"><li>密钥长度为 64 位，使用 64 位密钥中的 56 位进行加密(原始密钥中每字节的最高位是没有被使用的)，剩余的 8 位要么丢弃，要么作为奇偶校验位</li></ul><ul class="notion-list notion-list-disc notion-block-23f9ef5945ce49d6928b5efa1ceed02b"><li>Feistel 迭代结构：</li><ul class="notion-list notion-list-disc notion-block-23f9ef5945ce49d6928b5efa1ceed02b"><li>明文经过 16 轮迭代得到密文</li><li>密文经过类似的 16 轮迭代得到明文</li></ul></ul><a class="notion-page-link notion-block-b045f2649ca74b3bbbccdd753514b98b" href="/b045f2649ca74b3bbbccdd753514b98b"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-title-icon notion-page-icon" role="img" aria-label="🕵️‍♂️">🕵️‍♂️</span></div><span class="notion-page-title-text">DES加密原理分析</span></span></a><div class="notion-text notion-block-441c0e58ace94be980c21fa1c1d4a360">逆向特征总结：</div><ol start="1" class="notion-list notion-list-numbered notion-block-55f55348e762453bbffa91a0d38cfd1e"><li>密文的长度必须是0x08字节的倍数。</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-3c138dd3842647eb97686172ac2eecad"><li>秘钥的长度必须是 0x08字节。</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-ffb1d973f29a4437a773136c9bb98ed2"><li>可以尝试找一些表的特征比如循环左移表，置换表等等。</li></ol><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-cc5caae97539470ba0990955221f544f" data-id="cc5caae97539470ba0990955221f544f"><span><div id="cc5caae97539470ba0990955221f544f" class="notion-header-anchor"></div><a class="notion-hash-link" href="#cc5caae97539470ba0990955221f544f" title="2.AES加密："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.AES加密：</span></span></h4><div class="notion-text notion-block-b838918a38604497881f463ea470e71d">AES加密算法，作为代替DES加密的一种分组加密算法，其使用的并不是feistel结构。在AES标准规范中，分组长度只能是128位，也就是说，每个分组为16个字节（每个字节8位）。密钥的长度可以使用128位、192位或256位。密钥的长度不同，推荐加密轮数也不同，如下表所示：</div><table class="notion-simple-table notion-block-5effafcb22fb46b49afea14e449c535c"><tbody><tr class="notion-simple-table-row notion-block-4e73d9b1b06e450eabfec7db91ee4ebc"><td class="" style="width:120px"><div class="notion-simple-table-cell">AES</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">密钥长度(32bytes)</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">分组长度(32bytes)</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">加密轮数</div></td></tr><tr class="notion-simple-table-row notion-block-3065fed3bd1046079038032c7665716e"><td class="" style="width:120px"><div class="notion-simple-table-cell">AES-128</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">4</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">4</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">10</div></td></tr><tr class="notion-simple-table-row notion-block-a3d1f723f87b40e5b1e5ec74295b350b"><td class="" style="width:120px"><div class="notion-simple-table-cell">AES-192</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">6</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">4</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">12</div></td></tr><tr class="notion-simple-table-row notion-block-63bb2219c86b49009ca029a5f0d84589"><td class="" style="width:120px"><div class="notion-simple-table-cell">AES-256</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">8</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">4</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">14</div></td></tr></tbody></table><a class="notion-page-link notion-block-9b0c314fe252436187aaf8320fd09539" href="/9b0c314fe252436187aaf8320fd09539"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-title-icon notion-page-icon" role="img" aria-label="🕵️‍♂️">🕵️‍♂️</span></div><span class="notion-page-title-text">AES加密原理分析</span></span></a><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-4cac7f61b2c246c0b7759d4f44c90de5" data-id="4cac7f61b2c246c0b7759d4f44c90de5"><span><div id="4cac7f61b2c246c0b7759d4f44c90de5" class="notion-header-anchor"></div><a class="notion-hash-link" href="#4cac7f61b2c246c0b7759d4f44c90de5" title="3.TEA加密"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3.TEA加密</span></span></h4><div class="notion-text notion-block-13b7c8bd82ac4d81b3080cc55011b6f5">&quot;TEA&quot; 的全称为&quot;Tiny Encryption Algorithm&quot;，是一种微型加密算法。TEA算法使用64位的明文分组和128位的密钥，使用feistel分组加框架，需要进行32轮循环得到最后的64位密文，其中magic number DELTA是由黄金分割点。</div><a class="notion-page-link notion-block-935eb650adf64f4595e803f66285895e" href="/935eb650adf64f4595e803f66285895e"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-title-icon notion-page-icon" role="img" aria-label="🕵️‍♂️">🕵️‍♂️</span></div><span class="notion-page-title-text">TEA算法加密原理分析</span></span></a><a class="notion-page-link notion-block-9d127753e0db4a2a8e069a854dcc531b" href="/9d127753e0db4a2a8e069a854dcc531b"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-title-icon notion-page-icon" role="img" aria-label="🕵️‍♂️">🕵️‍♂️</span></div><span class="notion-page-title-text">TEA系列逆向特征及实例</span></span></a></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[软件分析与破解]]></title>
            <link>https://www.reveone.cn//article/b9995414-5c2f-4a8b-9f0f-58cec01714a8</link>
            <guid>https://www.reveone.cn//article/b9995414-5c2f-4a8b-9f0f-58cec01714a8</guid>
            <pubDate>Fri, 07 Apr 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[这篇文章将介绍软件分析和破解的基本方法和技术。主要讨论逆向工程的基础知识和实践技巧，帮助读者更好地了解这个领域。]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-b99954145c2f4a8b9f0f58cec01714a8"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-sync-block notion-block-8408c1334cc740b68735811b9e50b646"><h4 class="notion-h notion-h3 notion-block-7282e8bbcedc40778d0bd58db2667a4c" data-id="7282e8bbcedc40778d0bd58db2667a4c"><span><div id="7282e8bbcedc40778d0bd58db2667a4c" class="notion-header-anchor"></div><a class="notion-hash-link" href="#7282e8bbcedc40778d0bd58db2667a4c" title="前言："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">前言：</span></span></h4><div class="notion-text notion-block-07b87bc9a7ba4fd1bae0ade48b20dc2d">软件的分析破解与平时做ctf中的逆向题是有一定的差别的。最直观的区别体现在两者的大小。一个逆向题一般只有一两兆大小，而一般的软件动辄就是十几或几十兆大小。这无疑增大了分析的困难度，这篇文章将就我最近做过的一些软件的破解进行总结。</div><h3 class="notion-h notion-h2 notion-block-02a38864236340e78b4326f819a17967" data-id="02a38864236340e78b4326f819a17967"><span><div id="02a38864236340e78b4326f819a17967" class="notion-header-anchor"></div><a class="notion-hash-link" href="#02a38864236340e78b4326f819a17967" title="一、软件分析思路："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">一、软件分析思路：</span></span></h3><div class="notion-text notion-block-fb04dc9feff74c8fa15e3df4d6a777ed">这里以爱思助手为例，假设我们需要定位它的新建音乐播放列表功能。</div><h4 class="notion-h notion-h3 notion-block-414b8fd9add84afa9aeb36bac43289da" data-id="414b8fd9add84afa9aeb36bac43289da"><span><div id="414b8fd9add84afa9aeb36bac43289da" class="notion-header-anchor"></div><a class="notion-hash-link" href="#414b8fd9add84afa9aeb36bac43289da" title="1.观察程序文件夹："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.观察程序文件夹：</span></span></h4><div class="notion-text notion-block-0fd652bc00c1412d97d55993932a6d94">要对一个软件进行分析首先，需要大概了解一下整个程序的框架，可以查看一下它的文件夹</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-edef6db1cf5b4789b06d50df343a468f"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F0dd37b76-5085-4ac0-818f-13b91a501457%2FUntitled.png?table=block&amp;id=edef6db1-cf5b-4789-b06d-50df343a468f&amp;t=edef6db1-cf5b-4789-b06d-50df343a468f" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-efada98b04dd4950ac54d4228e6e94cb">通过程序的文件夹可以大致了解到程序的整体框架以及在运行时可能会调用到的动态链接库，这一点是比较重要的，因为程序很多时候并不是把所有的功能都放在主程序中而是将特定的功能集成在特定动态链接库里面，在观察文件夹内容时注意一下哪些是系统库，哪些可能是软件开发者自己编写的库。比如上图中的<code class="notion-inline-code">avcodec-57.dll</code>就是FFmpeg的开源跨平台音视频处理库的其中一个。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-dd54539b8e2d481fafcc47d56819df64"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fc75e6bc6-6aa0-4226-9121-1311f0f42566%2FUntitled.png?table=block&amp;id=dd54539b-8e2d-481f-afcc-47d56819df64&amp;t=dd54539b-8e2d-481f-afcc-47d56819df64" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-0a020b79888b4c5d8f4b3e2528572a04">通过观察这些库文件还可以了解到程序的一些图形化界面是用什么开发的比如这个程序就是用的QT来进行图形化界面的开发。</div><h4 class="notion-h notion-h3 notion-block-ea7085f5afee4ce1baa713152f5f4720" data-id="ea7085f5afee4ce1baa713152f5f4720"><span><div id="ea7085f5afee4ce1baa713152f5f4720" class="notion-header-anchor"></div><a class="notion-hash-link" href="#ea7085f5afee4ce1baa713152f5f4720" title="2.运行程序："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.运行程序：</span></span></h4><div class="notion-text notion-block-5a0dab4070f946e58a8aba893268a3cd">大致了解了程序的框架之后，尝试运行一下该程序，了解一下需要分析的新建音乐播放列表模块：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-de1b9cc006c54219bf985181d1b6a56f"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F4c3cf183-b3ca-4ae5-b490-d20b32a06672%2FUntitled.png?table=block&amp;id=de1b9cc0-06c5-4219-bf98-5181d1b6a56f&amp;t=de1b9cc0-06c5-4219-bf98-5181d1b6a56f" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-30be1359fc0a4ebba074341748575203">点击新建播放列表按钮，输入需要新建的音乐文件夹名，之后会弹出一个对话框，显示正在新建播放列表：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-00b57b0d2f044f389c8768ec3348f8a1"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:500px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F51da0fe8-129f-411e-89aa-b149b0b3d216%2FUntitled.png?table=block&amp;id=00b57b0d-2f04-4f38-9c87-68ec3348f8a1&amp;t=00b57b0d-2f04-4f38-9c87-68ec3348f8a1" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-cf5d6d41091f477fa3fe09a844eb2800">从这里我们可以获得到的信息是在确认播放列表的名称后，程序就会弹出窗口，而弹出窗口就会调用Windows的API，之后在分析的时候可以考虑在函数CreateWindExW()上下断点。</div><h4 class="notion-h notion-h3 notion-block-33bf6245d6dd42a1980b780fe9b464e0" data-id="33bf6245d6dd42a1980b780fe9b464e0"><span><div id="33bf6245d6dd42a1980b780fe9b464e0" class="notion-header-anchor"></div><a class="notion-hash-link" href="#33bf6245d6dd42a1980b780fe9b464e0" title="3.查壳："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3.查壳：</span></span></h4><div class="notion-text notion-block-dfc296421a1b46ea9d9cb2d5db0c1b53">大致了解了程序的运行流程之后基本的信息就收集的差不多了，最后再看一下程序是否有加壳，这里使用查壳工具查看程序的加壳情况和了解程序是32位还是64位：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-99cd69632fa84b1c905ae610ab5ad89b"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:542px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F831f27c6-373f-41c6-a00e-36aa585fba04%2FUntitled.png?table=block&amp;id=99cd6963-2fa8-4b1c-905a-e610ab5ad89b&amp;t=99cd6963-2fa8-4b1c-905a-e610ab5ad89b" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-ec60584f270540f7936fcd66a7c33858">可以看到目标程序没有加壳，是32位程序。</div><h4 class="notion-h notion-h3 notion-block-f59c2437abac4b0198a894721cb7c3af" data-id="f59c2437abac4b0198a894721cb7c3af"><span><div id="f59c2437abac4b0198a894721cb7c3af" class="notion-header-anchor"></div><a class="notion-hash-link" href="#f59c2437abac4b0198a894721cb7c3af" title="4.程序分析："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">4.程序分析：</span></span></h4><div class="notion-text notion-block-982877b8033d4b23b165b5ca9c73c2f8">对程序的分析使用的工具主要是OD还有IDA这两把利剑，tips：分析程序之前最好把程序的地址随机化关了，方便OD和IDA对比分析。</div><div class="notion-text notion-block-aaa2d61391cd4bf9b51de32935732888">大致理一下思路，首先目前还无法确定这个功能是在主程序中实现还是调用的dll来实现的，可以考虑先给新建窗口的API下断点，然后观察堆栈看是否能回溯到用户代码：</div><div class="notion-text notion-block-647553656ed24f609fabe39525e27a93">先将程序跑起来，把x32dbg附加上取，Ctrl+G在CreateWindExW()上面下断点</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-297e21696aab470ba9a5f395ef8c1b1c"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F1b43959b-31e3-4dd3-b7c8-0cb12da8b9a2%2FUntitled.png?table=block&amp;id=297e2169-6aab-470b-a9a5-f395ef8c1b1c&amp;t=297e2169-6aab-470b-a9a5-f395ef8c1b1c" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-b783eecbeb9f4638862a69940869bc4d">然后按下新建音乐播放列表。查看x32dbg可以发现程序断下来了，观察它的堆栈</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-dbd4f713d0ee4e38aaca7d0d7d75bc03"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:512px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F9192936f-45de-4ab2-9505-f0dad2653759%2FUntitled.png?table=block&amp;id=dbd4f713-d0ee-4e38-aaca-7d0d7d75bc03&amp;t=dbd4f713-d0ee-4e38-aaca-7d0d7d75bc03" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-41b914a9b18648c79ed1c46367725e19">发现程序的上层并没有主程序的代码，一直在QT里面绕。显然使用API下断点的办法不太行得通，这里可能时调用的dll来实现的程序功能，为了验证这个猜想使用ida以查找字符串的方式去定位与music或者media有关的函数：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-7819bd68567f481f8d87deaa0606db06"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:404px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F63fdd05e-e2a1-4f73-aa2b-1a8ab5041d52%2FUntitled.png?table=block&amp;id=7819bd68-567f-481f-8d87-deaa0606db06&amp;t=7819bd68-567f-481f-8d87-deaa0606db06" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-6f978861f8e54c27bb741f35bf3d8290">观察这些函数都有一个特点就是会有不少的QString的函数，这些函数的作用是绘制窗口，所以到这里基本可以判定主函数中并没有我们要找的新建音乐播放列表功能，到了这一步就要考虑对程序所引用的DLL进行分析，具体操作为打开x32dbg的内存布局窗口</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a768d301a764cc89f510b06467cea20"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F5bdba826-70a9-475c-817b-dea7be5cb06b%2FUntitled.png?table=block&amp;id=2a768d30-1a76-4cc8-9f51-0b06467cea20&amp;t=2a768d30-1a76-4cc8-9f51-0b06467cea20" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-472728aac99e41899342cdc897e4d902">这里可以看到程序加载的动态链接库，排除掉一些系统库，可以尝试对一些可疑的DLL下内存访问断点：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-87a018f6465c4d3fb24b593196b46a78"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Ffb0202a6-da9c-4b79-83c3-12d28a198d7a%2FUntitled.png?table=block&amp;id=87a018f6-465c-4d3f-b24b-593196b46a78&amp;t=87a018f6-465c-4d3f-b24b-593196b46a78" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-07c5191ff5a449eea8fc96e35f3db498">这里需要注意的是不要下错地方，是在代码段下断点。可以一次多下几个，看断在了那个dll中，这个实例程序最终断在了idm_media.dll中，查看该dll引用的函数：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-339ab25fab7949e9bbbd8a837f8aba42"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F4ab25c1b-d49a-4793-8db9-6c1a0e3e584f%2FUntitled.png?table=block&amp;id=339ab25f-ab79-49e9-bbbd-8a837f8aba42&amp;t=339ab25f-ab79-49e9-bbbd-8a837f8aba42" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-d33e8c8e1ffa4375bcc2f7db8608937a">可以看到其中一个函数就是新建音乐播放列表模块。</div><h3 class="notion-h notion-h2 notion-block-42152d7be0464179bd7f91ac7838dff9" data-id="42152d7be0464179bd7f91ac7838dff9"><span><div id="42152d7be0464179bd7f91ac7838dff9" class="notion-header-anchor"></div><a class="notion-hash-link" href="#42152d7be0464179bd7f91ac7838dff9" title="二、软件破解示例："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">二、软件破解示例：</span></span></h3><div class="notion-text notion-block-3a8050f7d4b34a399d09f9c4d9414c4c">以国外的一个变声器软件MagicMic进行为例，该程序的vip功能提供了很多类型的声线，这里尝试获得其vip权限：</div><h4 class="notion-h notion-h3 notion-block-0243c883719a42a3ae65bb2d0e9e615d" data-id="0243c883719a42a3ae65bb2d0e9e615d"><span><div id="0243c883719a42a3ae65bb2d0e9e615d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0243c883719a42a3ae65bb2d0e9e615d" title="1.前期信息收集："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.前期信息收集：</span></span></h4><div class="notion-text notion-block-0e021c26b56a45beb1205f71cf9406d9">还是一样，在开始分析程序之前做三个步骤：观察程序文件夹结构、运行了解情况、查壳。</div><ol start="1" class="notion-list notion-list-numbered notion-block-586b65f6b106401bb8b8b4eb6a353034"><li>程序文件夹结构：</li><ol class="notion-list notion-list-numbered notion-block-586b65f6b106401bb8b8b4eb6a353034"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-ef6e2f6a6ab8420dae5a1dd737ca7410"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F98ae2129-88bd-4db7-8d07-fb4da51440bd%2FUntitled.png?table=block&amp;id=ef6e2f6a-6ab8-420d-ae5a-1dd737ca7410&amp;t=ef6e2f6a-6ab8-420d-ae5a-1dd737ca7410" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-b6d1f32789c5493fa0204822c6f0f926">这里文件夹较多，不太好截图，大概总结一下，目录内包含qt库，和一些音频处理的dll。tips：分析时每个文件夹都可以查看一下大致了解程序框架。</div></ol></ol><ol start="2" class="notion-list notion-list-numbered notion-block-ed715fcbd54c422aa5070bfe27b15886"><li>运行情况：</li><ol class="notion-list notion-list-numbered notion-block-ed715fcbd54c422aa5070bfe27b15886"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-fb69d0bcdea44e1196aeb2dbfaf3e00d"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F6d42c98b-4a32-44c3-89b4-ab6abb7bc6e4%2FUntitled.png?table=block&amp;id=fb69d0bc-dea4-4e11-96ae-b2dbfaf3e00d&amp;t=fb69d0bc-dea4-4e11-96ae-b2dbfaf3e00d" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-15c3be4face843e48d2edc1a3adab08a">上图是运行后程序的样子，每个图标右上角的钻石标识就是vip才能用的声音特效，尝试点击会弹出如下的窗口：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-c8f9055fc053437784ac580b11aa433a"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F6e6a7bb4-bd93-4fd4-a69c-ceb712e084dd%2FUntitled.png?table=block&amp;id=c8f9055f-c053-4377-84ac-580b11aa433a&amp;t=c8f9055f-c053-4377-84ac-580b11aa433a" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol></ol><ol start="3" class="notion-list notion-list-numbered notion-block-23c9dc8c3fd64ad98041c44c3a1c40a7"><li>查壳：</li><ol class="notion-list notion-list-numbered notion-block-23c9dc8c3fd64ad98041c44c3a1c40a7"><div class="notion-text notion-block-57c673ce66dd4516bc2769cb6c26acdb">64位，无壳</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-5790e3cb51214b5cb35d4352c969c887"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F8f5abcdf-bf86-4bf4-8818-a2c9a7f1c5b3%2FUntitled.png?table=block&amp;id=5790e3cb-5121-4b5c-b35d-4352c969c887&amp;t=5790e3cb-5121-4b5c-b35d-4352c969c887" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol></ol><h4 class="notion-h notion-h3 notion-block-a699fc86935c442d84ac1ebededa30ee" data-id="a699fc86935c442d84ac1ebededa30ee"><span><div id="a699fc86935c442d84ac1ebededa30ee" class="notion-header-anchor"></div><a class="notion-hash-link" href="#a699fc86935c442d84ac1ebededa30ee" title="2.软件分析："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.软件分析：</span></span></h4><div class="notion-text notion-block-6d1a173170ab4633855aa1dff2772219">在运行时可以看到弹出的对话框中有一些“解锁VIP”等字符，使用x64dbg打开MagicMic，先进入MagicMic.exe模块，然后在反汇编窗口区域右击搜索当前模块的字符串</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-0959ad66855a4f62bd05754dcc51b4dd"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F4b55e520-330f-4f7e-b4c8-dfb67cdae475%2FUntitled.png?table=block&amp;id=0959ad66-855a-4f62-bd05-754dcc51b4dd&amp;t=0959ad66-855a-4f62-bd05-754dcc51b4dd" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-f21d8ed30cd34cc29f368390078bde78"> 接着等待字符串搜索完毕后，得到下图结果：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-331fa044a00847e2841cc303a18069d7"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F8c39b2f7-dec2-4b13-b4bc-68ff71c6393b%2FUntitled.png?table=block&amp;id=331fa044-a008-47e2-841c-c303a18069d7&amp;t=331fa044-a008-47e2-841c-c303a18069d7" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-fdaaf202e41b456bbb0ed0b2ffdbaf62">发现搜索出来的结果不算太多，可以尝试先对上面一半的结果下断点，然后F9运行程序，回到程序触发vip注册窗口看程序是否有断下来，通过这样的二分法不断缩小范围可以发现最后断在了字符串“Save(Non-vip)”处：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-69501da52f00459491abc955548e9a5a"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F1012fa74-7d61-4076-bf47-5b5b64b97c88%2FUntitled.png?table=block&amp;id=69501da5-2f00-4594-91ab-c955548e9a5a&amp;t=69501da5-2f00-4594-91ab-c955548e9a5a" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-65fc2778408a4c8ab106ea06d0a941ab">分析这个部分的汇编代码，可以发现是否执行Save(Non-vip)的代码是根据地址：<code class="notion-inline-code">7FF7CEA07403</code>处的je判断</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-a2b42d713dad43418f01cebcb3f9012b"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fc61131eb-77c0-4678-b4a7-fc5f65380d1c%2FUntitled.png?table=block&amp;id=a2b42d71-3dad-4341-8f01-cebcb3f9012b&amp;t=a2b42d71-3dad-4341-8f01-cebcb3f9012b" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-4ed33e82174042f994cc0b4c07fd7fc2">这个je判断的下面就是Save(vip)的代码，这里直接将je改成jne：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-cce36de8e9d74ae48555b16fa3a53662"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fc2993075-c189-4a7e-9cba-ef67f9ff85b9%2FUntitled.png?table=block&amp;id=cce36de8-e9d7-4ae4-8555-b16fa3a53662&amp;t=cce36de8-e9d7-4ae4-8555-b16fa3a53662" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-09e009a29bc84e9093ff795ff15f4e04">再试着运行一下程序，发现程序依然会弹出vip注册窗口，说明还得往上更，</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-12e4e5d24cd149d0abca9b6fa336bdbb"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Ffc529d5a-5396-405c-aef4-f96d3c772621%2FUntitled.png?table=block&amp;id=12e4e5d2-4cd1-49d0-abca-9b6fa336bdbb&amp;t=12e4e5d2-4cd1-49d0-abca-9b6fa336bdbb" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-d912362184ab4a01a697a0625e57f1ce">jne上面有一条call指令，双击更过去看一下：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-5213d7cd7c2049dc843e99d9158e681b"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F43bfc3e8-7ac5-4656-b3d5-ad8cc8edb254%2FUntitled.png?table=block&amp;id=5213d7cd-7c20-49dc-843e-99d9158e681b&amp;t=5213d7cd-7c20-49dc-843e-99d9158e681b" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-06c0e9e150774087a10fed522297b415">这部分的逻辑就很容易懂了，关键在选中的GetLisecseState函数，程序就是通过它来获取许可状态，函数返回值如果不为一则表示不是vip，动调之后可以看到当前没有vip时eax的值为0：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-f60d03ae49204e80a6bc06117b1b6575"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fae521d59-8626-4aff-a05e-99c8558cd6cb%2FUntitled.png?table=block&amp;id=f60d03ae-4920-4e80-a6bc-06117b1b6575&amp;t=f60d03ae-4920-4e80-a6bc-06117b1b6575" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-f85670f581494a89870bd77aad60026a">这里可以将cmp eax,1改为cmp eax,0，或者把下面的jne改成je，两个修改方式任选其一即可。将这个部分修改后再次运行观察是否成功破解：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-870f40c61893479da5cae9d05cb5377f"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fe5bd6f7b-5526-4649-8525-858107bb45df%2FUntitled.png?table=block&amp;id=870f40c6-1893-479d-a5ca-e9d05cb5377f&amp;t=870f40c6-1893-479d-a5ca-e9d05cb5377f" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-376b17e5816040c5b4edc9ff4cfe4f09">可以发现现在所有的音效就都可以下载使用了。</div><div class="notion-text notion-block-4975340103954eefb74fc72850e6cb7a">最后Ctrl+P生成补丁：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-118350ba67874c7a9e0e50ed6a7bbeb3"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:548px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F8c9c7c56-591b-4a0b-a621-239b4f30679f%2FUntitled.png?table=block&amp;id=118350ba-6787-4c7a-9e0e-50ed6a7bbeb3&amp;t=118350ba-6787-4c7a-9e0e-50ed6a7bbeb3" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-b79570a9a7f248ea8071bc72fa2ddb7a">选择修补文件，保存打完补丁的程序到程序文件夹就可以正常使用了。</div><h3 class="notion-h notion-h2 notion-block-3e52d0ec6dd242f99b5684aa36157f95" data-id="3e52d0ec6dd242f99b5684aa36157f95"><span><div id="3e52d0ec6dd242f99b5684aa36157f95" class="notion-header-anchor"></div><a class="notion-hash-link" href="#3e52d0ec6dd242f99b5684aa36157f95" title="三、软件分析、破解记录："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">三、软件分析、破解记录：</span></span></h3><div><div></div></div><div class="notion-collection notion-block-298656d82f4d495994e3a05c2a658f7f"><div class="notion-list-collection"><div class="notion-list-view"><div class="notion-list-body"><a class="notion-list-item notion-page-link" href="/5bcd8fd10f5e46ce85be02a73b61ec7f"><div class="notion-list-item-title"><span class="notion-property notion-property-title"><a class="notion-page-link" href="/5bcd8fd10f5e46ce85be02a73b61ec7f"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-title-icon notion-page-icon" role="img" aria-label="🕵️‍♂️">🕵️‍♂️</span></div><span class="notion-page-title-text">010Editor</span></span></a></span></div><div class="notion-list-item-body"><div class="notion-list-item-property"><span class="notion-property notion-property-multi_select"><div class="notion-property-multi_select-item notion-item-purple">破解</div></span></div></div></a><a class="notion-list-item notion-page-link" href="/88e964fc2be64b2fae6fb78cd987ad2b"><div class="notion-list-item-title"><span class="notion-property notion-property-title"><a class="notion-page-link" href="/88e964fc2be64b2fae6fb78cd987ad2b"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-title-icon notion-page-icon" role="img" aria-label="🕵️‍♂️">🕵️‍♂️</span></div><span class="notion-page-title-text"><b><b>UnlockGo (Android)</b></b></span></span></a></span></div><div class="notion-list-item-body"><div class="notion-list-item-property"><span class="notion-property notion-property-multi_select"><div class="notion-property-multi_select-item notion-item-purple">破解</div></span></div></div></a></div></div></div></div><div class="notion-blank notion-block-6beea4e2b5694480a1fac83444464a19"> </div><div class="notion-blank notion-block-3e3e43cfcb3a455197082704a2705fab"> </div></div><div class="notion-blank notion-block-0dcc100e68cd481884d7a6618f4e2a60"> </div><div class="notion-blank notion-block-f451ae940e104aa88d25672f9667e2e1"> </div><div class="notion-blank notion-block-f03d5115361e452a925a49439143a04c"> </div></main></div>]]></content:encoded>
        </item>
    </channel>
</rss>