<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>默认分类 on 认真的雪</title><link>https://blog.wjhe.top/categories/%E9%BB%98%E8%AE%A4%E5%88%86%E7%B1%BB/</link><description>Recent content in 默认分类 on 认真的雪</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Tue, 03 Feb 2026 10:02:00 +0800</lastBuildDate><atom:link href="https://blog.wjhe.top/categories/%E9%BB%98%E8%AE%A4%E5%88%86%E7%B1%BB/index.xml" rel="self" type="application/rss+xml"/><item><title>rhel 9 系统 Docker 运行 CentOS yum 命令卡死</title><link>https://blog.wjhe.top/rhel-9-%E7%B3%BB%E7%BB%9F-docker-%E8%BF%90%E8%A1%8C-centos-yum-%E5%91%BD%E4%BB%A4%E5%8D%A1%E6%AD%BB/</link><pubDate>Tue, 03 Feb 2026 10:02:00 +0800</pubDate><guid>https://blog.wjhe.top/rhel-9-%E7%B3%BB%E7%BB%9F-docker-%E8%BF%90%E8%A1%8C-centos-yum-%E5%91%BD%E4%BB%A4%E5%8D%A1%E6%AD%BB/</guid><description>&lt;p&gt;CentOS Stream 9、Rocky Linux 9 等 rhel 9 系统。在 Docker 容器的 CentOS7 镜像执行 yum 操作 特别慢。
是因为 open files 太大了。&lt;/p&gt;
&lt;p&gt;先查看之前的 ulimit&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker run -it --tty --network host --name centos7 centos:centos7.9.2009 /bin/bash
ulimit -a
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 30537
max locked memory (kbytes, -l) 8192
max memory size (kbytes, -m) unlimited
open files (-n) 1073741816
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;替换源&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;for f in /etc/yum.repos.d/*.repo
do
 mv -f &amp;#34;$f&amp;#34; &amp;#34;${f}.backup&amp;#34;
done
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/artifactory/os-conf/centos/centos-7.repo

yum makecache -y 
yum update -y 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;直接卡死在 &lt;code&gt;Updating : glibc-2.17-326.el7_9.3.x86_64&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;现在我们重新加上 ulimit&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker run -it --tty --network host --name centos7 --ulimit &amp;#34;nofile=1024:1048576&amp;#34; centos:centos7.9.2009 /bin/bash
ulimit -a
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 30537
max locked memory (kbytes, -l) 8192
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;执行上面的步骤，就不会卡死了。&lt;/p&gt;
&lt;p&gt;参考
&lt;a class="link" href="https://github.com/moby/moby/issues/45838" target="_blank" rel="noopener"
 &gt;https://github.com/moby/moby/issues/45838&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Nginx 缓存 文件名和路径计算</title><link>https://blog.wjhe.top/nginx-%E7%BC%93%E5%AD%98-%E6%96%87%E4%BB%B6%E5%90%8D%E5%92%8C%E8%B7%AF%E5%BE%84%E8%AE%A1%E7%AE%97/</link><pubDate>Fri, 13 Dec 2024 09:28:00 +0800</pubDate><guid>https://blog.wjhe.top/nginx-%E7%BC%93%E5%AD%98-%E6%96%87%E4%BB%B6%E5%90%8D%E5%92%8C%E8%B7%AF%E5%BE%84%E8%AE%A1%E7%AE%97/</guid><description>&lt;p&gt;缓存键 (proxy_cache_key): proxy_cache_key 指定了 NGINX 如何根据请求生成一个缓存键。
&lt;strong&gt;缓存键 (proxy_cache_key)&lt;/strong&gt;
proxy_cache_key 指定了 NGINX 如何根据请求生成一个缓存键。
&lt;strong&gt;哈希计算&lt;/strong&gt;
对缓存键进行哈希处理，常使用 MD5 算法。
例如，如果缓存键是 example.com/image.png , 进行 MD5 哈希后会得到一个 32 字符的哈希值（c877fe850c17cb1a4d0b158dd2b64cfb）。
这里有一种特殊情况：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当第一次缓存的时候，得到的哈希，就是MD5(example.com/image.png)&lt;/li&gt;
&lt;li&gt;第二次缓存，如果源站有 Vary 响应头 并且 Vary 的值 与第一次缓存的不一致，则会通过 Vary 的值 计算一个新的哈希，如果没有 Vary 响应头，则不会计算新的哈希。
就是说，如果源站响应头没有 Vary，则每次的哈希都是一样的，缓存的是同一个文件，否则会生成新的缓存文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;就是说，无论第一次的 Accept-Encoding 是什么，都不会被Accept-Encoding影响，第二次会因为Accept-Encoding影响。
第一次缓存算法：&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-go" data-lang="go"&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:#75715e"&gt;// cacheKey: 缓存键&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getCacheFileHash&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;cacheKey&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;keyHash&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;md5&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Sum&lt;/span&gt;([]byte(&lt;span style="color:#a6e22e"&gt;cacheKey&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;hex&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;EncodeToString&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;keyHash&lt;/span&gt;[:])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;第二次缓存算法：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;// 计算缓存文件哈希
//
// cacheKey: 缓存键
// vary: 响应头的Vary字段 Accept-Encoding | Accept-Charset | Accept-Language | other
// varyValue: deflate, gzip
func getCacheFileHash(cacheKey string, vary string, varyValue string) string {
 // 转小写 并且去除两边空格
 vary = strings.TrimSpace(strings.ToLower(vary))
 
 // 通过逗号或者空格分隔，然后再通过逗号join
 // 先转小写 并且去除两边空格
 varyValue = strings.TrimSpace(strings.ToLower(varyValue))
 varyValueList := strings.FieldsFunc(varyValue, func(r rune) bool {
 return r == &amp;#39;,&amp;#39; || unicode.IsSpace(r)
 })
 // 再去掉空白字符
 valueList := make([]string, 0, len(varyValueList))
 for _, s := range varyValueList {
 if s == &amp;#34;&amp;#34; {
 continue
 }
 valueList = append(valueList, s)
 }
 varyValue = strings.Join(valueList, &amp;#34;,&amp;#34;)
 // 开始 计算
 // hexEncode(md5(md5(cacheKey) + vary + &amp;#34;:&amp;#34; + varyValue + &amp;#34;\r\n&amp;#34;))
 // example.com/image.png Accept-Encoding deflate, gzip
 // = hexEncode(md5(md5(&amp;#34;example.com/image.png&amp;#34;) + &amp;#34;accept-encoding:deflate,gzip\r\n&amp;#34;))
 buf := bytes.NewBuffer(nil)
 
 keyHash := md5.Sum([]byte(cacheKey))
 buf.Write(keyHash[:])
 buf.WriteString(vary)
 buf.WriteString(&amp;#34;:&amp;#34;)
 buf.WriteString(varyValue)
 buf.WriteString(&amp;#34;\r\n&amp;#34;)
 newHash := md5.Sum(buf.Bytes())
 return hex.EncodeToString(newHash[:])
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;路径层次结构&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 proxy_cache_path 配置中，我们可以看到 levels=1:2。这表示：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;生成的缓存路径会被拆分成两级目录结构。&lt;/li&gt;
&lt;li&gt;第一层目录使用哈希值的倒数第一位字符（b）。&lt;/li&gt;
&lt;li&gt;第二层目录使用哈希值的倒数第三位和倒数第二位字符（cf）。&lt;/li&gt;
&lt;li&gt;最终的缓存文件名将使用哈希值（c877fe850c17cb1a4d0b158dd2b64cfb）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如，基于缓存键 example.com/image.png，假设其哈希值为 c877fe850c17cb1a4d0b158dd2b64cfb，则缓存文件的路径为：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/var/cache/nginx/b/cf/c877fe850c17cb1a4d0b158dd2b64cfb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;nginx反向代理缓存实现，md5加密规则，gzip压缩问题：[https://blog.51cto.com/u_14210437/11868562][1]&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;源代码：[https://github.com/nginx/nginx/blob/master/src/http/ngx_http_file_cache.c][2]&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Goland (Jetbains IDEA) 在Windows下测试用例出现空格、未进行任何测试（no test were run）、输出被截断</title><link>https://blog.wjhe.top/goland-no-test-were-run/</link><pubDate>Thu, 01 Sep 2022 16:49:00 +0800</pubDate><guid>https://blog.wjhe.top/goland-no-test-were-run/</guid><description>&lt;p&gt;Windows下Goland 等Jetbains IDEA运行测试用例时，出现如下问题之一&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;未进行任何测试（no test were run）&lt;/li&gt;
&lt;li&gt;输出文本被截断&lt;/li&gt;
&lt;li&gt;多出空格&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最开始以为是用的fmt.Print打印，换成t.Log还是不行，换成Idea也不行，网站一直没找到答案&lt;/p&gt;
&lt;p&gt;最后参照[Goland测试用例打印出现空格和显示不全问题 (zdzyzy.com)][Goland_ _zdzyzy.com]&lt;br&gt;
修复成功，这里记录一下。&lt;/p&gt;
&lt;p&gt;先 双击shift 输入registry&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-4.png" class="gallery-image" data-flex-basis="235px" data-flex-grow="98" height="687" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.wjhe.top/goland-no-test-were-run/image-4.png" width="674"&gt;&lt;/p&gt;
&lt;p&gt;然后点击 注册表（Registry）&lt;/p&gt;
&lt;p&gt;找到 go.run.processes.with.pty 去掉勾选&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-5.png" class="gallery-image" data-flex-basis="199px" data-flex-grow="83" height="713" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.wjhe.top/goland-no-test-were-run/image-5.png" width="594"&gt;&lt;/p&gt;
&lt;p&gt;点击关闭，然后重启Goland&lt;/p&gt;</description></item><item><title>Golang三色标记法</title><link>https://blog.wjhe.top/golang-gc/</link><pubDate>Fri, 27 Aug 2021 16:25:55 +0800</pubDate><guid>https://blog.wjhe.top/golang-gc/</guid><description>&lt;p&gt;三个集合，颜色分别为白、灰、黑；&lt;/p&gt;
&lt;p&gt;1.把所有对象放入白色集合；&lt;/p&gt;
&lt;p&gt;2.遍历GC-Roots直接可访问到的节点，将其从白色集合放入灰色集合；&lt;/p&gt;
&lt;p&gt;3.遍历灰色集合，将灰色集合引用的对象从白色放入灰色集合，最后将自己放入黑色集合；&lt;/p&gt;
&lt;p&gt;4.重复3操作,直到灰色集合中的元素为空;&lt;/p&gt;
&lt;p&gt;5.通过写屏障检测对象变化，重复以上操作；&lt;/p&gt;
&lt;p&gt;6.回收白色集合中的对象&lt;/p&gt;</description></item><item><title>咪咕音乐 3D音乐解密</title><link>https://blog.wjhe.top/migu3d-decrypt/</link><pubDate>Sat, 31 Jul 2021 19:16:00 +0800</pubDate><guid>https://blog.wjhe.top/migu3d-decrypt/</guid><description>&lt;h2 id="一下载软件"&gt;一、下载软件
&lt;/h2&gt;&lt;p&gt;咪咕音乐的3D音乐只能用咪咕音乐听，有没有什么办法能让我们在任何APP都能听了，最近发现一个软件可以直接解密&lt;/p&gt;
&lt;p&gt;地址如下：&lt;/p&gt;
&lt;p&gt;[https://gitee.com/lagoushangdiao/migu3d-decrypt/releases/latest][https_gitee.com_lagoushangdiao_migu3d-decrypt_releases_latest]&lt;/p&gt;
&lt;h2 id="二使用"&gt;二、使用
&lt;/h2&gt;&lt;p&gt;使用方法：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;A migu 3d audio decrypt cli.

Usage:
 migu3d-decrypt [command]

Available Commands:
 completion Generate the autocompletion script for the specified shell
 decrypt Decrypt local file, only support [mg3d|m4a|wav] format
 help Help about any command
 serve Start a http server
 update Check for update

Flags:
 -h, --help help for migu3d-decrypt
 -t, --toggle Help message for toggle
 -v, --version version for migu3d-decrypt

Use &amp;quot;migu3d-decrypt [command] --help&amp;quot; for more information about a command.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里解密 梁静茹-勇气.wav，歌曲ID为3403&lt;/p&gt;
&lt;p&gt;下载地址&lt;/p&gt;
&lt;p&gt;链接：[https://pan.baidu.com/s/1z7hSjPlmcztEJkZW5lUvEA][https_pan.baidu.com_s_1z7hSjPlmcztEJkZW5lUvEA]&lt;br&gt;
提取码：6666&lt;/p&gt;
&lt;p&gt;解密命令如下&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;直接解密&lt;br&gt;
&lt;code&gt;./migu3d-decrypt.exe decrypt ./梁静茹-勇气.wav&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;使用歌曲id解密&lt;br&gt;
&lt;code&gt;./migu3d-decrypt.exe decrypt --song-id 3403 ./梁静茹-勇气.wav&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;使用filekey解密&lt;br&gt;
&lt;code&gt;./migu3d-decrypt.exe decrypt --file-key 29B55E6F0BDF79EA5D7EDBCA4C2B7404 ./梁静茹-勇气.wav&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;![image-6.png][]解密结果&lt;/p&gt;
&lt;h2 id="三搭建http服务"&gt;三、搭建HTTP服务
&lt;/h2&gt;&lt;p&gt;首先下载对应平台的软件，我这里是windows&lt;/p&gt;
&lt;p&gt;然后运行软件，命令如下&lt;/p&gt;
&lt;p&gt;./migu3d-decrypt.exe serve&lt;/p&gt;
&lt;p&gt;再复制http地址（内网or公网大家自行更改）&lt;/p&gt;
&lt;p&gt;比如 &lt;code&gt;http://127.0.0.1:10085&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="migu.png" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1188" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.wjhe.top/migu3d-decrypt/migu.png" srcset="https://blog.wjhe.top/migu3d-decrypt/migu_hu_d668388da31b91ad.png 800w, https://blog.wjhe.top/migu3d-decrypt/migu.png 894w" width="894"&gt;&lt;/p&gt;
&lt;p&gt;确定保存就可以了，然后就可以播放or下载3D音乐了&lt;/p&gt;</description></item><item><title>fiddler 安卓证书，安装到系统证书</title><link>https://blog.wjhe.top/fiddler-%E5%AE%89%E5%8D%93%E8%AF%81%E4%B9%A6%E5%AE%89%E8%A3%85%E5%88%B0%E7%B3%BB%E7%BB%9F%E8%AF%81%E4%B9%A6/</link><pubDate>Mon, 16 Nov 2020 17:34:00 +0800</pubDate><guid>https://blog.wjhe.top/fiddler-%E5%AE%89%E5%8D%93%E8%AF%81%E4%B9%A6%E5%AE%89%E8%A3%85%E5%88%B0%E7%B3%BB%E7%BB%9F%E8%AF%81%E4%B9%A6/</guid><description>&lt;p&gt;主要引用[https://blog.csdn.net/djzhao627/article/details/102812783][https_blog.csdn.net_djzhao627_article_details_102812783]&lt;/p&gt;
&lt;p&gt;安卓手机需要root&lt;/p&gt;
&lt;p&gt;打开fiddler,访问xxx.xxx.xxx.xxx:8888下载证书&lt;/p&gt;
&lt;p&gt;1.把cer证书转换为pem证书&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;openssl x509 -inform DER -in FiddlerRoot.cer -out cacert.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2.进行MD5的hash显示&lt;/p&gt;
&lt;p&gt;查看openssl版本 &lt;code&gt;openssl version&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;openssl版本在1.0以上的版本的执行这一句&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;openssl x509 -inform PEM -subject_hash_old -in cacert.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;openssl版本在1.0以下的版本的执行这一句&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;openssl x509 -inform PEM -subject_hash -in cacert.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;3.文件重命名 为hash加.0 ,我这里hash为e5c3944b&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mv cacert.pem e5c3944b.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4.将证书放入/system/etc/security/cacerts，再重启手机，就可以看到系统证书里面有该证书了&lt;/p&gt;</description></item><item><title>虾米音乐fiddler显示网络请求</title><link>https://blog.wjhe.top/%E8%99%BE%E7%B1%B3%E9%9F%B3%E4%B9%90%E7%AC%94%E8%AE%B0/</link><pubDate>Mon, 16 Nov 2020 17:20:00 +0800</pubDate><guid>https://blog.wjhe.top/%E8%99%BE%E7%B1%B3%E9%9F%B3%E4%B9%90%E7%AC%94%E8%AE%B0/</guid><description>&lt;p&gt;阿里系的app，用的mtopsdk，默认Spdy是开启的，fiddler是不显示网络请求的。&lt;/p&gt;
&lt;p&gt;今天偶然搜到可以用frida hook，把Spdy关闭。这里记一下过程：&lt;/p&gt;
&lt;p&gt;本文主要引用[&lt;em&gt;https://www.jianshu.com/p/fa14e8063f79&lt;/em&gt;][https_www.jianshu.com_p_fa14e8063f79]的过程&lt;/p&gt;
&lt;p&gt;要求 安卓手机需要已经root&lt;/p&gt;
&lt;p&gt;首先安装frida模块和frida-tools工具,需要python3&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pip3 install fridapip3 install frida-tools
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果下载比较慢，可以使用国内清华大学镜像&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pip3 install frida -i https://pypi.mirrors.ustc.edu.cn/simple/pip3 install frida-tools -i https://pypi.mirrors.ustc.edu.cn/simple/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后下载frida-server，这个是要运行在安卓手机上的，首先查看cpu类型&lt;/p&gt;
&lt;p&gt;命令如下&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;adb shellgetprop ro.product.cpu.abi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我这里是arm64&lt;/p&gt;
&lt;p&gt;&lt;img alt="server.png" class="gallery-image" data-flex-basis="414px" data-flex-grow="172" height="611" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.wjhe.top/%E8%99%BE%E7%B1%B3%E9%9F%B3%E4%B9%90%E7%AC%94%E8%AE%B0/server.png" srcset="https://blog.wjhe.top/%E8%99%BE%E7%B1%B3%E9%9F%B3%E4%B9%90%E7%AC%94%E8%AE%B0/server_hu_36d90dc69544d163.png 800w, https://blog.wjhe.top/%E8%99%BE%E7%B1%B3%E9%9F%B3%E4%B9%90%E7%AC%94%E8%AE%B0/server.png 1055w" width="1055"&gt;&lt;/p&gt;
&lt;p&gt;frida-server 下载地址是[https://github.com/frida/frida/releases][https_github.com_frida_frida_releases] 目前最新版是14.0.8&lt;/p&gt;
&lt;p&gt;我下载的是 [frida-server-14.0.8-android-arm64.xz][]&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-1024x593.png" class="gallery-image" data-flex-basis="1215px" data-flex-grow="506" height="63" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.wjhe.top/%E8%99%BE%E7%B1%B3%E9%9F%B3%E4%B9%90%E7%AC%94%E8%AE%B0/image-1024x593.png" width="319"&gt;&lt;/p&gt;
&lt;p&gt;下载后，把文件解压，再push到安卓手机上&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;adb push frida-server-14.0.8-android-arm64 /data/local/tmp/frida-server14.0.8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后adb shell进入虚拟机：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd /data/local/tmp/ //进入frida-server所在目录chmod 777 frida-server14.0.8 //赋予权限./frida-server14.0.8 &amp;amp; //启动运行
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重新打开一个cmd窗口，本机执行 frida-ps -U 应该能看到模拟器上启动的包名。&lt;/p&gt;
&lt;p&gt;然后启动一段python代码&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import frida, sys

jscode = &amp;quot;&amp;quot;&amp;quot;

Java.perform(function () {

var SwitchConfig = Java.use('mtopsdk.mtop.global.SwitchConfig');

 SwitchConfig.isGlobalSpdySwitchOpen.overload().implementation = function(){

 var ret = this.isGlobalSpdySwitchOpen.apply(this, arguments);

 console.log(&amp;quot;isGlobalSpdySwitchOpenl &amp;quot;+ret)

 return false

 }

})

&amp;quot;&amp;quot;&amp;quot;

def on_message(message, data):

 if message['type'] == 'send':

 print(&amp;quot;[*] {0}&amp;quot;.format(message['payload']))

 else:

 print(message)

process = frida.get_usb_device().attach('fm.xiami.main')

script = process.create_script(jscode)

script.on('message', on_message)

script.load()

sys.stdin.read()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后我们就可以测试抓包了。&lt;/p&gt;
&lt;p&gt;[frida-hook.py][][下载][frida-hook.py]&lt;/p&gt;
&lt;p&gt;[frida-server-14.0.8-android-arm64.xz]
[frida-server-14.0.8-android-arm64.xz 1][下载][frida-server-14.0.8-android-arm64.xz 1]&lt;/p&gt;</description></item></channel></rss>