<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>技术杂谈与科普 on 嘴强黑客 /pbuff07</title><link>https://pbuff07.github.io/categories/%E6%8A%80%E6%9C%AF%E6%9D%82%E8%B0%88%E4%B8%8E%E7%A7%91%E6%99%AE/</link><description>Recent content in 技术杂谈与科普 on 嘴强黑客 /pbuff07</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 14 Feb 2025 14:00:00 +0800</lastBuildDate><atom:link href="https://pbuff07.github.io/categories/%E6%8A%80%E6%9C%AF%E6%9D%82%E8%B0%88%E4%B8%8E%E7%A7%91%E6%99%AE/index.xml" rel="self" type="application/rss+xml"/><item><title>Google/Firefox禁用某些端口</title><link>https://pbuff07.github.io/posts/2025-02-14-googlefirefox%E7%A6%81%E6%AD%A2%E8%AE%BF%E9%97%AE%E6%9F%90%E4%BA%9B%E7%AB%AF%E5%8F%A3/</link><pubDate>Fri, 14 Feb 2025 14:00:00 +0800</pubDate><guid>https://pbuff07.github.io/posts/2025-02-14-googlefirefox%E7%A6%81%E6%AD%A2%E8%AE%BF%E9%97%AE%E6%9F%90%E4%BA%9B%E7%AB%AF%E5%8F%A3/</guid><description>&lt;p&gt;因为浏览器内核和操作系统的不同，Google和Firefox都预设了一些端口禁止外部使用。比如访问 &lt;code&gt;http://IP:6666&lt;/code&gt; 端口会提示端口不安全，不允许使用。&lt;/p&gt;
&lt;p&gt;解决办法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;浏览器输入 &lt;code&gt;about:config&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;搜索 &lt;code&gt;network.security.ports.banned.override&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;点击右侧新建字符串&lt;/li&gt;
&lt;li&gt;填写禁止访问的端口，比如 &lt;code&gt;6666,6667&lt;/code&gt; 即可&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>UTF-16LE编码解析 AI-Generate</title><link>https://pbuff07.github.io/posts/2025-02-08-utf-16le%E7%BC%96%E7%A0%81-ai-generate/</link><pubDate>Sat, 08 Feb 2025 14:00:00 +0800</pubDate><guid>https://pbuff07.github.io/posts/2025-02-08-utf-16le%E7%BC%96%E7%A0%81-ai-generate/</guid><description>&lt;h2 id="utf-16编码概述"&gt;UTF-16编码概述&lt;/h2&gt;
&lt;p&gt;UTF-16（Unicode Transformation Format - 16-bit）是Unicode字符集的一种编码方式，使用16位（2字节）或32位（4字节）来表示一个Unicode字符。&lt;/p&gt;
&lt;h2 id="字节序说明"&gt;字节序说明&lt;/h2&gt;
&lt;p&gt;字节序（Endianness）是指多字节在内存中的存储顺序。&lt;/p&gt;
&lt;h3 id="大端序big-endianbe"&gt;大端序（Big Endian，BE）&lt;/h3&gt;
&lt;p&gt;高位字节存储在低地址，低位字节存储在高地址。&lt;/p&gt;
&lt;h3 id="小端序little-endianle"&gt;小端序（Little Endian，LE）&lt;/h3&gt;
&lt;p&gt;低位字节存储在低地址，高位字节存储在高地址。&lt;/p&gt;
&lt;h2 id="utf-16le编码特点"&gt;UTF-16LE编码特点&lt;/h2&gt;
&lt;p&gt;UTF-16LE采用小端序存储，即低位字节在前。&lt;/p&gt;
&lt;p&gt;以汉字&amp;quot;中&amp;quot;为例，其Unicode码点为U+4E2D：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;编码方式&lt;/th&gt;
 &lt;th&gt;字节序列&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;UTF-16BE&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;4E 2D&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UTF-16LE&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;2D 4E&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="实际应用场景"&gt;实际应用场景&lt;/h2&gt;
