<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Life - 标签 - 有价值炮灰</title>
        <link>https://evilpan.com/tags/life/</link>
        <description>Life - 标签 - 有价值炮灰</description>
        <generator>Hugo -- gohugo.io</generator><language>zh-CN</language><managingEditor>i@pppan.net (evilpan)</managingEditor>
            <webMaster>i@pppan.net (evilpan)</webMaster><copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright><lastBuildDate>Sun, 20 Sep 2020 12:40:00 &#43;0800</lastBuildDate><atom:link href="https://evilpan.com/tags/life/" rel="self" type="application/rss+xml" /><item>
    <title>我TM就是管住不自己这双手啊</title>
    <link>https://evilpan.com/2020/09/20/restrain-yourself/</link>
    <pubDate>Sun, 20 Sep 2020 12:40:00 &#43;0800</pubDate><author>
        <name>evilpan</name>
    </author><guid>https://evilpan.com/2020/09/20/restrain-yourself/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/img/2020-09-20-restrain-yourself/0.png" referrerpolicy="no-referrer">
            </div><p>博客从 Jekyll 迁移到 Hugo，以及最近一些折腾的感悟。</p>
<h1 id="个人博客那些事" class="headerLink">
    <a href="#%e4%b8%aa%e4%ba%ba%e5%8d%9a%e5%ae%a2%e9%82%a3%e4%ba%9b%e4%ba%8b" class="header-mark"></a>个人博客那些事</h1><p>其实从很早的时候就开始了个人博客网站的搭建，最初得益于 github.io 域名的开放。总的来说，我搭建博客的历史主要分为三个阶段。</p>
<h2 id="第一阶段" class="headerLink">
    <a href="#%e7%ac%ac%e4%b8%80%e9%98%b6%e6%ae%b5" class="header-mark"></a>第一阶段</h2><p>第一阶段属于简单至上主义。这个时期使用 <a href="https://jekyllrb.com/" target="_blank" rel="noopener noreferrer">Jekyll</a> 作为主要的静态博客生成引擎，可以方便地使用 Markdown 来进行写作，并且这也是 Github Pages 官方支持的。</p>
<p><figure><a class="lightgallery" href="/img/2020-09-20-restrain-yourself/1.png" title="img2" data-thumbnail="/img/2020-09-20-restrain-yourself/1.png" data-sub-html="<h2>Jekyll</h2><p>img2</p>"><img  loading="lazy" src='/img/2020-09-20-restrain-yourself/1.png'   alt="img2"  ></a><figcaption class="image-caption">Jekyll</figcaption>
</figure></p>
<p>最初是使用了一个简单的模板，后来随着需求日益增加，比如需要标签、目录、侧边栏等功能，于是又转投了另一个主题。</p>
<h2 id="第二阶段" class="headerLink">
    <a href="#%e7%ac%ac%e4%ba%8c%e9%98%b6%e6%ae%b5" class="header-mark"></a>第二阶段</h2><p>由于在第一阶段中日益增长的定制需求和静态博客的限制矛盾，这个时期开始了一段折腾的造轮子历程。在这个阶段，我用 Python (Django) 写了一个完整博客系统，命名为 berserk (因为当时喜欢听阿姆)。该博客支持以下功能:</p>
<ul>
<li>支持 Markdown 渲染，文章目录、代码语法高亮、自适应文章布局</li>
<li>支持文章分类、标签，以及这些属性的数据库管理</li>
<li>支持页面访问统计、评论</li>
<li>支持后台管理 (基于定制的Django-Admin)</li>
<li>支持在后台使用类似 VIM 的键盘映射来编写文章</li>
<li>支持真实后台管理页面的隐藏以及虚假后台页面的蜜罐和告警 (没错)</li>
</ul>
<p>此外因为当时工作接触了一些新潮前端概念，还尝试将一套前后端分离的模式融入到系统中。学习 ReactJS 并折腾了一段时间后发现和 Django 原本的模板系统格格不入，然后就又去掉了。</p>
<p><figure><a class="lightgallery" href="/img/2020-09-20-restrain-yourself/2.png" title="img3" data-thumbnail="/img/2020-09-20-restrain-yourself/2.png" data-sub-html="<h2>berserk</h2><p>img3</p>"><img  loading="lazy" src='/img/2020-09-20-restrain-yourself/2.png'   alt="img3"  ></a><figcaption class="image-caption">berserk</figcaption>
</figure></p>
<p>这个博客系统一直缝缝补补并使用了很一段时间，充满了各种奇怪的前后端 tricks。期间也遇到过各种问题，比如整天被乌克兰的机器人在评论区发广告，于是又加入了人机验证，诸如此类。……直到有一天发现这一切和我的初衷(写博客)似乎没什么直接关系，于是又怀念起了以前用 Jekyll 的那段开心时光。</p>
<h2 id="第三阶段" class="headerLink">
    <a href="#%e7%ac%ac%e4%b8%89%e9%98%b6%e6%ae%b5" class="header-mark"></a>第三阶段</h2><p>在自建博客前后端被搞的焦头烂额之后，我又回到了 Jekyll 的怀抱。其实是在自建博客期间看到了许多优秀的 Jekyll 主题完全可以满足我的要求，所以才最终回归。并且在内心暗暗下决心: <strong>再也不折腾了</strong>。</p>
