Android系统级证书注入:突破HTTPS抓包限制的完整方案

news2026/5/24 4:44:41
1. 这不是“换个证书”那么简单为什么系统级证书安装成了Android抓包真正的分水岭你肯定试过在Android手机上用Charles抓包——App打开Charles配好代理手机Wi-Fi设好代理地址点开浏览器流量哗哗进来了。但一打开微信、淘宝、银行类App列表里干干净净连个DNS请求都不见。你刷新十次重启Charles五遍甚至把手机网络开关都 toggled 三次结果还是一样HTTPS流量全被拦在门外。这不是Charles不好用也不是你代理没配对而是从Android 7.0Nougat开始系统默认只信任**用户证书存储区User CA Store**里的证书而像微信这类App早在编译时就通过android:networkSecurityConfig明确声明了“只认系统证书区System CA Store”直接无视你手动安装到用户区的Charles根证书。这就是整个问题的核心矛盾抓包工具生成的证书天然属于“用户身份”而目标App强制要求“系统身份”认证。你装在用户区的证书在App眼里就是“外来户”连门都不让进。很多人卡在这里最后要么放弃逆向分析要么退而求其次去Hook SSL/TLS函数——那已经不是抓包是写插件了。而真正能一劳永逸打通这条链路的是让Charles证书“合法入驻”系统证书区。这一步才是从“能看网页”跃升到“能看所有App通信”的临界点。它不依赖Xposed或Frida不修改App代码不触发反调试只动系统信任链的底层配置。本文讲的就是怎么用ADB命令系统分区操作Magisk模块机制把Charles证书稳稳当当放进/system/etc/security/cacerts目录且适配Android 8~14全系机型包括已Root但未刷入Magisk的“半成品”环境。关键词很明确Android逆向、抓包、Charles、ADB、系统证书、Magisk兼容。适合正在做App协议分析、安全审计、竞品功能拆解或者刚学逆向卡在HTTPS这一关的朋友。别急着翻教程复制命令——先搞懂为什么必须走系统级你才能判断自己该选ADB直刷、Magisk模块还是干脆换台测试机。2. 系统证书区的硬性规则从Android版本演进看证书信任机制的三道锁要让证书进系统区得先知道系统区到底长什么样、谁说了算、怎么进才不被拒。这不是一个文件拷贝就能解决的事而是涉及Android安全模型中三层递进式校验机制。我拿手头四台真机Pixel 3a/Android 11、OnePlus 8/Android 12、Xiaomi 13/Android 13、Samsung S23/Android 14反复验证过这套规则从Android 7.0定型后核心逻辑没变只是锁得越来越紧。2.1 第一道锁证书文件命名规范——哈希值即身份证系统证书区路径是/system/etc/security/cacertsAndroid 7~10或/system/etc/security/cacerts/system/apex/com.android.conscrypt/etc/security/cacertsAndroid 11但无论路径怎么变每个证书文件名必须是其subject hash的前8位小写十六进制值加.0后缀。比如Charles根证书的subject是CNCharles Proxy SSL Proxying Certificate用OpenSSL计算其hashopenssl x509 -inform PEM -subject_hash_old -in charles-proxy-ssl-proxying-certificate.pem -noout # 输出9a5ba575那么正确文件名就是9a5ba575.0。注意两点一是必须用-subject_hash_old参数新hash算法在Android上不识别二是.0后缀不可省略。我曾因漏掉.0证书放进去后adb shell ls /system/etc/security/cacerts能看到文件但adb shell logcat | grep -i cert始终报Certificate not in system store。这是最常踩的第一个坑——文件名错系统直接无视连解析步骤都不走。2.2 第二道锁文件权限与属主——root:root 644是铁律证书文件放进/system/etc/security/cacerts后必须满足两个硬性权限条件属主属组必须是root:rootUID/GID均为0文件权限必须是644即-rw-r--r--。任何偏差都会导致证书加载失败。比如用普通ADB push上去的文件默认属主是shell权限是600系统启动时根本不会扫描它。验证方法很简单adb shell ls -l /system/etc/security/cacerts/9a5ba575.0 # 正确输出应为-rw-r--r-- 1 root root 1234 2024-01-01 12:00 /system/etc/security/cacerts/9a5ba575.0如果看到shell:shell或权限是600说明还没过第二关。这里有个关键细节Android 11引入了/system分区只读挂载ro机制即使Root了adb remount也未必能成功尤其在三星、华为等厂商定制ROM上。所以不能指望adb push后直接chmod/chown——得先进入可写模式或改用其他路径。2.3 第三道锁系统分区挂载状态与完整性校验——Android 10的“防篡改盾”从Android 10开始Google强制启用dm-verity设备映射验证和AVB 2.0Android Verified Boot。这意味着/system分区在启动时会被完整校验哈希值一旦发现文件被修改哪怕只改了一个字节系统会拒绝启动或进入recovery模式。这也是为什么很多老教程教“adb remount adb push”在新机上完全失效——不是命令错了是系统根本不让你改。实测中Pixel系列在Android 12上执行adb remount返回remount succeeded但adb shell mount | grep system显示仍是ro而小米13在Android 13上直接报remount failed: Operation not permitted。此时强行写入不仅无效还可能触发AVB失败导致无法开机。所以第三道锁的本质是你不能直接动/system得绕过它或让它“认可”你的改动。Magisk模块方案正是基于此设计——它不修改/system原始镜像而是在启动时通过init.rc注入用overlay机制动态挂载证书既满足系统校验又实现功能覆盖。理解这三道锁你就明白为什么网上那些“三行命令搞定”的教程90%在Android 11设备上跑不通——它们只解决了第一道锁对后两道视而不见。3. ADB直刷方案在支持adb remount的设备上精准落子附完整校验链如果你的设备是原生AndroidPixel/Nexus、部分OnePlus或旧款三星并且确认adb remount可用那么ADB直刷是最直接、最透明的方案。它不依赖第三方框架每一步都可控适合想彻底搞懂底层机制的读者。但请注意此方案仅适用于/system可重挂载为读写rw的设备且操作前必须备份/system分区。我用Pixel 3aAndroid 11全程实测以下是完整流程与每步背后的原理。3.1 准备工作生成合规证书文件并校验哈希首先确保你有Charles最新版导出的根证书。Charles默认导出的是PEM格式但需确认内容结构正确# 查看证书内容确认以-----BEGIN CERTIFICATE-----开头且无多余空行或注释 cat charles-proxy-ssl-proxying-certificate.pem | head -n 5 # 正确应输出 # -----BEGIN CERTIFICATE----- # MIIDXTCCAkWgAwIBAgIJAN... # ... # 计算subject_hash_old关键不能用subject_hash openssl x509 -inform PEM -subject_hash_old -in charles-proxy-ssl-proxying-certificate.pem -noout # 输出9a5ba575 → 文件名定为9a5ba575.0提示如果输出为空或报错说明证书文件损坏或格式不对。常见原因是Charles导出时勾选了“PKCS#12”而非“PEM”或复制过程中混入了Windows换行符\r\n。用dos2unix或VS Code转LF格式即可修复。3.2 执行ADB直刷四步原子操作与权限修正假设你已连接设备并开启USB调试执行以下命令逐行输入勿合并# Step 1获取Root权限非Root设备此步失败需先Root adb root # Step 2重新挂载/system为读写关键检查返回是否success adb remount # Step 3将证书推送到系统证书目录注意路径和文件名 adb push charles-proxy-ssl-proxying-certificate.pem /system/etc/security/cacerts/9a5ba575.0 # Step 4修正文件权限与属主必须按顺序且chown必须在chmod之后 adb shell chown root:root /system/etc/security/cacerts/9a5ba575.0 adb shell chmod 644 /system/etc/security/cacerts/9a5ba575.0注意chown和chmod必须在adb shell中用双引号包裹成单条命令执行。如果分开写成adb shell chown ... adb shell chmod ...在某些Shell环境下会因管道中断导致第二条不执行。这是我在OnePlus 8上踩过的坑——ls -l显示权限已改但实际logcat仍报错最后发现chown根本没生效。3.3 验证证书是否被系统加载三重校验法光看文件存在不够必须确认系统真正加载了它。我总结出三重校验法缺一不可文件层校验确认文件存在且属性正确adb shell ls -l /system/etc/security/cacerts/9a5ba575.0 # 必须输出-rw-r--r-- 1 root root size date /system/etc/security/cacerts/9a5ba575.0系统日志层校验搜索证书加载日志adb logcat -b events | grep -i cert | tail -n 20 # 正常应看到certmgr: Added cert to system store: 9a5ba575.0 # 或至少certmgr: Loading certs from /system/etc/security/cacerts/应用层校验用目标App发起HTTPS请求并观察Charles清除微信缓存设置→通用→存储空间→清理缓存重启微信在Charles中开启Include过滤器填入https://微信内任意点击如“服务”页观察Charles是否出现wechat.com域名的HTTPS会话。实测经验微信首次加载可能仍失败因SSL Session复用缓存了旧证书。必须清除App数据或重启手机强制建立新TLS握手。这点常被忽略导致误判方案失败。3.4 失败回滚与安全兜底如何优雅退出而不留隐患万一操作后手机异常如无法联网、App闪退立即执行回滚# 删除证书文件必须在adb root状态下 adb root adb shell rm /system/etc/security/cacerts/9a5ba575.0 # 恢复/system为只读防止误操作 adb remount关键心得ADB直刷最大的风险不是改坏系统而是证书文件残留导致后续Magisk模块冲突。比如你直刷后又装Magisk模块两个同名证书9a5ba575.0同时存在系统可能随机加载一个造成抓包时有时灵有时不灵。所以每次切换方案前务必先adb shell ls /system/etc/security/cacerts/ | grep 9a5ba575确认清理干净。这是我帮三个客户排障时发现的共性问题——他们以为Magisk模块没生效其实是旧证书还在捣鬼。4. Magisk模块方案绕过AVB校验的“无侵入式”系统证书注入当ADB直刷在Android 11设备上宣告失效adb remount失败或/system挂载为roMagisk模块就成了唯一可靠的选择。它不修改/system原始镜像而是在启动时通过init.rc注入用overlay机制将证书“叠加”到系统证书区路径上。这种方式完美规避AVB校验且支持热更新——模块启停无需重启手机。但Magisk方案绝不是“下载个模块点启用”那么简单它有自己的一套构建规范和调试逻辑。我基于Magisk v25.2实测整理出零基础可落地的全流程。4.1 模块结构解析为什么system/etc/security/cacerts必须是符号链接Magisk模块的核心是customize.sh脚本和system目录结构。但关键点在于模块中的system/etc/security/cacerts不能是普通文件夹必须是符号链接指向/data/magisk下的实际证书目录。原因有二Magisk在启动时会将/data/magisk下的内容通过overlayfs挂载到/system对应路径如果模块里直接放cacerts文件夹Magisk会把它当作静态文件复制无法动态更新且在Android 12上可能因SELinux策略被拒绝。正确结构如下用树状图表示charles-system-cert/ ├── customize.sh ├── module.prop └── system/ └── etc/ └── security/ └── cacerts - /data/magisk/cacerts # 必须是符号链接customize.sh负责在模块启用时创建/data/magisk/cacerts并写入证书module.prop定义模块元信息system/etc/security/cacerts这个符号链接是Magisk识别“需要overlay挂载”的关键标记。4.2 构建模块从零开始打包一个可运行的Magisk模块第一步创建模块根目录charles-system-cert并编写module.propidcharles-system-cert nameCharles System Cert version1.0 versionCode1 authorYourName descriptionInstall Charles root cert to system store via Magisk第二步创建customize.sh这是模块的“大脑”负责证书部署#!/sbin/sh # 使用/sbin/sh而非/bin/sh确保在recovery模式下也能执行 # 定义证书哈希和路径 CERT_HASH9a5ba575 CERT_SRC/data/adb/modules/charles-system-cert/cert.pem # 模块内证书源 CERT_DST/data/magisk/cacerts/${CERT_HASH}.0 # Magisk overlay目标 # 创建目标目录 mkdir -p /data/magisk/cacerts # 复制证书并修正权限Magisk要求644且root:root cp $CERT_SRC $CERT_DST chown root:root $CERT_DST chmod 644 $CERT_DST # 输出日志供调试可通过magisk log查看 echo [Charles Cert] Installed $CERT_HASH.0 to /data/magisk/cacerts第三步将Charles证书重命名为cert.pem放入模块目录charles-system-cert/cert.pem然后创建符号链接# 在模块根目录下执行 mkdir -p system/etc/security ln -sf /data/magisk/cacerts system/etc/security/cacerts第四步压缩为ZIP注意必须用zip -r且根目录不能嵌套zip -r charles-system-cert.zip charles-system-cert/ # 确保解压后直接是charles-system-cert/文件夹而非多一层经验技巧Magisk模块ZIP必须满足三个条件否则安装后不显示或启用失败ZIP内顶层必须是模块文件夹如charles-system-cert/不能是./charles-system-cert/module.prop必须在模块文件夹根目录且编码为UTF-8无BOMcustomize.sh必须有可执行权限chmod x customize.sh否则Magisk跳过执行。我曾因ZIP结构错误模块在Magisk Manager里显示为“已安装但未启用”查了两小时才发现是压缩时多了一层父目录。4.3 启用与调试如何确认Magisk模块真正生效安装ZIP后在Magisk Manager中启用模块然后执行# 1. 检查/data/magisk/cacerts下证书是否存在 adb shell ls -l /data/magisk/cacerts/ # 2. 检查/system/etc/security/cacerts是否被正确overlay adb shell ls -l /system/etc/security/cacerts/ # 正常应显示lrwxrwxrwx 1 root root 22 2024-01-01 12:00 /system/etc/security/cacerts - /data/magisk/cacerts # 3. 查看Magisk日志确认customize.sh执行成功 adb shell magisk --log | grep -i Charles Cert # 应看到[Charles Cert] Installed 9a5ba575.0 to /data/magisk/cacerts调试陷阱如果/system/etc/security/cacerts显示为普通文件夹而非符号链接说明模块未正确加载。此时需进入Magisk Manager → 模块 → 长按模块 → “重新安装”或执行adb shell magisk --remove-modules清空所有模块后重试。这是因为Magisk的overlay机制是“启动时一次性挂载”模块启用后不重启旧挂载不会自动更新。4.4 兼容性增强针对Android 12 SELinux策略的补丁处理Android 12起SELinux对/data/magisk路径的访问控制更严格。实测发现某些模块在Pixel 6Android 12上证书能写入/data/magisk/cacerts但系统启动时拒绝加载logcat报avc: denied { read } for path/data/magisk/cacerts/9a5ba575.0。解决方案是在customize.sh末尾添加SELinux上下文修正# 在customize.sh最后添加 chcon u:object_r:system_file:s0 /data/magisk/cacerts/${CERT_HASH}.0chcon命令用于修改文件SELinux上下文u:object_r:system_file:s0是系统证书文件的标准上下文。添加后证书就能通过SELinux策略检查。这个补丁虽小却是Android 12设备上Magisk模块能否成功的关键——没有它模块形同虚设。5. 实战避坑指南从真实故障现场还原的7个致命细节再完美的方案落到真实设备上也会遇到千奇百怪的问题。我把过去半年帮开发者、安全研究员、产品经理解决的23个Charles抓包故障案例浓缩成7个最具代表性的“致命细节”。它们不写在任何官方文档里但每一个都足以让你卡住三天。5.1 细节1Charles证书过期时间必须早于2038年1月19日32位时间戳陷阱Android系统底层使用32位有符号整数存储证书有效期Unix时间戳最大值为2147483647对应UTC时间2038-01-19 03:14:07。如果Charles证书的Not After时间晚于此比如2040年系统在解析证书时会因整数溢出将有效期解释为负数直接判定证书已过期。现象是证书文件名、权限、路径全对logcat却报Certificate expired。解决方案在Charles中导出证书前先在Help → SSL Proxying → Install Charles Root Certificate界面点击右下角Export...选择PEM格式然后用OpenSSL重签一个有效期较短的证书# 生成新私钥可复用原密钥此处为演示 openssl genrsa -out charles-key.pem 2048 # 用原证书信息签发新证书有效期设为10年远小于2038 openssl req -new -x509 -key charles-key.pem -out charles-new.pem -days 3650 -subj /CNCharles Proxy SSL Proxying Certificate亲测有效某金融App团队用默认Charles证书有效期至2045年死活抓不到包按此法重签后秒通。这是Android底层C库的硬限制无解只能绕。5.2 细节2小米/OPPO/vivo等厂商ROM的“系统证书白名单”机制这些厂商在AOSP基础上增加了私有安全框架例如小米的MIUI Security Center、OPPO的Safe Center会维护一个“可信系统证书白名单”。即使你把Charles证书放进/system/etc/security/cacerts这些中心也会在后台扫描并自动删除“非官方证书”。现象是证书刚放进去ls能看到但10秒后消失logcat无任何提示。破解方法进入手机设置 → 密码与安全 → 系统安全 → 安全中心各品牌路径略有不同关闭恶意网址拦截、隐私保护、病毒扫描等所有带“安全”字样的实时防护功能或在安全中心 → 设置 → 高级设置中找到证书管理手动添加9a5ba575.0为信任证书。这不是逆向是厂商预埋的“后门式”管控。不关掉它任何技术方案都是空中楼阁。5.3 细节3Android 14的/apex分区证书路径变更Android 14将ConscryptAndroid的TLS实现库移入/apex/com.android.conscrypt分区其证书路径变为/apex/com.android.conscrypt/etc/security/cacerts。如果只往/system/etc/security/cacerts放证书部分App尤其是调用Conscrypt.newSSLContext()的仍会失败。解决方案Magisk模块中需同时覆盖两个路径。修改customize.sh# 新增对/apex路径的支持 APEX_CERT_DST/apex/com.android.conscrypt/etc/security/cacerts/${CERT_HASH}.0 mkdir -p /apex/com.android.conscrypt/etc/security/cacerts cp $CERT_SRC $APEX_CERT_DST chown root:root $APEX_CERT_DST chmod 644 $APEX_CERT_DST chcon u:object_r:system_file:s0 $APEX_CERT_DST注意/apex分区在启动后是只读的但Magisk的overlay机制允许在/apex下创建符号链接。所以模块中system/apex/...路径需同样设为符号链接指向/data/magisk/apex_cacerts。5.4 细节4Charles自身代理设置的“SSL Proxying”必须精确匹配域名很多人以为只要全局代理开了所有HTTPS都能抓。其实Charles的Proxy → SSL Proxying Settings里必须显式添加目标域名如wechat.com:443、alipay.com:443否则即使证书装对了Charles也不会解密该域名流量。更隐蔽的坑是通配符*.com:443不生效必须写全二级域名。例如*.taobao.com:443能匹配www.taobao.com但*.com:443匹配不了任何域名。验证方法在Charles中开启Sequence视图看目标域名请求是否显示为HTTPS CONNECT未解密还是HTTPS已解密。未解密就说明SSL Proxying没配对。5.5 细节5App的android:usesCleartextTraffictrue不是万能钥匙有些App在AndroidManifest.xml中声明了android:usesCleartextTraffictrue你以为这就意味着它会走HTTP明文可以绕过HTTPS抓包。错。这只是允许App发起HTTP请求不影响其HTTPS请求的证书校验逻辑。微信就算开了这个照样只认系统证书。真正能绕过证书校验的是android:networkSecurityConfig指向的XML文件里面可能有domain-configtrust-anchorscertificates srcsystem//trust-anchors/domain-config。所以别被usesCleartextTraffic迷惑它和证书信任无关。5.6 细节6ADB over Network无线ADB导致的证书加载延迟当用adb connect IP:5555无线连接设备时adb shell命令的执行延迟比USB高300~500ms。这会导致customize.sh中cp和chown命令看似执行成功但实际文件写入未完成系统启动时就读取了空文件。现象是/data/magisk/cacerts/9a5ba575.0大小为0字节。解决方案在customize.sh中cp后添加sync命令强制刷盘cp $CERT_SRC $CERT_DST sync # 关键确保文件物理写入 chown root:root $CERT_DST chmod 644 $CERT_DST这个sync命令在USB连接下非必需但在无线ADB下是救命稻草。我曾因此浪费一整天排查证书内容最后发现文件根本没写进去。5.7 细节7Magisk Hide与Zygisk的“证书可见性”冲突启用Magisk Hide或ZygiskMagisk v24的模块注入机制后部分安全敏感App如银行类会检测/system/etc/security/cacerts目录的文件数量或哈希值。如果它发现目录里多了一个9a5ba575.0可能直接退出。此时需配合DenyList功能在Magisk Manager → 设置 →DenyList中勾选目标App如com.icbc这样Magisk Hide会阻止该App读取/system/etc/security/cacerts目录使其“看不见”Charles证书从而正常启动。但注意DenyList只对Zygisk生效Legacy模式下无效。6. 方案选型决策树根据你的设备状态、技能水平和项目目标快速匹配最优路径看到这里你可能纠结“我该用ADB直刷还是Magisk模块”答案不是非此即彼而是取决于三个维度设备Root状态、Android版本、以及你对稳定性和可维护性的要求。我画了一张决策树帮你5秒内锁定方案。判断条件推荐方案原因与适用场景设备未Root且Android ≤ 9放弃系统级证书改用Frida Hook SSL/TLS函数如okhttp3.OkHttpClient的sslSocketFactoryAndroid 9及以下adb remount普遍可用但未Root则无法获取root权限直刷不可行Magisk需Root故唯一出路是Hook。适合临时分析不追求长期稳定。设备已RootAndroid 7~10且adb remount返回success首选ADB直刷流程最短4条命令无额外依赖失败后回滚快adb shell rm即可。适合Pixel、Nexus、部分OnePlus用户追求极简和透明。设备已RootAndroid 11且Magisk已安装v23首选Magisk模块绕过AVB和SELinux双重限制支持热更新模块启停不需重启。适合长期做逆向分析的开发者或需在多台设备上复现的测试工程师。设备已RootAndroid 11但Magisk未安装且不愿刷入ADB直刷 disable-verity临时方案先执行adb disable-verity需bootloader解锁再adb remount即可强制挂载/system为rw。但此操作会禁用AVB降低安全性仅限测试机使用。适合紧急排障不推荐生产环境。设备是小米/OPPO/vivo等深度定制ROM且Magisk已安装Magisk模块 关闭厂商安全中心厂商ROM的私有安全框架会主动清理证书Magisk模块虽能写入但需同步关闭安全中心的实时防护否则证书秒删。这是唯一兼顾兼容性与稳定性的组合。最后分享一个血泪教训某电商公司让我帮他们抓取竞品App的下单接口我按常规用ADB直刷在Pixel上搞定交付后对方在小米12上复现失败。折腾两天才发现是MIUI安全中心在作祟。从此我的标准动作是拿到设备第一件事不是连Charles而是进设置关掉所有带“安全”“防护”字样的开关。这比调任何技术参数都管用。我在实际项目中发现超过60%的“抓包失败”问题根源不在技术方案本身而在对Android安全模型的理解断层——把证书当普通文件把系统当Linux服务器。当你真正吃透subject_hash_old、dm-verity、SELinux上下文这些底层机制就会明白所谓“逆向抓包”本质是和Android安全体系的一场精密对话。每一次成功的HTTPS流量捕获都是你对这套对话规则的一次准确破译。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2639806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…