&lt;h3 id="windows系统"&gt;Windows系统&lt;/h3&gt;
&lt;p&gt;Windows API和内部大量使用UTF-16LE编码，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;注册表键值&lt;/li&gt;
&lt;li&gt;文件路径&lt;/li&gt;
&lt;li&gt;API函数参数&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="python代码示例"&gt;Python代码示例&lt;/h3&gt;
&lt;p&gt;处理Windows导出文件时需要指定正确的编码：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 正确的读取方式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;with&lt;/span&gt; open(&lt;span style="color:#e6db74"&gt;&amp;#34;export.reg&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;r&amp;#34;&lt;/span&gt;, encoding&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;utf-16-le&amp;#34;&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; f:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; content &lt;span style="color:#f92672"&gt;=&lt;/span&gt; f&lt;span style="color:#f92672"&gt;.&lt;/span&gt;read()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 处理BOM（如果存在）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; content&lt;span style="color:#f92672"&gt;.&lt;/span&gt;startswith(&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\ufeff&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; content &lt;span style="color:#f92672"&gt;=&lt;/span&gt; content[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;:]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="内存分析"&gt;内存分析&lt;/h3&gt;
&lt;p&gt;在逆向工程或内存分析中，Windows进程的字符串通常是UTF-16LE编码，需要正确解析才能获取可读内容。&lt;/p&gt;
&lt;h2 id="bombyte-order-mark"&gt;BOM（Byte Order Mark）&lt;/h2&gt;
&lt;p&gt;UTF-16文件通常以BOM开头，用于标识字节序：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;编码&lt;/th&gt;
 &lt;th&gt;BOM&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;UTF-16LE&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;FF FE&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UTF-16BE&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;FE FF&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="注意事项"&gt;注意事项&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;编码识别错误&lt;/strong&gt;：文件读取时需明确指定编码，否则会出现乱码&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BOM处理&lt;/strong&gt;：某些编程语言读取UTF-16文件时会保留BOM，需手动去除&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨平台兼容&lt;/strong&gt;：UTF-16LE主要用于Windows环境，Linux环境更常用UTF-8&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;UTF-16LE是Unicode的一种编码实现，采用小端字节序。在Windows系统开发和逆向分析中经常遇到，处理时需要注意字节序和BOM问题，以确保正确解析字符内容。&lt;/p&gt;</description></item><item><title>摩托车发动机制动</title><link>https://pbuff07.github.io/posts/2025-01-01-%E4%BD%8E%E9%80%9F%E6%A1%A3%E6%97%B6%E5%8F%91%E5%8A%A8%E6%9C%BA%E5%88%B6%E5%8A%A8%E6%95%88%E6%9E%9C%E4%B8%BA%E4%BB%80%E4%B9%88%E6%9B%B4%E6%98%8E%E6%98%BE/</link><pubDate>Wed, 01 Jan 2025 14:00:00 +0800</pubDate><guid>https://pbuff07.github.io/posts/2025-01-01-%E4%BD%8E%E9%80%9F%E6%A1%A3%E6%97%B6%E5%8F%91%E5%8A%A8%E6%9C%BA%E5%88%B6%E5%8A%A8%E6%95%88%E6%9E%9C%E4%B8%BA%E4%BB%80%E4%B9%88%E6%9B%B4%E6%98%8E%E6%98%BE/</guid><description>&lt;p&gt;在骑摩托车的时候，低速档的发动机制动效果比高档明显，为什么？&lt;/p&gt;
&lt;p&gt;在探讨之前，先简单了解一下几个关键概念：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;发动机转速&lt;/strong&gt;：简单来说，就是发动机每分钟转动的次数。转速越高，发动机运转越快。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;扭矩&lt;/strong&gt;：扭矩是发动机输出的旋转力，影响着摩托车加速和爬坡的能力。摩托车一般是通过牺牲转速换取更强的扭矩。比如最简单的例子就是自行车起步的时候调节前轮盘为小齿后盘为大齿，这样可以快速频繁发力让车跑起来（这就是动力换扭矩），当速度起来之后前轮盘逐渐换大齿了，因为不需要太多的扭矩了。所以摩托车在低速时，扭矩输出较高。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;离合器&lt;/strong&gt;：离合器的作用是连接或断开发动机和车轮之间的动力传递。它允许你在换档时平稳地控制动力的传递。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;发动机通过离合器将动力传递给车轮，转速越高，发动机输出的动力和牵引力也越强。而低档时，发动机转速较高，扭矩输出则更大，导致了发动机制动时效果更明显。&lt;/p&gt;
&lt;p&gt;低速档发动机制动能力更强主要有几个原因，我觉得2和3时核心点。&lt;/p&gt;
&lt;h6 id="1-发动机转速较高"&gt;1. 发动机转速较高&lt;/h6&gt;
&lt;p&gt;在低速档时，虽然车速较低，但发动机的转速比较高。高转速意味着发动机内部的气体压缩阻力也较大，这就带来了更强的发动机制动效果。简单说，发动机运转得越快，它&amp;quot;拖住&amp;quot;车轮的效果就越明显。&lt;/p&gt;
&lt;h6 id="2-低档的传动比和扭矩"&gt;2. 低档的传动比和扭矩&lt;/h6&gt;
&lt;p&gt;低档时，摩托车的传动比比较低，也就是说，车轮转动一圈，发动机要转动更多的圈数。这个传动比会让发动机输出更多的扭矩，同时在松开油门时，发动机的转速下降得更慢。也就是说，车轮的转速较慢，发动机的转速却较高，从而产生更强的发动机制动。&lt;/p&gt;
&lt;h6 id="3-离合器的作用"&gt;3. 离合器的作用&lt;/h6&gt;
&lt;p&gt;当你换到低档并松开油门时，离合器会让发动机和车轮紧密相连。这时，车轮的转速要比发动机转速慢，导致发动机被车轮&amp;quot;拖慢&amp;quot;，从而加强了发动机制动。低档时，由于离合器连接的紧密，发动机的转速差异更大，这就增强了发动机制动效果。&lt;/p&gt;
&lt;h6 id="4-牺牲转速换取扭矩"&gt;4. 牺牲转速换取扭矩&lt;/h6&gt;
&lt;p&gt;低档不仅让发动机的转速更高，它的扭矩也相应增大。这样，在不加油时，发动机的压缩和摩擦力会更强，导致车轮减速的效果更为显著。总的来说，低档时的较高扭矩和较慢车轮转速配合起来，就让发动机制动效果更为明显。&lt;/p&gt;</description></item><item><title>挖矿怎么赚钱？</title><link>https://pbuff07.github.io/posts/2023-02-11-%E6%8C%96%E7%9F%BF%E8%B5%9A%E9%92%B1%E7%9A%84%E5%8E%9F%E7%90%86/</link><pubDate>Sat, 11 Feb 2023 14:00:00 +0800</pubDate><guid>https://pbuff07.github.io/posts/2023-02-11-%E6%8C%96%E7%9F%BF%E8%B5%9A%E9%92%B1%E7%9A%84%E5%8E%9F%E7%90%86/</guid><description>&lt;h1 id="挖矿是怎么赚钱的"&gt;挖矿是怎么赚钱的？&lt;/h1&gt;
&lt;p&gt;或者说挖矿到底是一件干什么的事情，老是听说挖矿赚钱、挖矿病毒、挖矿是淘汰类产业，但并不是很清楚挖矿到底是一件什么样的工，。以比特币挖矿为例来认识一下挖矿。&lt;/p&gt;
&lt;h2 id="一些基本概念"&gt;一些基本概念&lt;/h2&gt;
&lt;p&gt;P2P网络&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;一般我们认为网络是由客户端和服务端组成，客户端向服务端请求资源，服务端响应客户端的请求完成闭环。但P2P网络将互联网中的每台计算机既当作客户端也当作服务端，即每台计算机可以向其他计算机发起请求也可作为服务端响应其他计算的请求。&lt;/p&gt;
&lt;p&gt;这样做最明显的优势就是资源的高效共享和去中心化。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;PoW证明&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Proof of Work 工作量证明，是挖矿中的术语，指某个矿工为了赚取比特币而付出的计算资源的表现形式。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;coinbase&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;无输入只有输出的铸币地址，可以理解成矿工完成某一区块挖矿的记录&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="挖矿过程"&gt;挖矿过程&lt;/h2&gt;
&lt;p&gt;挖矿可以理解成一大群人（P2P网络中的矿工）计算某个复杂的数学方程式（sha2算法），出题人设置了这个数学方程式的一些标准（难度值），只有符合出题人的标准后才能提交答案进行验证，验证通过了就可以获得比特币，同时这一大群人又将重新对新的数学方程式进行计算，不断循环。&lt;/p&gt;
&lt;p&gt;这个过程是去中心的话，因为参与者通过P2P网络的形式，这种形式本身就是去中心化的表现，所以不难理解比特币是一种去中心化货币。&lt;/p&gt;
&lt;p&gt;矿工进行挖矿活动中解决的数学方程式就是sha2算法，如下图所示矿工首先确定sha2算法中的Prev Hash，Merkle Hash，Timestamp，bits，然后不断的变换Nonce的值来计算&amp;quot;出题人&amp;quot;给出的&amp;quot;标准&amp;quot;，比如计算结果中需要包含8个0或者18个0。&lt;/p&gt;
&lt;p&gt;上述的&amp;quot;标准&amp;quot;不是一成不变的，反之他会动态调整。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;难度值需要保证区块（被计算的数学方程式）10分钟产生一次，而难度值在2016个区块后进行调整一次。&lt;/p&gt;
&lt;p&gt;如果区块的生成时间小于10分钟，说明全网算力增加，难度需增大&lt;/p&gt;
&lt;p&gt;如果区块的生成时间大于10分钟，说明全网算力降低，难度需降低&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;共识算法&lt;/p&gt;
&lt;p&gt;存在一种情况是两个矿工或者多个矿工同时完成了一个数学方程式的计算（区块），那么谁将获得这一轮的奖励呢？&lt;/p&gt;
&lt;p&gt;挖矿过程是允许在同一个区块上出现分叉（fork）的情况，如下图对3号区块挖矿分出来绿色4和蓝色4，这两个区块都是可以继续挖矿的，但是这两个区块肯定有一个会优先完成，那么未完成的那个就会被废弃。&lt;/p&gt;
&lt;p&gt;假设下图中绿色4和蓝色4同时完成了对3号区块的挖矿，同时5号完成了绿色4号区块的挖矿，那么蓝色4区块将被废弃，因为比特币采用最长链的共识算法。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果蓝色4号区块被废弃，那在蓝色4上产生的交易记录无法在主链上（下图情况中是绿色4号链）被确认，那么被废弃的蓝色4号链上产生的交易记录会回到内存池，等待矿工打包到未来的区块中并终在主链上被确认。&lt;/p&gt;
&lt;p&gt;一般认为经过6个区块确认的交易几乎不可能被修改。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="谁发现的第一个比特币"&gt;谁发现的第一个比特币？&lt;/h2&gt;
&lt;p&gt;中本聪（一个日裔美国人）开创比特币对等网络开源用户群节点和散列函数系统，他发行了最初的50个比特币。&lt;/p&gt;
&lt;h2 id="参考链接"&gt;参考链接&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://liaoxuefeng.com/books/blockchain/bitcoin/mining/index.html"&gt;https://liaoxuefeng.com/books/blockchain/bitcoin/mining/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://zh.wikipedia.org/wiki/%E6%8C%96%E7%A4%A6_(%E6%95%B8%E4%BD%8D%E8%B2%A8%E5%B9%A3)"&gt;https://zh.wikipedia.org/wiki/%E6%8C%96%E7%A4%A6_(%E6%95%B8%E4%BD%8D%E8%B2%A8%E5%B9%A3)&lt;/a&gt;&lt;/p&gt;</description></item><item><title>CGI后缀文件</title><link>https://pbuff07.github.io/posts/2022-08-30-cgi%E5%90%8E%E7%BC%80%E6%96%87%E4%BB%B6/</link><pubDate>Tue, 30 Aug 2022 14:00:00 +0800</pubDate><guid>https://pbuff07.github.io/posts/2022-08-30-cgi%E5%90%8E%E7%BC%80%E6%96%87%E4%BB%B6/</guid><description>&lt;p&gt;cgi后缀文件，全称是common gateway interface（通用网关接口）。&lt;/p&gt;
&lt;p&gt;我的理解：是一种可以用任何语言实现接口功能的网关接口，比如我有一个Python程序，需要一个单独的功能在计算机本机上做一些处理，我可以选择使用Python的OS模块调用系统函数实现，我也可以有一个&amp;quot;引擎&amp;quot;支持我使用Shell脚本进行处理然后将结果返回给&amp;quot;引擎&amp;quot;并同步到Python程序？&lt;/p&gt;
&lt;p&gt;那么cgi的运行是否需要类似&amp;quot;引擎&amp;quot;一样的东西？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;cgi的标准解释&lt;/strong&gt;：CGI 是一种标准协议，用于在 Web 服务器和外部程序之间进行通信。它定义了 Web 服务器如何将客户端请求（通常通过 HTTP 协议）传递给一个外部程序（可以用任何编程语言编写，比如 Python、Shell、Perl、C 等），以及该程序如何将处理结果返回给 Web 服务器，最终再传递给客户端。&lt;/p&gt;
&lt;p&gt;总结：cgi是Web服务器和外部程序之间的桥梁。&lt;/p&gt;
&lt;p&gt;如果服务对象是Web服务器的话，那上面关于&amp;quot;引擎&amp;quot;的问题就可以解决了，只要Web服务器有路由支持调用cgi文件即可（比如cgi-bin目录），调用cgi程序执行完成之后返回结果给Web服务器。&lt;/p&gt;</description></item></channel></rss>