<p>不过还是小小折腾了一下，在此期间对一个小众的主题进行了一些简单的定制和优化。这个阶段算是返璞归真，没有了后端的琐事，可以简单地对主题模板进行修改。基于对 Jekyll 模板的了解，这些事情算是驾轻就熟，可以说对博客页面的折腾已经到头了。</p>
<p><figure><a class="lightgallery" href="/img/2020-09-20-restrain-yourself/3.png" title="img4" data-thumbnail="/img/2020-09-20-restrain-yourself/3.png" data-sub-html="<h2>合影留念</h2><p>img4</p>"><img  loading="lazy" src='/img/2020-09-20-restrain-yourself/3.png'   alt="img4"  ></a><figcaption class="image-caption">合影留念</figcaption>
</figure></p>
<p>这个系统也一直使用了较长的时间，一切都挺满意，除了头顶的几片乌云:</p>
<ol>
<li>博客访问统计使用的是<a href="http://busuanzi.ibruce.info/" target="_blank" rel="noopener noreferrer">不算子</a>，服务器在国外，而且数据不可控；</li>
<li>网页常规同步加载，在图片等资源多的时候会感觉速度很慢；</li>
<li>Jekyll 使用 Ruby，安装繁琐，构建速度极慢；</li>
<li>&hellip;</li>
</ol>
<p>第3点的依赖问题可以通过 bundle 或者直接使用 docker 来解决，但是编译构建的速度着实堪忧，比如才几十篇文章，在服务器上构建就需要长达 <strong>15秒</strong> 的时间:</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    
    tw-flex 
    tw-flex-row
    tw-flex-1 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw-mx-2 
        tw-flex
        tw-flex-row
        tw-flex-1"
      aria-hidden="true">
          <div class="group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></div>
          <p class="tw-select-none !tw-my-1">sh</p>
      </button>

   <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-1" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl">$ docker run -it --rm -v <span class="nv">$PWD</span>:/srv/jekyll -p 4000:4000 jekyll/jekyll jekyll serve -s /srv/jekyll
</span></span><span class="line"><span class="cl">ruby 2.6.5p114 <span class="o">(</span>2019-10-01 revision 67812<span class="o">)</span> <span class="o">[</span>x86_64-linux-musl<span class="o">]</span>
</span></span><span class="line"><span class="cl">Configuration file: /srv/jekyll/_config.yml
</span></span><span class="line"><span class="cl">            Source: /srv/jekyll
</span></span><span class="line"><span class="cl">       Destination: /srv/jekyll/_site
</span></span><span class="line"><span class="cl"> Incremental build: disabled. Enable with --incremental
</span></span><span class="line"><span class="cl">      Generating...
</span></span><span class="line"><span class="cl">                    <span class="k">done</span> in 15.28 seconds.
</span></span><span class="line"><span class="cl"> Auto-regeneration: enabled <span class="k">for</span> <span class="s1">&#39;/srv/jekyll&#39;</span>
</span></span><span class="line"><span class="cl">    Server address: http://0.0.0.0:4000/
</span></span><span class="line"><span class="cl">  Server running... press ctrl-c to stop.</span></span></code></pre>
</div>
<p>所以，我又开始折腾了。……但是这次没有忘记初衷，而是选择了 <a href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a> 加一个比较活跃的主题，因为我不想在前端的修改上花费时间，也不想花太多时间去研究新的模板语法(不过最终还是提了<a href="https://github.com/dillonzq/LoveIt/pull/522" target="_blank" rel="noopener noreferrer">pull request</a>)。</p>
<p><figure><a class="lightgallery" href="/img/2020-09-20-restrain-yourself/0.png" title="meme" data-thumbnail="/img/2020-09-20-restrain-yourself/0.png" data-sub-html="<h2>meme</h2><p>meme</p>"><img  loading="lazy" src='/img/2020-09-20-restrain-yourself/0.png'   alt="meme"  ></a><figcaption class="image-caption">meme</figcaption>
</figure></p>
<p>总之，博客还是从 Jekyll 迁移到了 Hugo。迁移过程不算太顺利，因为二者对 Markdown 的元数据理解不同，而且整站的路径也不一样，但通过编写迁移脚本可算实现了。</p>
<p>新的博客可以直接通过 <a href="https://evilpan.com/" target="_blank" rel="noopener noreferrer">https://evilpan.com</a> 访问。</p>
<h1 id="感悟" class="headerLink">
    <a href="#%e6%84%9f%e6%82%9f" class="header-mark"></a>感悟</h1><p>其实改来改去，对于最终的阅读者(如果有的话)并不会产生太大影响。就我个人而言，反而不太喜欢那些花里胡哨的博客主题，比如背景弄一些酷炫的 canvas 搞得电脑风扇直转。从阅读者的角度来说，(博客)网站只需要做到:</p>
