<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>朝昆Blog</title><description>Java开发 · AI实践 · 逆向分析</description><link>https://blog.ciyuanai.org/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>6.9.4</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年5月5日 23:26:55</lastBuildDate><item><title>一行代码接入 GoatCounter：给网站加上轻量统计分析</title><link>https://blog.ciyuanai.org/posts/open-source/goatcounter-one-line-web-analytics/</link><guid isPermaLink="true">https://blog.ciyuanai.org/posts/open-source/goatcounter-one-line-web-analytics/</guid><description>GoatCounter 是一个开源、隐私友好的网站统计工具。本文讲解如何用一个 script 标签完成接入，并补充官网地址、后台查看、常见排查、SPA 与自托管说明。</description><pubDate>Tue, 05 May 2026 15:20:00 GMT</pubDate><content:encoded>&lt;p&gt;如果你只是想知道“我的网站有没有人看”“哪些文章更受欢迎”“访问主要来自哪里”，其实不一定要上复杂的统计平台。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/arp242/goatcounter&quot; target=&quot;_blank&quot;&gt;GoatCounter&lt;/a&gt; 是一个开源的网站统计分析工具，定位很清楚：轻量、简单、隐私友好。它的官网地址是 &lt;a href=&quot;https://www.goatcounter.com/&quot; target=&quot;_blank&quot;&gt;https://www.goatcounter.com/&lt;/a&gt;，可以使用官方托管服务，也可以自己部署；对个人博客、小型产品页、文档站来说，最吸引人的地方是接入成本非常低，低到只需要往页面里放一行代码。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;GoatCounter 是什么&lt;a href=&quot;#goatcounter-是什么&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GoatCounter 是一个开源 Web Analytics 平台，可以作为 Google Analytics、Matomo 这类工具的轻量替代品。官方仓库里对它的描述很直接：它可以使用免费的托管服务，也可以自托管；目标是提供容易理解、尊重隐私的网站统计。&lt;/p&gt;&lt;p&gt;它适合这类场景：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;个人博客想知道文章访问情况&lt;/li&gt;
&lt;li&gt;开源项目文档想看页面热度&lt;/li&gt;
&lt;li&gt;小型产品想了解来源、设备、浏览器等基础数据&lt;/li&gt;
&lt;li&gt;不想引入复杂埋点系统，也不想弹 Cookie 同意横幅&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;GoatCounter 默认不使用 Cookie，也不会把用户当成一个可跨站追踪的身份来记录。它更像是在回答“这个页面被访问了多少次、从哪里来、大概是什么设备”，而不是“这个具体用户是谁、之后又去了哪里”。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;一行代码接入&lt;a href=&quot;#一行代码接入&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先注册一个 GoatCounter 站点，拿到你的站点代号。假设你的代号是 &lt;code&gt;MYCODE&lt;/code&gt;，那么统计后台地址通常就是：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;https://MYCODE.goatcounter.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;接下来，把下面这行代码放到网站的 HTML 里，通常放在 &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; 前即可：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-goatcounter&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://MYCODE.goatcounter.com/count&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;//gc.zgo.at/count.js&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;把 &lt;code&gt;MYCODE&lt;/code&gt; 换成你自己的站点代号，部署上线后访问页面，GoatCounter 就会开始记录访问数据。&lt;/p&gt;&lt;p&gt;如果你的网站使用 Astro、VitePress、Hexo、Hugo 或其他静态站点生成器，本质上也一样：找到全站 Layout、主题模板或自定义 head/body 注入位置，把这行脚本放进去即可。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;在 Astro 博客里怎么放&lt;a href=&quot;#在-astro-博客里怎么放&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以 Astro 项目为例，通常会有一个全局布局文件，比如：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;src/layouts/Layout.astro&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;可以在页面底部加入：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-goatcounter&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://MYCODE.goatcounter.com/count&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;//gc.zgo.at/count.js&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;如果你只想在线上环境统计，不想把本地开发访问也记进去，可以在加载前加一个简单判断：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hostname&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;localhost&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;||&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hostname&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;127.0.0.1&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;goatcounter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;no_onload&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt; };&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-goatcounter&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://MYCODE.goatcounter.com/count&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;//gc.zgo.at/count.js&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;官方文档也说明，&lt;code&gt;localhost&lt;/code&gt; 和常见私有网络请求默认会被忽略；这里额外加一层判断，主要是让行为更直观。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;去哪里看统计&lt;a href=&quot;#去哪里看统计&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;访问你的 GoatCounter 后台：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;https://MYCODE.goatcounter.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;登录后可以看到这些基础数据：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;页面访问量和访问趋势&lt;/li&gt;
&lt;li&gt;热门路径，也就是哪些页面被看得最多&lt;/li&gt;
&lt;li&gt;Referrer 来源，比如搜索引擎、外链、直接访问&lt;/li&gt;
&lt;li&gt;浏览器、系统、屏幕宽度、语言和大致地区&lt;/li&gt;
&lt;li&gt;Campaign 参数，方便区分不同推广入口&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;对博客来说，我最常看的其实就两个：哪些文章有人读、入口来源是什么。前者可以反推内容方向，后者可以判断读者是从搜索、社媒、友链还是直接访问进来的。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;为什么说它隐私友好&lt;a href=&quot;#为什么说它隐私友好&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;很多统计工具的问题不在“统计”本身，而在它们会把统计做成跨站追踪、用户画像和广告系统的一部分。GoatCounter 的思路克制很多。&lt;/p&gt;&lt;p&gt;根据官方隐私说明，它主要存储的是聚合后的统计数据，例如某个页面在某一天有多少 Firefox 访问、某个屏幕宽度出现了多少次；这些数据之间不会再被拼接成单个用户画像。它也不在数据库里保存 IP 地址、完整 User-Agent 或浏览器里的 Cookie、本地存储标识。&lt;/p&gt;&lt;p&gt;这意味着你仍然能知道“哪些页面受欢迎”，但不会为了这个问题把访客变成一串长期可追踪的 ID。&lt;/p&gt;&lt;p&gt;当然，隐私合规从来不是一句“工具隐私友好”就能完全解决的事。如果你的网站面向特定地区、特定业务或有更高合规要求，仍然需要结合自己的实际情况确认法律和隐私政策。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;常见问题排查&lt;a href=&quot;#常见问题排查&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. 后台看不到数据&lt;a href=&quot;#1-后台看不到数据&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;官方文档提到，统计数据通常需要一点时间才会出现，另外广告拦截插件可能会拦截 &lt;code&gt;goatcounter.com&lt;/code&gt; 或 &lt;code&gt;gc.zgo.at&lt;/code&gt;。&lt;/p&gt;&lt;p&gt;可以按这个顺序检查：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;MYCODE&lt;/code&gt; 是否替换成了自己的站点代号&lt;/li&gt;
&lt;li&gt;页面源码里是否真的出现了这段 &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;浏览器 Network 面板里是否加载了 &lt;code&gt;count.js&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;是否有广告拦截插件拦截请求&lt;/li&gt;
&lt;li&gt;是否访问的是本地环境或私有网络地址&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;如果只是验证接入，可以先用无痕窗口或关闭广告拦截插件试一下。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 使用了 CSP&lt;a href=&quot;#2-使用了-csp&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;如果网站配置了 &lt;code&gt;Content-Security-Policy&lt;/code&gt;，需要允许加载 GoatCounter 脚本，并允许向统计接口发送请求：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;script-src  https://gc.zgo.at&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;connect-src https://MYCODE.goatcounter.com/count&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;否则脚本可能被浏览器安全策略直接拦掉。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. 单页应用路由不刷新&lt;a href=&quot;#3-单页应用路由不刷新&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;普通静态页面每次打开都会触发一次统计，但 SPA 的路由切换通常不会重新加载页面。GoatCounter 提供了 JavaScript API，可以在路由变化时手动调用：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;goatcounter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;no_onload&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt; };&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;hashchange&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; () {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;goatcounter&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;count&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;pathname&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hash&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-goatcounter&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://MYCODE.goatcounter.com/count&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;//gc.zgo.at/count.js&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;如果你用的是 Vue Router、React Router 或其他前端路由，可以把 &lt;code&gt;window.goatcounter.count()&lt;/code&gt; 放在路由切换后的钩子里。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;统计点击事件&lt;a href=&quot;#统计点击事件&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;除了页面访问，GoatCounter 也可以统计简单事件。比如你想知道有多少人点击了某个外链：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://example.com&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-goatcounter-click&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;ext-example&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;Example&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;这个能力适合统计下载按钮、外链跳转、赞助入口等轻量事件。它不是完整的行为分析系统，但对个人站点已经够用。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;托管服务还是自托管&lt;a href=&quot;#托管服务还是自托管&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GoatCounter 有两种用法：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;goatcounter.com&lt;/code&gt; 官方托管服务&lt;/li&gt;
&lt;li&gt;自己部署 GoatCounter 服务&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;个人博客建议先用官方托管服务，几分钟就能完成接入。等到你有更高的数据控制、内网部署或反广告拦截需求，再考虑自托管。&lt;/p&gt;&lt;p&gt;自托管也不复杂。GoatCounter 是 Go 写的，官方提供二进制和 Docker 方式；数据库可以使用 SQLite，也支持 PostgreSQL。小站点用 SQLite 通常已经足够。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;小结&lt;a href=&quot;#小结&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GoatCounter 最适合的不是“我要做一整套增长分析平台”，而是“我需要一个干净、简单、能回答基础问题的网站统计工具”。&lt;/p&gt;&lt;p&gt;它的接入方式足够简单：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-goatcounter&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://MYCODE.goatcounter.com/count&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;//gc.zgo.at/count.js&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;把这行代码放进网站，替换自己的 &lt;code&gt;MYCODE&lt;/code&gt;，上线后就能看到访问统计。&lt;/p&gt;&lt;p&gt;对个人博客来说，这种克制反而是优点：不需要复杂后台，不需要一堆埋点计划，也不需要为了看几篇文章的访问量引入沉重系统。一个脚本，一块简单的统计面板，就够了。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>App逆向环境搭建：抓取 APK HTTPS 包</title><link>https://blog.ciyuanai.org/posts/reverse/app-reverse-env-https-capture/</link><guid isPermaLink="true">https://blog.ciyuanai.org/posts/reverse/app-reverse-env-https-capture/</guid><description>按完整实操流程搭建 Android 模拟器抓包环境，使用 Android Studio、Charles、Magisk 和 MoveCertificate 抓取 APK HTTPS 包。</description><pubDate>Tue, 05 May 2026 13:30:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;免责声明&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;本教程仅供学习和研究使用，请勿用于任何非法用途。对他人应用进行逆向分析时，应遵守相关法律法规，尊重开发者权益，未经授权不得进行恶意篡改或侵犯用户隐私。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Android 逆向工程是指通过分析 APK 文件的代码、资源、网络通信等，理解其内部实现逻辑，甚至修改其行为的技术。常见的应用场景包括：协议分析、去广告、漏洞挖掘、竞品研究等。本文按完整环境搭建流程，带你在本地搭建一套 App 逆向环境，并抓取手机 APK 的 HTTPS 包。&lt;/p&gt;
&lt;p&gt;我本地环境是 Mac M4 pro 芯片，这里采用 Android Studio 自带的 AVD 模拟器。你如果有条件，也可以直接使用真实手机；Windows 用户则可以考虑雷电、夜神等模拟器。本文主要围绕 Android Studio 模拟器展开。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;环境说明&lt;a href=&quot;#环境说明&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;宿主机：macOS / Windows / Linux&lt;/li&gt;
&lt;li&gt;模拟器：Android Studio 自带 AVD（Android Virtual Device）以及 &lt;code&gt;adb&lt;/code&gt;（Android Debug Bridge）&lt;/li&gt;
&lt;li&gt;目标 Android 版本：Android 16（API 36）&lt;code&gt;arm64&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;抓包工具：Charles Proxy/Reqable&lt;/li&gt;
&lt;li&gt;必要工具：&lt;code&gt;Magisk&lt;/code&gt;、&lt;code&gt;MoveCertificate&lt;/code&gt; Magisk 模块&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;PS：逆向分析通常还需要本地提前安装好 Java、Python 环境。这些安装配置都比较常见，这里不再展开。macOS 用户可以直接通过 &lt;code&gt;brew&lt;/code&gt; 安装。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;一、环境搭建&lt;a href=&quot;#一环境搭建&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. 安装 Android Studio（AVD 手机模拟器）&lt;a href=&quot;#1-安装-android-studioavd-手机模拟器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;如果你使用的是真实手机，可以跳过这一步。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1.1 从官网下载并安装 Android Studio&lt;a href=&quot;#11-从官网下载并安装-android-studio&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;官网地址：&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.android.google.cn/studio?hl=zh-cn&quot; target=&quot;_blank&quot;&gt;Android Studio 官网&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://file.ciyuanai.org/picList/2026/05/image-20260505161403190-20260505161712383.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1.2 安装 Android 手机镜像&lt;a href=&quot;#12-安装-android-手机镜像&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;打开 &lt;code&gt;Android Studio&lt;/code&gt;，进入 &lt;code&gt;SDK Manager&lt;/code&gt;，切换到 &lt;code&gt;SDK Platforms&lt;/code&gt; 标签页。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;勾选需要安装的 Android 镜像&lt;/li&gt;
&lt;li&gt;点击 &lt;code&gt;Apply&lt;/code&gt; 下载镜像&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://file.ciyuanai.org/picList/2026/05/image-20260505185405307.png&quot; alt=&quot;image-20260505185405307&quot; /&gt;&lt;figcaption&gt;image-20260505185405307&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1.3 通过模拟器创建 Android 手机&lt;a href=&quot;#13-通过模拟器创建-android-手机&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;打开 &lt;code&gt;Device Manager&lt;/code&gt;，点击 &lt;code&gt;Create device&lt;/code&gt;。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;选择一款 Android 设备，尽量选择较低版本对应的设备型号，比如 &lt;code&gt;Pixel 7&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;点击 &lt;code&gt;Next&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在系统镜像列表中，选择刚刚下载的 Android 16 镜像&lt;/li&gt;
&lt;li&gt;点击 &lt;code&gt;Next&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;根据需要配置 AVD 名称&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Services&lt;/code&gt; 选择 &lt;code&gt;Google APIs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;点击 &lt;code&gt;Finish&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;拓展：&lt;code&gt;Services&lt;/code&gt; 类型说明&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AOSP&lt;/code&gt;：纯开源系统，无 Google 服务，可 Root&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Google APIs&lt;/code&gt;：包含 Google 服务框架，使用测试密钥，可 Root，推荐&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Google Play Store&lt;/code&gt;：包含完整 Google 服务和 Play 商店，使用生产密钥，默认无法 Root，通常需要额外工具&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;本文后续步骤均基于 &lt;code&gt;Google APIs&lt;/code&gt; 镜像。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://file.ciyuanai.org/picList/2026/05/image-20260505185448947.png&quot; alt=&quot;image-20260505185448947&quot; /&gt;&lt;figcaption&gt;image-20260505185448947&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1.4 启动模拟器&lt;a href=&quot;#14-启动模拟器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;创建完成后，启动模拟器，确保系统能够正常开机和进入桌面。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1.5 可选：将模拟器语言切换为中文&lt;a href=&quot;#15-可选将模拟器语言切换为中文&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;如果你不习惯英文界面，可以按下面路径改成中文：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;主页面上划，打开 &lt;code&gt;Setting&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;搜索 &lt;code&gt;Language&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;进入 &lt;code&gt;App Languages&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;点击 &lt;code&gt;System Languages&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;添加中文&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;完成后，模拟器系统界面会切换成中文，后续找设置项会更直观一些。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 安装 Charles（抓包神器）&lt;a href=&quot;#2-安装-charles抓包神器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.1 下载并安装 Charles&lt;a href=&quot;#21-下载并安装-charles&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;从官网下载安装对应系统版本的 Charles：&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.charlesproxy.com/&quot; target=&quot;_blank&quot;&gt;Charles 官网&lt;/a&gt;&lt;/p&gt;&lt;p&gt;首次运行时会提示试用，可以先继续使用；如果需要长期使用，建议购买正版。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.2 激活 Charles&lt;a href=&quot;#22-激活-charles&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Charles 支持免费试用一段时间。如果你要长期使用，建议使用正版授权。&lt;/p&gt;&lt;p&gt;原文里也提到了一个激活网站，这里保留来源信息但不展开具体使用说明：&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.zzzmode.com/mytools/charles/&quot; target=&quot;_blank&quot;&gt;激活网站地址&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Charles 中的注册入口在：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Help -&amp;gt; Register Charles&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.3 配置 HTTP 代理&lt;a href=&quot;#23-配置-http-代理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;打开 Charles，点击：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Proxy -&amp;gt; Proxy Settings&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://file.ciyuanai.org/picList/2026/05/image-20260505185931254.png&quot; alt=&quot;image-20260505185931254&quot; /&gt;&lt;figcaption&gt;image-20260505185931254&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;确认：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;HTTP Proxy&lt;/code&gt; 端口为 &lt;code&gt;8888&lt;/code&gt;（默认）&lt;/li&gt;
&lt;li&gt;勾选 &lt;code&gt;Enable transparent HTTP proxying&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://file.ciyuanai.org/picList/2026/05/image-20260505185956323.png&quot; alt=&quot;image-20260505185956323&quot; /&gt;&lt;figcaption&gt;image-20260505185956323&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.4 配置 Android 模拟器代理&lt;a href=&quot;#24-配置-android-模拟器代理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在模拟器中打开当前网络设置，进入 Wi-Fi 详情页并编辑网络。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;打开网络设置&lt;/li&gt;
&lt;li&gt;点击右上角编辑按钮&lt;/li&gt;
&lt;li&gt;选择高级选项&lt;/li&gt;
&lt;li&gt;选择手动配置代理&lt;/li&gt;
&lt;li&gt;输入 Charles 本地 IP 和监听端口 &lt;code&gt;8888&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://file.ciyuanai.org/picList/2026/05/image-20260505190131635.png&quot; alt=&quot;image-20260505190131635&quot; /&gt;&lt;figcaption&gt;image-20260505190131635&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;这里的 Charles 本地 IP，本质上就是你当前电脑在局域网中的 IP 地址。&lt;/p&gt;&lt;p&gt;如果不知道本机 IP，可以在 Charles 中查看：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Help -&amp;gt; Local IP Address&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.5 验证 HTTP 抓包效果&lt;a href=&quot;#25-验证-http-抓包效果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先在 Android 模拟器中的浏览器访问：&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://httpbin.org/get&quot; target=&quot;_blank&quot;&gt;http://httpbin.org/get&lt;/a&gt;&lt;/p&gt;&lt;p&gt;然后查看 Charles 是否抓到了对应请求。&lt;/p&gt;&lt;p&gt;如果 Charles 能看到请求，说明下面几件事已经通了：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;模拟器网络正常&lt;/li&gt;
&lt;li&gt;Charles 代理已生效&lt;/li&gt;
&lt;li&gt;模拟器请求已经成功经过宿主机代理&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;不过此时你只能抓取 &lt;code&gt;HTTP&lt;/code&gt; 的包，还不能抓 &lt;code&gt;HTTPS&lt;/code&gt; 的包，因为 Charles 根证书还没有完成系统级配置。后面在 Root 权限开启后，会继续把用户证书提升为系统证书，从而实现 HTTPS 抓包。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://file.ciyuanai.org/picList/2026/05/image-20260505190205163.png&quot; alt=&quot;image-20260505190205163&quot; /&gt;&lt;figcaption&gt;image-20260505190205163&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;二、开启 Root 权限（Magisk + 补丁）&lt;a href=&quot;#二开启-root-权限magisk--补丁&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Android 高版本模拟器默认没有 Root，需要手动安装 Magisk 获取 Root 权限，为后续挂载系统证书做准备。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. 安装 Magisk&lt;a href=&quot;#1-安装-magisk&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1.1 下载 Magisk APK&lt;a href=&quot;#11-下载-magisk-apk&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;官方下载地址：&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/topjohnwu/Magisk/releases&quot; target=&quot;_blank&quot;&gt;Magisk Releases&lt;/a&gt;&lt;/p&gt;&lt;p&gt;如果访问 GitHub 不方便，原文还给了一个备用下载地址：&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://magiskcn.com/magisk-download.html&quot; target=&quot;_blank&quot;&gt;Magisk 备用下载地址&lt;/a&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1.2 将 APK 安装到模拟器&lt;a href=&quot;#12-将-apk-安装到模拟器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;直接把下载好的 APK 拖入 Android 模拟器中即可安装。&lt;/p&gt;&lt;p&gt;安装完成后打开 Magisk，首次进入时通常会提示修复环境并要求重启设备，点击确认即可。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://file.ciyuanai.org/picList/2026/05/image-20260505190313341.png&quot; alt=&quot;image-20260505190313341&quot; /&gt;&lt;figcaption&gt;image-20260505190313341&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1.3 初始状态说明&lt;a href=&quot;#13-初始状态说明&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;重启之后，你会发现 Magisk 下方的超级用户模块仍然是未解锁状态。接下来就需要通过打补丁的方式，给模拟器镜像添加 Root 能力。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 镜像打补丁（获取永久 Root）&lt;a href=&quot;#2-镜像打补丁获取永久-root&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;再次进入 Magisk 后，如果 Root 模块还未开启，就需要通过镜像打补丁，或者手动用命令临时开启 Root。本文按原文流程，采用镜像打补丁的方式。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;补丁方式的原理，是将 Magisk 直接集成到系统镜像中。这是一种永久 Root 方案，可以让模拟器每次启动时自动获得 Magisk 支持，而不需要每次通过命令行附加 &lt;code&gt;-writable-system&lt;/code&gt;、&lt;code&gt;-selinux permissive&lt;/code&gt; 等启动参数。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.1 关闭运行中的 Android 模拟器&lt;a href=&quot;#21-关闭运行中的-android-模拟器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在执行补丁前，先完全关闭当前模拟器。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.2 获取 &lt;code&gt;build.py&lt;/code&gt; 脚本&lt;a href=&quot;#22-获取-buildpy-脚本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;从 Magisk 源码仓库中获取 &lt;code&gt;build.py&lt;/code&gt; 脚本，把整个仓库拉下来进入仓库目录执行。&lt;/p&gt;&lt;p&gt;脚本地址：&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/topjohnwu/Magisk/blob/master/build.py&quot; target=&quot;_blank&quot;&gt;Magisk build.py&lt;/a&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.3 定位系统镜像目录&lt;a href=&quot;#23-定位系统镜像目录&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Android SDK 的系统镜像通常位于以下位置，我们需要的关键文件是 &lt;code&gt;ramdisk.img&lt;/code&gt;：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;macOS: ~/Library/Android/sdk/system-images/android-36/google_apis/arm64-v8a/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Windows: C:\Users\用户名\AppData\Local\Android\sdk\system-images\android-36\google_apis\arm64-v8a\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Linux: ~/Android/Sdk/system-images/android-36/google_apis/arm64-v8a/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.4 执行补丁命令&lt;a href=&quot;#24-执行补丁命令&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;注意先确认你自己的 Android 模拟器镜像目录名称，例如：&lt;/p&gt;&lt;p&gt;&lt;code&gt;android-36/google_apis/arm64-v8a&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://file.ciyuanai.org/picList/2026/05/image-20260505190509342.png&quot; alt=&quot;image-20260505190509342&quot; /&gt;&lt;figcaption&gt;image-20260505190509342&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;示例命令如下：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 对镜像打补丁&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;./build.py&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;avd_patch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--apk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;../Downloads/Magisk-v30.7.apk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/Users/ziyi/Library/Android/sdk/system-images/android-36/google_apis/arm64-v8a/ramdisk.img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ramdisk_patched.img&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 备份原文件，避免后续需要恢复原始镜像时没有备份&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ramdisk.img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ramdisk.img.backup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 用补丁后的镜像覆盖原镜像&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ramdisk_patched.img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/Users/ziyi/Library/Android/sdk/system-images/android-36/google_apis/arm64-v8a/ramdisk.img&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.5 重启模拟器并验证 Root&lt;a href=&quot;#25-重启模拟器并验证-root&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;重新启动模拟器，再次进入 Magisk。如果看到超级用户模块已经解锁，说明 Root 已经成功。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://file.ciyuanai.org/picList/2026/05/image-20260505190603185.png&quot; alt=&quot;image-20260505190603185&quot; /&gt;&lt;figcaption&gt;image-20260505190603185&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;三、Charles 根证书配置&lt;a href=&quot;#三charles-根证书配置&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. 电脑信任证书&lt;a href=&quot;#1-电脑信任证书&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1.1 开启 Charles HTTPS 抓包&lt;a href=&quot;#11-开启-charles-https-抓包&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 Charles 中打开：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Proxy -&amp;gt; SSL Proxying Settings&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;添加一条 SSL 抓包规则：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*:*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://file.ciyuanai.org/picList/2026/05/image-20260505190940637.png&quot; alt=&quot;image-20260505190940637&quot; /&gt;&lt;figcaption&gt;image-20260505190940637&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;*1.2 保存 Charles 根证书&lt;a href=&quot;#12-保存-charles-根证书&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 Charles 中导出根证书，保存到本地。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1.3 在电脑侧安装并信任证书&lt;a href=&quot;#13-在电脑侧安装并信任证书&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;双击证书并安装，在系统证书管理中将该证书设置为信任。&lt;/p&gt;&lt;p&gt;这一步是为了让宿主机上的 Charles 可以正确处理 HTTPS 流量。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 手机安装证书&lt;a href=&quot;#2-手机安装证书&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.1 将 Charles 根证书推送到 Android 模拟器&lt;a href=&quot;#21-将-charles-根证书推送到-android-模拟器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先确认 &lt;code&gt;adb&lt;/code&gt; 能识别到模拟器设备，再把证书推送到 &lt;code&gt;/sdcard&lt;/code&gt;：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 1. 查看 adb 是否识别到 Android 手机&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;adb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 执行结果示例：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# List of devices attached&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# emulator-5554        device&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 2. 将 Charles 根证书推送到模拟器&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Charles 根证书位置：~/Desktop/charles-ssl-proxying-certificate.pem&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 推送 Android 目标位置：/sdcard&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;adb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~/Desktop/charles-ssl-proxying-certificate.pem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/sdcard&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.2 在系统设置中安装证书&lt;a href=&quot;#22-在系统设置中安装证书&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 Android 设置中搜索“证书”，找到 &lt;code&gt;CA 证书&lt;/code&gt;。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.3 选择证书并完成安装&lt;a href=&quot;#23-选择证书并完成安装&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;按下面流程安装：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;点击 &lt;code&gt;CA 证书&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;选择“仍然安装”&lt;/li&gt;
&lt;li&gt;找到刚刚推送到手机中的 Charles 根证书&lt;/li&gt;
&lt;li&gt;点击证书进行安装&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.4 在可信凭据中确认用户证书&lt;a href=&quot;#24-在可信凭据中确认用户证书&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;看到“已安装 CA 证书”提示后，在设置中找到“证书管理应用”，进入“可信凭据”，在“用户”分类下确认 Charles 证书已经存在。&lt;/p&gt;&lt;p&gt;到这一步，证书已经作为用户证书安装成功。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. 提升为系统证书&lt;a href=&quot;#3-提升为系统证书&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;仅安装为用户证书，通常仍然无法抓取很多 App 的 HTTPS 包，所以还需要把用户证书提升为系统证书。&lt;/p&gt;&lt;p&gt;原文给出了两种方案，这里按原文采用方案二：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;方案一：手动计算签名后移动到 &lt;code&gt;/system/etc/security/cacerts/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;方案二：使用 &lt;code&gt;MoveCertificate&lt;/code&gt; Magisk 模块自动移动，推荐&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.1 下载 MoveCertificate 模块&lt;a href=&quot;#31-下载-movecertificate-模块&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;从 GitHub Releases 下载 &lt;code&gt;MoveCertificate-xxx.zip&lt;/code&gt;：&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/ys1231/MoveCertificate/releases&quot; target=&quot;_blank&quot;&gt;MoveCertificate Releases&lt;/a&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.2 推送模块到 Android 模拟器&lt;a href=&quot;#32-推送模块到-android-模拟器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;adb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~/Downloads/MoveCertificate-v1.5.6.zip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/sdcard/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.3 通过 Magisk 安装模块&lt;a href=&quot;#33-通过-magisk-安装模块&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 Android 模拟器中打开 Magisk：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;点击右下角“模块”&lt;/li&gt;
&lt;li&gt;选择“从本地安装”&lt;/li&gt;
&lt;li&gt;选择刚刚推送进去的 &lt;code&gt;zip&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;安装完成后重启&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;安装成功后，该模块会在每次启动时自动将用户证书复制到系统目录，不需要手动重复移动。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://file.ciyuanai.org/picList/2026/05/image-20260505195335825.png&quot; alt=&quot;image-20260505195335825&quot; /&gt;&lt;figcaption&gt;image-20260505195335825&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.4 验证系统证书&lt;a href=&quot;#34-验证系统证书&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;进入：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;设置&lt;/li&gt;
&lt;li&gt;证书管理应用&lt;/li&gt;
&lt;li&gt;可信凭据&lt;/li&gt;
&lt;li&gt;系统证书&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;确认其中已经存在 Charles 证书。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;https://file.ciyuanai.org/picList/2026/05/image-20260505195354968.png&quot; alt=&quot;image-20260505195354968&quot; /&gt;&lt;figcaption&gt;image-20260505195354968&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.5 验证 HTTPS 抓包&lt;a href=&quot;#35-验证-https-抓包&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;这里有两个注意点：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;手机重启后，需要重新配置代理&lt;/li&gt;
&lt;li&gt;需要保证手机和电脑在同一网络环境下&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;如果你只想抓模拟器流量，不希望 Charles 同时抓宿主机流量，可以取消勾选 &lt;code&gt;macOS Proxy&lt;/code&gt;。Windows 上操作思路类似。&lt;/p&gt;&lt;p&gt;完成这些后，再次用浏览器或目标 App 发起 HTTPS 请求，确认 Charles 中已经可以看到对应的 HTTPS 数据。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.6 验证目标 APK 的 HTTPS 包&lt;a href=&quot;#36-验证目标-apk-的-https-包&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最后就可以对目标 APK 进行实际抓包验证。如果前面步骤都已经完成，通常就能正常看到目标应用的 HTTPS 请求。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;小结&lt;a href=&quot;#小结&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;按照上面的流程，整套环境的核心链路就是：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;安装 Android Studio 和 AVD 模拟器&lt;/li&gt;
&lt;li&gt;安装 Charles，并先打通 HTTP 代理&lt;/li&gt;
&lt;li&gt;安装 Magisk，给模拟器镜像打补丁，拿到 Root 权限&lt;/li&gt;
&lt;li&gt;安装 Charles 根证书&lt;/li&gt;
&lt;li&gt;借助 MoveCertificate 将用户证书提升为系统证书&lt;/li&gt;
&lt;li&gt;最终完成 HTTPS 抓包&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;到这里，这篇“环境搭建”的目标就完成了。后续如果你继续做 App 逆向分析，比如协议分析、接口还原、证书校验绕过或动态调试，这套环境就可以直接作为基础环境使用。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>博客重新上线：从一篇 Markdown 开始</title><link>https://blog.ciyuanai.org/posts/essays/blog-restart/</link><guid isPermaLink="true">https://blog.ciyuanai.org/posts/essays/blog-restart/</guid><description>新博客重新上线，旧内容不再迁移，一切回到简单的 Markdown 记录与自动发布。</description><pubDate>Tue, 05 May 2026 12:30:00 GMT</pubDate><content:encoded>&lt;p&gt;兜兜转转，博客又重新上线了。&lt;/p&gt;
&lt;p&gt;这一次不打算把原来的内容搬过来了。不是那些文字没有价值，而是它们属于过去某一段时间的我：当时关注的问题、当时使用的工具、当时写下来的判断，都有各自的语境。与其花很多精力整理、迁移、修修补补，不如把它们留在原处，给这个新博客一个轻一点的开始。&lt;/p&gt;
&lt;p&gt;我越来越喜欢“返璞归真”这件事。&lt;/p&gt;
&lt;p&gt;博客最早吸引我的地方，本来就不是复杂的系统、漂亮的后台、繁琐的工作流，而是打开一个文件，把想法写下来。技术折腾当然有乐趣，但如果写一篇文章之前要先想模板、分类、编辑器、发布流程、图片处理和一堆配置，写作本身就很容易被挤到最后。&lt;/p&gt;
&lt;p&gt;所以这次，我想让博客回到最简单的形态：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每篇文章就是一个普通的 Markdown 文件&lt;/li&gt;
&lt;li&gt;想写的时候，直接新建、编辑、提交&lt;/li&gt;
&lt;li&gt;站点构建和发布交给自动化流程&lt;/li&gt;
&lt;li&gt;页面只负责把内容安静地呈现出来&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;简单并不代表随便。恰恰相反，简单意味着更少的摩擦，也意味着更容易坚持。Markdown 文件足够透明，放在仓库里也足够踏实；自动发布把重复动作拿走，只留下真正需要人来做的部分：观察、思考、记录和分享。&lt;/p&gt;
&lt;p&gt;以后这里会有技术笔记，也会有一些不那么成体系的想法。可能是一次开发踩坑，一段工具实践，一点 AI 使用经验，也可能只是某天突然想明白的小事。&lt;/p&gt;
&lt;p&gt;旧博客不迁移，新博客也不急着填满。&lt;/p&gt;
&lt;p&gt;从今天开始，就用最简单的方式继续写。写得慢一点也没关系，重要的是还在写，还愿意把某些时刻的理解留下来。&lt;/p&gt;
&lt;p&gt;这就是新的开始。&lt;/p&gt;</content:encoded></item></channel></rss>