<ol>
<li>良好的阅读体验，包括字体、图片、颜色，别搞些绿底黄字的非人间配色；</li>
<li>文章长的话最好有目录，方便阅读；</li>
<li>链接的持久性，不要让阅读者在百度或者其他地方索引过来发现是 404；</li>
<li>RSS (当然也可以不提供，需要的人可以用 feed43 之类的爬虫，但是没必要)；</li>
</ol>
<p>这些一般的博客引擎都能满足，实在没有瞎折腾的必要。而对于博客本身，其实最重要的只有一个 —— <strong>文章质量</strong>！其他的都是扯谈，如果是<a href="https://mp.weixin.qq.com/s/iCAj-s7ey9aC2qPJ_pLmjA" target="_blank" rel="noopener noreferrer">内容农场</a>那就另当别论。</p>
<h1 id="关于-credit" class="headerLink">
    <a href="#%e5%85%b3%e4%ba%8e-credit" class="header-mark"></a>关于 credit</h1><p>很多人在自建博客时习惯把底部的 credit 去掉，比如 <code>Power by Hugo / Theme By XXX</code> 这种信息。我以前也会这样，一方面是为了简洁，另一方面也是希望能有一些“个性”，生怕宝藏主题被别人抄去了导致烂大街；或者就是干脆想让别人认为这是自己写出来的。</p>
<p>其实大可不必。首先你不是一个前端工程师，所以前端技能并不是别人想要从你身上学习的点。反过来说，如果你是前端，那么自己写一套主题那也应该是常规操作，投机取巧并不能让你自己有所受益；其次，留下主题信息可以让更多看到的人去使用是件好事，获得更多关注后就可能潜在引入更多的开源贡献，最终能让你自己获得更好的使用体验；最后，credit 是对原作者劳动成果的一个起码尊重，谁也不想自己辛苦开发或者写的东西被白嫖党滥用。</p>
<p>在看许多国外的 slides 或者文章时候经常看到对于图片、截图如果不是自己画的都会有明显说明来源何处，国内经常就是拿来就用，当然俺也一样，不过已经在改了。</p>
<h1 id="关于时间" class="headerLink">
    <a href="#%e5%85%b3%e4%ba%8e%e6%97%b6%e9%97%b4" class="header-mark"></a>关于时间</h1><p>年轻的时候喜欢做加法，奉行 <strong>艺多不压身</strong> 的准则，对于各种不同领域都喜欢去探索和学习，现在也还是会有很多冲动。但是随着任务列表的逐渐变长，里面的很多项目很可能会一直沉睡在收藏夹中。到了一定的阶段，就需要学会管住自己的双手，把时间用在刀刃上。也就是说，需要学会给人生做减法了。</p>
<p>除了前面提到的博客系统，我还做过很多浪费时间的事情，比如自己写 XSS 盲注后台、DNS服务器(SSRF)、GPS钓鱼系统、写各种命令行工具去实现本可以在网页做到的功能。……</p>
<p><figure><a class="lightgallery" href="/img/2020-09-20-restrain-yourself/4.png" title="fish" data-thumbnail="/img/2020-09-20-restrain-yourself/4.png" data-sub-html="<h2>一个朴素的钓鱼系统后台</h2><p>fish</p>"><img  loading="lazy" src='/img/2020-09-20-restrain-yourself/4.png'   alt="fish"  ></a><figcaption class="image-caption">一个朴素的钓鱼系统后台</figcaption>
</figure></p>
<p>各种命令行工具，有查单词的:</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    
    tw-flex 
    tw-flex-row
    tw-flex-1 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw-mx-2 
        tw-flex
        tw-flex-row
        tw-flex-1"
      aria-hidden="true">
          <div class="group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></div>
          <p class="tw-select-none !tw-my-1">sh</p>
      </button>

   <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-2" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl">$ dictionary.py restrain
</span></span><span class="line"><span class="cl"><span class="c1">##########################</span>
</span></span><span class="line"><span class="cl"><span class="c1">### Youdao Translation ###</span>
</span></span><span class="line"><span class="cl"><span class="c1">##########################</span>
</span></span><span class="line"><span class="cl">restrain: 抑制
</span></span><span class="line"><span class="cl">us:<span class="o">[</span>rɪˈstreɪn<span class="o">]</span>, uk:<span class="o">[</span>rɪˈstreɪn<span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="o">===</span> <span class="nv">basic</span> <span class="o">===</span>
</span></span><span class="line"><span class="cl">vt. 抑制，控制；约束；制止
</span></span><span class="line"><span class="cl"><span class="o">===</span> <span class="nv">web</span> <span class="o">===</span>
</span></span><span class="line"><span class="cl">restrain: 阻止,抑制,限制
</span></span><span class="line"><span class="cl">Ratio restrain: 比率制动
</span></span><span class="line"><span class="cl">restrain test: 栓固试验</span></span></code></pre>
</div>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    
    tw-flex 
    tw-flex-row
    tw-flex-1 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw-mx-2 
        tw-flex
        tw-flex-row
        tw-flex-1"
      aria-hidden="true">
          <div class="group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></div>
          <p class="tw-select-none !tw-my-1">sh</p>
      </button>

   <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-3" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl">$ abbr.py PUA
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> found <span class="m">25</span> results
</span></span><span class="line"><span class="cl">+------+----------------------------------------+-----------------------------------+------+
</span></span><span class="line"><span class="cl"><span class="p">|</span> name <span class="p">|</span>                  desc                  <span class="p">|</span>               domain              <span class="p">|</span> rate <span class="p">|</span>
</span></span><span class="line"><span class="cl">+------+----------------------------------------+-----------------------------------+------+
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>    Pandemic Unemployment Assistance    <span class="p">|</span>    Miscellaneous / Unclassified   <span class="p">|</span>  <span class="m">5</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>   Potentially Unwanted Applications    <span class="p">|</span>    Miscellaneous / Unclassified   <span class="p">|</span>  <span class="m">4</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>    Potentially Unwanted Application    <span class="p">|</span>        Computing / Software       <span class="p">|</span>  <span class="m">4</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>             Pick Up Artist             <span class="p">|</span>    Community / Performing Arts    <span class="p">|</span>  <span class="m">3</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>            Public Use Area             <span class="p">|</span>    Miscellaneous / Unclassified   <span class="p">|</span>  <span class="m">2</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>         Puas, Papua New Guinea         <span class="p">|</span>      Regional / Airport Codes     <span class="p">|</span>  <span class="m">2</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>            Private Use Area            <span class="p">|</span>             Community             <span class="p">|</span>  <span class="m">2</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>          Personal User Agent           <span class="p">|</span>    Miscellaneous / Unclassified   <span class="p">|</span>  <span class="m">2</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span> Professional Underwriters Agency, Inc. <span class="p">|</span>    Business / Companies <span class="p">&amp;</span> Firms   <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>    Professional Underwriters Agency    <span class="p">|</span>        Business / Agencies        <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>           Present under Arms           <span class="p">|</span>    Miscellaneous / Unclassified   <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>       Premium Upgrade Assurance        <span class="p">|</span>    Miscellaneous / Unclassified   <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>    Potentialy Unwanted Application     <span class="p">|</span>    Miscellaneous / Unclassified   <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>       Potentially Unwanted Apps        <span class="p">|</span>    Miscellaneous / Unclassified   <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>      Possession and Use Agreement      <span class="p">|</span>    Miscellaneous / Unclassified   <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>      Portland Urologic Associates      <span class="p">|</span>    Business / Companies <span class="p">&amp;</span> Firms   <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>            Plasma Uric Acid            <span class="p">|</span>   Academic <span class="p">&amp;</span> Science / Chemistry  <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>            Pick Up Artists             <span class="p">|</span>          Community / Art          <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>    Pharos University in Alexandria     <span class="p">|</span> Academic <span class="p">&amp;</span> Science / Universities <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>   Peoples University of the Americas   <span class="p">|</span> Academic <span class="p">&amp;</span> Science / Universities <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>      Pediatric Urology Associates      <span class="p">|</span>        Medical / Pediatric        <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>     Payment Undertaking Agreement      <span class="p">|</span>    Miscellaneous / Unclassified   <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>  Partido de Unificación Anticomunista  <span class="p">|</span>     International / Guatemalan    <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span>           Paid Up Additions            <span class="p">|</span>    Miscellaneous / Unclassified   <span class="p">|</span>  <span class="m">1</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> PUA  <span class="p">|</span> Paul University, Awka - Anambra State  <span class="p">|</span>         Academic <span class="p">&amp;</span> Science        <span class="p">|</span>  <span class="m">0</span>   <span class="p">|</span>
</span></span><span class="line"><span class="cl">+------+----------------------------------------+-----------------------------------+------+</span></span></code></pre>
</div>
<p>有查股票的:</p>
<p><figure><a class="lightgallery" href="/img/2020-09-20-restrain-yourself/5.png" title="stock" data-thumbnail="/img/2020-09-20-restrain-yourself/5.png" data-sub-html="<h2>命令行炒股</h2><p>stock</p>"><img  loading="lazy" src='/img/2020-09-20-restrain-yourself/5.png'   alt="stock"  ></a><figcaption class="image-caption">命令行炒股</figcaption>
</figure></p>
<p>有查 IP 地址的:</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    
    tw-flex 
    tw-flex-row
    tw-flex-1 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw-mx-2 
        tw-flex
        tw-flex-row
        tw-flex-1"
      aria-hidden="true">
          <div class="group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></div>
          <p class="tw-select-none !tw-my-1">sh</p>
      </button>

   <div class="tw-flex">
      <button 
        class="
          line-number-button
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.show-line-numbers]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw-select-none 
          tw-mx-2 
          tw-hidden 
          group-[.is-open]:tw-block 
          group-[.is-wrap]:tw-text-fgColor-link 
          print:!tw-hidden" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw-select-none
          tw-mx-2 
          tw-hidden
          group-[.is-open]:tw-block
          hover:tw-text-fgColor-link 
          print:!tw-hidden"
        title="Copy code">
          <span class="copy-icon tw-block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw-hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw-select-none 
          tw-mx-2 
          tw-block 
          group-[.is-open]:tw-hidden 
          print:!tw-hidden" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw-block tw-m-0 tw-p-0"><code 
    id="codeblock-id-4" 
    class="
      chroma 
      !tw-block 
      tw-p-0
      tw-m-0
      tw-transition-[max-height] 
      tw-duration-500 
      tw-ease-in-out 
      group-[.is-closed]:!tw-max-h-0 
      group-[.is-wrap]:tw-text-wrap
      tw-overflow-y-hidden
      tw-overflow-x-auto
      tw-scrollbar-thin
      "><span class="line"><span class="cl">$ iplocate.py --on 1.1.1.1
</span></span><span class="line"><span class="cl">&gt;&gt;&gt;&gt;&gt;&gt; results <span class="k">for</span> 1.1.1.1 <span class="o">&lt;&lt;&lt;&lt;&lt;&lt;</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>*<span class="o">]</span> GeoLite : 澳大利亚<span class="o">(</span>AU<span class="o">)</span> - None
</span></span><span class="line"><span class="cl"><span class="o">[</span>*<span class="o">]</span> Kn0007  : CLOUDFLARE.COMCLOUDFLARE.COM
</span></span><span class="line"><span class="cl"><span class="o">[</span>*<span class="o">]</span> DBIP    : OC<span class="o">(</span>Oceania<span class="o">)</span>,AU<span class="o">(</span>Australia<span class="o">)</span> New South Wales, Sydney
</span></span><span class="line"><span class="cl"><span class="o">[</span>*<span class="o">]</span> Tencent : 澳大利亚 code<span class="o">(</span>-1<span class="o">)</span> lnglat<span class="o">(</span>149.1333,-35.2667<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>*<span class="o">]</span> IPIP    : <span class="o">[</span><span class="s2">&#34;CLOUDFLARE.COM&#34;</span>,<span class="s2">&#34;&#34;</span>,<span class="s2">&#34;&#34;</span>,<span class="s2">&#34;&#34;</span>,<span class="s2">&#34;&#34;</span><span class="o">]</span></span></span></code></pre>
</div>
<p>复杂一点的还有代理池管理工具，书签管理工具等等:</p>
<p><figure><a class="lightgallery" href="/img/2020-09-20-restrain-yourself/6.png" title="proxy" data-thumbnail="/img/2020-09-20-restrain-yourself/6.png" data-sub-html="<h2>代理池管理</h2><p>proxy</p>"><img  loading="lazy" src='/img/2020-09-20-restrain-yourself/6.png'   alt="proxy"  ></a><figcaption class="image-caption">代理池管理</figcaption>
</figure></p>
<p>有些小工具就是三下五除二就弄好了，但是有些就颇花了些时间。要说有没有必要，其实很多都没必要，想要开车并不表示需要自己造轮子。原型开发的过程还是很有趣的，但是其中有许多项目做完之后也就爽那么一下，然后就很长时间都没用过。</p>
<p>为了避免这种做无用功的尴尬，重要的是管理好自己的想法。对于时不时冒出来的 idea 可以先记录下来，到周末或者某个固定时间再进行排序，评估哪些可以做、需要做，哪些可以借助已有的轮子。站在巨人的肩膀上，而不是盲目追求写代码的快感。</p>
<p>曾经的想法是**&ldquo;因为我可以做，所以我就去做&rdquo;**，但重要的是管理好自己的精力和时间。学习也是一样，各种新概念层出不穷，开始学习之前需要先评估这究竟是不是你需要的，而不是因为看起来很热门就去投入。</p>
<p><strong>Be curious , but don&rsquo;t get drown.</strong></p>
<h1 id="关于白嫖" class="headerLink">
    <a href="#%e5%85%b3%e4%ba%8e%e7%99%bd%e5%ab%96" class="header-mark"></a>关于白嫖</h1><p>在迁移博客的时候发现 Chrome 新版本对于 https 站点中的所有 HTTP 资源都拒绝加载了，导致以前七牛 CDN 上的图片都无法显示，而七牛的 HTTPS 流量又是收费的，所以我决定换一个图床。为了找一个新的 HTTPS 免费图床，我翻了很多记录，发现很多免费站点都已经无法访问了，最终是选择使用某个博客平台的图片上传功能，为了批量上传还分析了该平台的验签和加密算法。</p>
<p>虽然最终目标实现了，但我也耗费了大半天的时间。都是传统的白嫖思想在作祟，因为从小习惯了免费。免费的聊天工具，免费的游戏，免费的操作系统，免费的杀毒软件，……这其实完全没有道理。如果一个东西做的很好，但是完全不赚钱，那么开发者是否还会投入那么多精力去维护呢？一腔热情投入开源工作，还要面对各种小白的挑刺以及伸手党的催促，个中滋味只有经历过才能体会到吧。</p>
<p>我们花几百块钱吃一顿饭觉得合情合理，但是花几十块钱购买在线服务或者软件就踌躇不决。但是说到底，白嫖终究不是长久之计。一个免费 CDN 需要在流量和速度上进行限制，一个免费的云服务器不会提供可用性保证，一个免费的图床可能说挂就挂，能在下线前告诉你一声已经仁至义尽了。</p>
<p>白嫖在线的服务需要自己承担稳定性和迁移风险，白嫖本地应用需要忍受广告和推送，这世上本就没有免费的午餐。如果上天能给我个再来一次的机会，我想说:</p>
<p><img class="tw-inline" loading="lazy" src='/img/2020-09-20-restrain-yourself/7.png'   alt="shutup"  ></p>
<p>最近看到一篇新闻感觉很有意思，微信推出<code>看一看</code>、<code>小视频</code>等功能，不是因为用户需要，而是面对头条对 <strong>用户时间</strong> 的蚕食感到不安 —— 用户每天花在微信的时间从 X 小时下降到了 Y 小时，而在头条系产品中投入的时间从 M 小时增加到了 N 小时。第一次对&quot;时间就是金钱&quot;有了别样的认识。</p>
<p><strong>你以为你白嫖赚到了，其实最后被嫖的是你自己。</strong></p>]]></description>
</item><item>
    <title>漫谈逆向工程</title>
    <link>https://evilpan.com/2020/03/08/reverse-engineering/</link>
    <pubDate>Sun, 08 Mar 2020 22:40:00 &#43;0800</pubDate><author>
        <name>evilpan</name>
    </author><guid>https://evilpan.com/2020/03/08/reverse-engineering/</guid>
    <description><![CDATA[<p>谈谈我对逆向工程的一些理解和感悟。</p>
<h1 id="引言" class="headerLink">
    <a href="#%e5%bc%95%e8%a8%80" class="header-mark"></a>引言</h1><p>逆向工程，原名Reverse Engineering，简称RE。关于其书面介绍我就不复制粘贴百度百科了，简而言之就是从发布的产品中反向分析其程序逻辑和算法——基于各种目的。</p>
<p>准确地说，逆向工程包括软件逆向工程——即本文所讨论的，也包括硬件逆向工程。那么硬件逆向是怎么做的呢？据我所知，我国的芯片设计水平普遍比国外落后10年。当国外厂商已经成功流片量产X纳米的芯片时候，我们还在XX纳米的研发和难点攻关中挣扎。挣扎的过程之一就是芯片逆向。</p>
<p>一般从代理买到量产芯片后，第一步就是溶解外部封层，使用电子显微镜对电路进行拍摄，俗称拍片；第二步是使用特定工具软件（也是国外的）对照片进行切分，通过人力对自动生成的连线进行修复；第三步是将修复的连线还原成数字电路，再由IC逻辑工程师进行进一步修复；最后组合不同模块的门级电路，还原成硬件描述语言VHDL或者Verilog。之后就和正常的流程一样，开发、测试、模拟、仿真、流片……</p>
<p><img class="tw-inline" loading="lazy" src='/img/2020-03-08-reverse-engineering/3.png'   alt="ALU"  ></p>
<p>扯远了，还是回到主题上来。硬件逆向的成本动辄成百上千万，没有纳税人的支持是玩不起的。但是软件逆向不同，只要一个智力正常的人，研究一两个月，也能上XX破解论坛上分享他们的破解成果了。</p>
<p>这也引出了一个问题，当我们在谈论逆向的时候，我们在谈论的是什么？</p>
<h1 id="软件逆向" class="headerLink">
    <a href="#%e8%bd%af%e4%bb%b6%e9%80%86%e5%90%91" class="header-mark"></a>软件逆向</h1><p>二进制逆向就是<code>IDA-Pro + F5</code>一把梭吗？Java逆向就是<code>JADX</code>一把梭吗？很多接触过逆向的新手都知道不是，他们会跳出来反驳，夹杂着一些<code>X86/ARM/MIPS Assembly</code>、<code>Smali</code>、<code>XYZ IR</code>等等让人不明觉厉的词汇。虽然听不懂，但我们也知道他们想表达什么：逆向是一门牵涉甚广的领域。</p>
<p>的确，如果HTML、CSS这些领域是“单关节运动”，那么逆向就是“多关节运动”。前段时间有些使用node写前后端的开发者喜欢自称“全栈工程师”，要按照我的说法，逆向工程师才是当之无愧的全栈。为什么？来看看一个逆向工程师所应该具备的部分技能：</p>
<ul>
<li>一定的软件开发能力，熟悉数据结构、算法</li>
<li>了解各种编程语言，熟悉编译原理</li>
<li>熟悉计算机基本原理、操作系统、编译器、链接器</li>
<li>熟悉对应平台或者虚拟机的汇编语言(机器码)、中间语言(字节码）</li>
<li>&hellip;</li>
</ul>
<p>一个好的逆向工程师，通常也是个不错的开发者。即便现在有各种收费或免费的反编译器，也需要逆向工程师对代码进行梳理、分析、审计。这就意味着逆向者需要站在比开发者更高的角度去审视，甚至比开发者更加理解他们的代码。……</p>
<h1 id="关于初衷" class="headerLink">
    <a href="#%e5%85%b3%e4%ba%8e%e5%88%9d%e8%a1%b7" class="header-mark"></a>关于初衷</h1><p>搞逆向这么麻烦，要懂这个，要懂那个，直接劝退了很大一波人。但其实这些只是“术”而已，实际工作中只需要用到一部分子集，甚至只要学会使用商业工具也能干活儿了。在我看来，逆向工程师的核心还是——<code>强烈的好奇心</code>。</p>
<p>或者说，这是大部分网络安全人员(黑客)所具备的特质。因为好奇某个商业软件的功能，或者好奇某个病毒蠕虫的行为，才走向了这条逆向之路。</p>
<p>逆向的过程是枯燥的。与其说逆向是技术活，在我看来更多是体力活。尤其是在分析大型软件的时候，每天改变量名，改函数名，分析树状的调用路径，……很容易让人感到厌烦。</p>
<p>但是对于抱有好奇心的人而言，逆向应该是快乐的。每分析出一个软件或者函数的行为，就仿佛侦探找到关键线索或证据一样兴奋。隐藏的路径越深，知道的人就越少，那么被藏起来的东西也就越有价值。</p>
<h1 id="关于快乐" class="headerLink">
    <a href="#%e5%85%b3%e4%ba%8e%e5%bf%ab%e4%b9%90" class="header-mark"></a>关于快乐</h1><p>逆向应该是快乐的，但很多人不想让你快乐。于是有了各种符号加壳、混淆、加密、解释执行(虚拟机)等应用增强方案，来提高逆向工程的难度。这通常是企业中端安全工程师的杰作，或者是使用了安全公司的通用安全加固方案。</p>
<p>所谓的逆向混淆，只有在别人不知道你的方法时才有价值。对于通用的加固，所面临的挑战者甚多，其内部实现很可能已经被扒了个底朝天；而对于企业自研的方案，又通常因为太low而被简单绕过。所以，想让逆向工程师不快乐的人有时候成功了，但是大部分时候还是在逆向工程师手下败下阵来。用一朋友的话来说就是：“程序在我的设备、我的环境里运行，难道它还能上天？”</p>
<h1 id="关于现状" class="headerLink">
    <a href="#%e5%85%b3%e4%ba%8e%e7%8e%b0%e7%8a%b6" class="header-mark"></a>关于现状</h1><p>应用程序是不能上天，但是逆向工程师也很难上天。记得柯南里有一句话让我印象深刻——“如果怪盗是富有创造力的艺术家，那么侦探充其量只是吹毛求疵的评论家”。逆向工程做的大部分都是破坏性的工作，而不像开发者那样带来正面价值。</p>
<p>目前社区中做逆向的大多是出于解谜(CTF)、软件破解、游戏外挂等，即便是专门讨论逆向的安全论坛中，对技术细节的探讨也寥寥无几，更多是炫耀和分享自己的“成果”。天下熙熙，皆为利来，天下攘攘，皆为利往，除了闷声发大财地以搞逆向赚钱的工作室外，公开分享的也就只能是为名了。</p>
<p>那么职业做逆向的情况又如何呢？专门做逆向的正经岗位应该是恶意软件分析了，衍生出的团队在商业环境中突出PR宣传安全产品或者情报能力。其他小公司里招聘做逆向的人，要么是分析竞争对手，要么围绕高流量软件的去进行分析、破解、换皮、刷粉养号等等，是在违法犯罪的边缘来回试探。</p>
<p>专门做逆向的情况不多，但是将其作为一门技能去掌握的人也不少。我自己本身也不是专门做逆向的，因为工作需要才去对其进行了解。除了开源软件，也有越来越多闭源软件的漏洞被暴露出来，你不去挖别人自然会去挖。就拿安卓每个月的安全通告来说，带星号的漏洞简直不要太多。</p>
<p><img class="tw-inline" loading="lazy" src='/img/2020-03-08-reverse-engineering/2.png'   alt="cve"  ></p>
<blockquote>
  <p>图：Android Security Bulletin—March 2020</p>
</blockquote><h1 id="正面价值" class="headerLink">
    <a href="#%e6%ad%a3%e9%9d%a2%e4%bb%b7%e5%80%bc" class="header-mark"></a>正面价值</h1><p>逆向也有作为正面案例出现。比如对于一些开发者不再维护的软件，出现各种原因无法使用时，通常就有正义的逆向工程师去尝试解决困难，之前就有这么一个例子：</p>
<p><img class="tw-inline" loading="lazy" src='/img/2020-03-08-reverse-engineering/4.png'   alt="help"  ></p>
<p>还有比较经典的就是Linux系统中的著名的开源驱动<code>nouveau</code>部分功能就是通过逆向英伟达的驱动而开发的，因为英伟达出于各种保护的原因不愿意与开源社区合作而闹了诸多矛盾，这也是下面这张图片的根源。</p>
<p><img class="tw-inline" loading="lazy" src='/img/2020-03-08-reverse-engineering/1.png'   alt="Fuck Nvidia"  ></p>
<p>总而言之，技术本身无对错好坏之分，关键是看使用的人以及使用的目的。</p>
<h1 id="后记" class="headerLink">
    <a href="#%e5%90%8e%e8%ae%b0" class="header-mark"></a>后记</h1><p>回想起以前在研究高通可信执行环境时，被<code>laginimaineb</code>的那篇博客<a href="http://bits-please.blogspot.com/2016/04/exploring-qualcomms-secure-execution.html" target="_blank" rel="noopener noreferrer">Exploring Qualcomm&rsquo;s Secure Execution Environment</a>给惊艳到了，大概那就是我心目中逆向大神该有的样子。那篇文章不是逆向某个特定的软件，也不是做了什么复杂的脱壳，而是将一种在未知环境中运行的未知格式程序就那么一字节一字节的分析出来。</p>
<p><img class="tw-inline" loading="lazy" src='/img/2020-03-08-reverse-engineering/0.png'   alt="qsee"  ></p>
<p>要知道当时TEE尤其是高通的QSEE，在内部是被严密保护的，网上可以说几乎没有相关信息可以参考。甚至作为开发者都要以企业名义签署严格的NDA才能拿到开发工具。要在这种环境去逆向、调试、挖漏洞看似不可能，但<code>laginimaineb</code>接下了这个挑战，而且还超额完成了(<a href="http://bits-please.blogspot.com/2016/06/trustzone-kernel-privilege-escalation.html" target="_blank" rel="noopener noreferrer">userspace -&gt; QSEE Kernel</a>)。他自己的说法是“For Fun”，我也相信他是“Fun”的。就是这样的人，让安全行业充满激情和热忱。</p>
<p>最后：</p>
<p>Stay Curious, Stay Exploring &amp;&amp; Happy Hacking!</p>]]></description>
</item></channel>
</rss>
