Android HTTPS抓包失败根源:系统证书信任链详解

news2026/5/24 6:12:36
1. 为什么HTTPS抓包总在“证书验证失败”这一步卡死你肯定试过Wireshark抓不到App的加密流量Fiddler在Windows上跑得好好的一换到Android手机就提示“您的连接不是私密连接”Charles反复弹出证书安装提醒却始终无法解密HTTPS请求——这些现象背后其实都指向同一个被绝大多数教程轻描淡写带过的硬门槛系统级证书信任链的完整建立。HTTPCanary作为Android平台最成熟的HTTPS抓包工具其核心能力远不止于界面美观或协议解析丰富。它真正不可替代的价值在于能绕过应用层的SSL Pinning检测通过Xposed/EdXposed/LSPosed模块注入但前提是目标设备必须将HTTPCanary生成的CA证书以“系统证书”身份载入Android信任库。而绝大多数用户卡住的地方根本不是HTTPCanary没开代理、不是手机没连WiFi而是——证书只装进了“用户证书”目录系统和App压根不认。这里有个关键事实从Android 7.0Nougat开始Google强制要求所有Target SDK ≥ 24的应用默认只信任系统证书存储区/system/etc/security/cacerts/中的证书完全忽略用户证书/data/misc/user/0/cacerts-added/。这意味着哪怕你在设置里点十次“安装证书”只要没进系统分区微信、支付宝、银行类App、甚至新版Chrome都会坚定地拒绝与你的抓包工具建立可解密的TLS连接。这不是HTTPCanary的bug是Android安全模型的主动防御机制。我去年帮三个不同行业的客户做移动App安全审计其中两个项目前期卡了整整三天就困在这个环节。他们用的是同一台Pixel 4aHTTPCanary版本都是5.3.1唯一区别是一个刷了Magisk并挂载了system分区另一个坚持“不Root”结果前者半小时搞定全量HTTPS解密后者直到最后一天才意识到——所谓“免Root方案”本质是妥协方案只能抓极少数未启用SSL Pinning的老应用。所以这篇指南不叫“HTTPCanary入门教程”而叫“终极指南”是因为它直面这个最痛、最常被回避的真相没有系统证书就没有真正的HTTPS抓包自由。接下来的内容我会带你从零开始分四条技术路径Magisk Root、ADB临时注入、定制ROM预置、厂商解锁system挂载逐层拆解每种方案的原理、实操步骤、成功率、风险点以及我在上百台真机测试中总结出的“三秒判断法”——看到报错日志就能立刻定位是证书哈希不匹配、还是SELinux策略拦截、或是证书别名冲突。你不需要是Android内核工程师但需要知道证书不是文件是信任凭证安装不是点击是权限博弈抓包不是功能是安全边界的动态协商。2. HTTPCanary证书的本质不是.pem文件而是系统信任锚点很多人把HTTPCanary导出的证书当成普通SSL证书来对待——复制到电脑双击安装、用OpenSSL转格式、甚至试图用KeyStore Explorer导入——这完全误解了它的角色。HTTPCanary生成的证书本质上是一个自签名CA根证书Root CA Certificate它的唯一使命是成为你本地抓包环境的“上帝证书”。所有经由HTTPCanary代理的HTTPS请求都会被它中间人劫持并用这个CA签发一张“假”的服务器证书比如伪造的www.alipay.com证书再把这个假证书发给手机App。App校验时发现这张假证书是由一个它信任的CA签发的即HTTPCanary的CA于是放行。整个过程的关键前提只有一个App信任这个CA。而Android的信任机制是分层且刚性的。我们来看一个真实抓包失败时的Logcat日志片段W System.err: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.注意最后一句“Trust anchor for certification path not found”——信任锚点未找到。这里的“anchor”锚点指的就是HTTPCanary CA证书在系统证书库中的物理存在。它不是“找不到文件”而是“在系统信任锚点列表里查无此证”。那么这个锚点具体长什么样它不是你导出的httpcanary_ca.crt那个PEM文件而是经过Android特有格式转换后的二进制哈希文件。Android系统证书库/system/etc/security/cacerts/里存放的从来不是PEM或DER而是以证书主题哈希值Subject Hash命名的.0文件。例如我的HTTPCanary证书主题哈希是9a5ba575那它在系统里就必须存为/system/etc/security/cacerts/9a5ba575.0且内容是原始证书的DER编码非PEM。为什么必须是DER因为Android的libboringssl在加载证书时会直接调用d2i_X509()函数解析二进制数据而PEM是Base64封装头尾标记的文本格式系统底层根本不识别。这也是为什么你用openssl x509 -in httpcanary_ca.crt -outform DER -out ca.der转换后再adb push ca.der /sdcard/ca.der最后adb shell su -c cp /sdcard/ca.der /system/etc/security/cacerts/9a5ba575.0依然可能失败——因为少了最关键的一步设置正确的文件权限和SELinux上下文。我们来算一笔权限账。/system/etc/security/cacerts/目录的标准权限是drwxr-xr-x755属主root:root。而你push进去的.0文件如果没改权限会继承/sdcard/的默认权限通常是-rw-rw----660系统在启动时扫描证书库发现这个文件权限太宽松组和其他用户可读会直接跳过加载日志里甚至不会报错只是静默忽略。更隐蔽的是SELinux在启用了Enforcing模式的设备上几乎所有现代Android 8.0设备/system分区的每个文件都有强制的安全上下文标签比如u:object_r:system_file:s0。如果你用cp命令复制新文件会继承源目录的上下文u:object_r:shell_data_file:s0系统证书加载器会因上下文不匹配而拒绝读取。这就是为什么很多教程教“adb remount adb push”却没告诉你adb shell su -c chmod 644 /system/etc/security/cacerts/9a5ba575.0和adb shell su -c chcon u:object_r:system_file:s0 /system/etc/security/cacerts/9a5ba575.0这两行命令是生死线。我实测过在Pixel 5上漏掉chcon证书永远显示为“未信任”在三星S21上漏掉chmod 644HTTPCanary会提示“证书已安装但无法启用”。还有一点常被忽略证书别名Alias。HTTPCanary在生成证书时会指定一个CNCommon Name比如HTTPCanary Root CA。但Android系统在生成哈希时只认证书的Subject字段整体而某些旧版HTTPCanary5.2.0生成的证书Subject里包含空格或特殊字符导致哈希计算异常。解决方案不是重装APP而是用OpenSSL手动提取Subject并标准化# 提取原始Subject可能含乱码 openssl x509 -in httpcanary_ca.crt -noout -subject # 标准化Subject去除多余空格确保CN开头 openssl x509 -in httpcanary_ca.crt -noout -subject | sed s/ //g | sed s/CN/CN/g然后用标准化后的Subject重新计算哈希# 正确计算Android哈希关键 openssl x509 -inform PEM -subject_hash_old -in httpcanary_ca.crt | head -1注意必须用-subject_hash_old参数这是Android 7.0兼容的旧式哈希算法。用-subject_hash会得到新式哈希系统不认。提示计算哈希前务必确认证书是有效的。我遇到过三次证书失效案例原因都是HTTPCanary的内置时间戳服务异常导致生成的证书有效期只有1小时。解决方法是在HTTPCanary设置里关闭“自动更新证书”手动导出一次再用openssl x509 -in ca.crt -text -noout检查Validity字段。3. 四条技术路径实操详解从Magisk Root到厂商解锁的完整闭环面对系统证书安装这个硬骨头业界存在四种主流技术路径它们不是简单的“难易之分”而是安全边界、设备控制权、适用场景的三维取舍。下面我将基于在华为Mate 40 Pro、小米12、OnePlus 9、Pixel 6四台主力测试机上的完整实操记录为你逐条拆解。3.1 Magisk Root路径高成功率、需解锁Bootloader、对系统侵入性最低这是目前综合体验最好的方案成功率稳定在92%以上测试127台设备。核心逻辑是利用Magisk的systemless特性在不修改/system分区的前提下通过/magisk挂载点动态注入证书让系统在运行时“认为”证书已存在于/system/etc/security/cacerts/。前置条件设备已解锁Bootloader华为/小米需申请Pixel/OnePlus官网可直接解锁已刷入Magisk v25.2低版本Magisk不支持证书注入模块HTTPCanary已安装并开启“高级设置→启用SSL解密”实操步骤在Magisk App中进入“模块”→右上角“”→选择HttpCanary-Cert-Injector模块GitHub开源非官方但经严格审计模块安装后重启设备关键很多用户跳过此步导致失败重启后打开HTTPCanary → 长按左上角菜单 → “设置” → “SSL解密” → 点击“安装证书”此时HTTPCanary会自动检测到Magisk环境弹出提示“检测到Magisk环境是否使用系统证书注入”选择“是”为什么这步能绕过权限问题因为Magisk模块在/magisk下创建了一个符号链接/magisk/system/etc/security/cacerts/9a5ba575.0 → /data/magisk/modules/httpcanary-cert-injector/cert.der。系统启动时init进程会优先读取/magisk/system/下的路径而Magisk的overlay机制确保了这个链接对所有进程可见。整个过程不触碰/system分区因此无需adb remount也规避了SELinux上下文问题。踩坑实录在小米12上我第一次失败是因为开启了“MIUI优化”开关。该开关会强制Magisk模块在后台被杀导致证书注入服务中断。关闭路径设置→我的设备→全部参数→连续点击“MIUI版本”7次→开启开发者选项→关闭“MIUI优化”。关闭后证书注入成功率从35%跃升至100%。3.2 ADB临时注入路径零Root、纯命令行、仅限调试阶段适用于开发初期快速验证或无法Root的测试机。本质是利用ADB的shell权限在设备运行时将证书临时写入/data/misc/user/0/cacerts-added/用户证书区再通过am broadcast发送广播强制系统刷新证书缓存。命令清单需提前开启USB调试# 1. 将证书转为DER格式并推送到设备 openssl x509 -in httpcanary_ca.crt -outform DER -out ca.der adb push ca.der /sdcard/ca.der # 2. 获取当前用户ID通常为0 adb shell dumpsys activity | grep userId # 3. 创建用户证书目录若不存在 adb shell mkdir -p /data/misc/user/0/cacerts-added/ # 4. 复制证书并设置权限关键 adb shell cp /sdcard/ca.der /data/misc/user/0/cacerts-added/9a5ba575.0 adb shell chmod 644 /data/misc/user/0/cacerts-added/9a5ba575.0 adb shell chown system:system /data/misc/user/0/cacerts-added/9a5ba575.0 # 5. 强制系统刷新证书缓存 adb shell am broadcast -a android.intent.action.ACTION_SECURITY_SETTINGS_CHANGED为什么说它是“临时”方案因为/data分区在设备重启后会被init进程清空或重置权限。更重要的是Android 12引入了CertificateInstallerService它会在每次开机时校验/data/misc/user/*/cacerts-added/下证书的签名链完整性若发现非Google Play商店签发的证书会自动移除。我在Pixel 6Android 13上实测该方案平均存活时间为47分钟。避坑技巧不要依赖adb shell settings put global类命令去修改全局设置那是无效的。真正起作用的是第5步的广播但必须确保广播接收器已注册。HTTPCanary 5.3.0内置了对该广播的监听旧版本需手动安装CertInstaller辅助App。3.3 定制ROM预置路径企业级部署、一次写入、永久生效面向金融、政务类客户他们要求所有测试终端出厂即支持抓包且不允许任何用户干预。方案是在定制AOSP ROM时将HTTPCanary CA证书直接编译进/system/etc/security/cacerts/并预置HTTPCanary APK到/system/app/。编译关键步骤将ca.der文件放入build/target/product/security/目录修改build/target/product/core.mk添加PRODUCT_COPY_FILES \ build/target/product/security/ca.der:system/etc/security/cacerts/9a5ba575.0在device/yourvendor/yourdevice/device.mk中确保PRODUCT_PROPERTY_OVERRIDES ro.adb.secure0允许ADB调试优势与代价优势是绝对稳定证书随系统启动即加载不受任何运行时策略影响。代价是ROM编译周期长平均8小时且每次HTTPCanary升级都要重新编译ROM。我们为某省级政务App做渗透测试时采用此方案交付了200台预装ROM的华为平板客户反馈“开箱即用从未掉链子”。一个血泪教训在编译时必须用-subject_hash_old计算的哈希名否则ROM刷入后adb shell ls /system/etc/security/cacerts/能看到文件但adb shell logcat | grep -i cert会持续报Failed to load certificate from /system/etc/security/cacerts/9a5ba575.0。原因是AOSP构建系统在打包system.img时会调用mkbootfs它内部的证书加载器只认旧哈希。3.4 厂商解锁system挂载路径终极掌控、最高兼容、需承担变砖风险这是最硬核的方案适用于需要100%兼容所有App包括银行类强校验App的场景。核心是获取Bootloader解锁权限 → 刷入TWRP Recovery → 用TWRP挂载/system分区 → 手动复制证书 → 修复权限与SELinux。详细流程访问设备厂商官网如oneplus.com/support/unlock申请Bootloader解锁码通常需等待3-7天下载对应机型TWRP镜像如twrp-3.7.0_12-oneplus9.imgfastboot flash recovery twrp-3.7.0_12-oneplus9.imgfastboot boot twrp-3.7.0_12-oneplus9.img临时启动TWRP避免刷死在TWRP中点击“高级→文件管理器”导航至/system/etc/security/cacerts/长按空白处→“上传”选择本地ca.der文件上传后长按文件名→“更改权限”设置为644所有者设为root:root返回TWRP主界面→“高级→文件系统修复”→勾选/system→滑动执行为什么这是“终极”方案因为TWRP在挂载/system时是以rw读写模式挂载的且绕过了Android的verity校验adb remount在已启用dm-verity的设备上会失败。更重要的是TWRP的文件管理器在上传文件时会自动为新文件分配正确的SELinux上下文无需手动chcon。风险提示此方案会清除设备所有数据Factory Reset且部分厂商如华为、vivo已彻底关闭Bootloader解锁通道。我在OnePlus 9上操作时因误点了“格式化/data”导致测试数据全丢耗时两天重建环境。因此我强烈建议操作前务必用TWRP的“备份”功能完整备份/system、/boot、/vendor三个分区。4. 证书安装后的深度验证不只是“绿色对勾”而是全链路可信度审计证书放进/system/etc/security/cacerts/只是万里长征第一步。真正的挑战在于如何确认它已被系统正确加载、被HTTPCanary成功识别、并被目标App无条件信任。很多用户看到HTTPCanary界面上出现绿色对勾就以为大功告成结果抓包时依然全是[SSL] Handshake Failed。下面这套验证流程是我过去三年在27个不同品牌、41个Android版本上反复锤炼出的“五步可信度审计法”。4.1 第一步系统级加载验证——用logcat看证书是否被libboringssl接纳这是最底层的验证。在设备已安装证书、HTTPCanary已开启代理的状态下执行adb logcat -b system | grep -i load.*cert\|trust.*anchor | tail -20成功日志特征I TrustManager: Loading system CA certificate: 9a5ba575.0 I TrustManager: Successfully loaded 137 certificates from /system/etc/security/cacerts/失败典型日志W TrustManager: Failed to load certificate from /system/etc/security/cacerts/9a5ba575.0: java.io.IOException: Wrong version of key store.这个Wrong version错误90%是因为证书格式不对——你推送的是PEM而非DER。此时应立即用openssl x509 -in ca.crt -outform DER -out ca.der重新转换。4.2 第二步HTTPCanary运行时验证——检查其内部证书状态机HTTPCanary 5.2.0内置了详细的证书诊断页。路径设置→SSL解密→右上角“...”→证书诊断。这里会显示三个关键状态状态项正常值异常表现根本原因系统证书存在✅ Found❌ Not found文件名哈希错误或路径不对证书可读取✅ Readable❌ Permission deniedchmod未设为644或属主非root证书已信任✅ Trusted❌ UntrustedSELinux上下文错误或证书过期我曾在一个OPPO Reno7上前三项全绿但第四项“已信任”是红叉。排查发现该机启用了“隐私保护模式”会强制重置所有用户证书的SELinux标签。解决方案是设置→安全→隐私保护→关闭“隐私保护模式”再重启。4.3 第三步App层信任验证——用curl模拟目标App的TLS握手别信浏览器要信curl。因为Chrome等浏览器有自己的证书缓存而curl会直连系统信任库。在已root的设备上adb shell su -c curl -v --cacert /system/etc/security/cacerts/9a5ba575.0 https://httpbin.org/get预期输出* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use h2 * Server certificate: * subject: CNHTTPCanary Root CA * start date: Jan 01 00:00:00 2023 GMT * expire date: Dec 31 23:59:59 2033 GMT * issuer: CNHTTPCanary Root CA * SSL certificate verify ok.看到SSL certificate verify ok.说明系统级信任链已打通。如果报unable to get local issuer certificate说明证书未被libboringssl加载如果报certificate has expired说明证书有效期不足。4.4 第四步SSL Pinning绕过验证——用Frida Hook确认Pinng失效即使证书被信任App仍可能通过SSL Pinning证书固定拒绝连接。HTTPCanary的绕过能力取决于你是否安装了对应的Xposed/LSPosed模块。验证方法# 在PC端执行需提前安装frida-server到手机 frida -U -f com.tencent.mm --no-pause -l ssl-pinning-bypass.js其中ssl-pinning-bypass.js是一个标准Frida脚本用于HookOkHttpClient和TrustManager。当看到日志中出现[SSL PINNING BYPASSED]字样且HTTPCanary能捕获到微信的/cgi-bin/mmpayweb-bin/checklogin请求时证明绕过成功。关键经验SSL Pinning绕过不是万能的。某些App如招商银行会校验证书的Subject Key Identifier而HTTPCanary生成的证书SKID是随机的。此时需用keytool -printcert -file ca.der提取SKID再用openssl x509 -in ca.crt -set_serial 0x$(date %s%N | cut -c1-16) -signkey ca.key -out ca_fixed.crt重新签发强制设置SKID。4.5 第五步生产环境压力验证——72小时不间断抓包稳定性测试最后一步也是最容易被忽略的。在真实测试环境中连续运行HTTPCanary 72小时监控三项指标CPU占用率稳定在3%-5%若超过12%说明证书加载后触发了高频证书链校验常见于证书CRL吊销列表检查失败内存泄漏每小时增长不超过2MB否则需检查HTTPCanary日志中是否有OutOfMemoryError: Failed to allocate a 1048576 byte allocation证书解析内存溢出抓包成功率对同一API如https://api.example.com/v1/user发起1000次请求成功率应≥99.8%我在为某电商App做压测时发现第48小时后抓包成功率骤降至82%。最终定位到HTTPCanary的证书缓存机制在长时间运行后会因/data/data/com.guoshi.httpcanary/cache/目录下临时文件堆积导致证书解析超时。解决方案是设置→高级设置→清理缓存并勾选“证书缓存”。注意所有验证步骤必须在关闭手机省电模式、禁用后台限制、保持屏幕常亮的前提下进行。Android的Doze模式会强制冻结HTTPCanary的后台服务导致抓包中断这不是证书问题而是系统策略。5. 我的实战手记那些文档里永远不会写的细节与教训写了这么多技术细节最后想和你分享几个在真实项目里摔出来的跟头。这些不是理论是沾着灰、带着汗的经验。第一个教训别迷信“一键安装”脚本。去年我接手一个紧急项目客户提供了号称“全机型通用”的HTTPCanary证书安装脚本。运行后华为P40显示成功但抓包时所有HTTPS请求都返回ERR_CONNECTION_RESET。抓Log发现脚本用adb shell pm install强行安装了一个叫CertInstaller.apk的App而该App在EMUI 11上会与系统证书管理器冲突导致/data/misc/user/0/cacerts-added/被清空。解决方案卸载那个App然后老老实实用Magisk路径。第二个细节证书有效期不是越长越好。HTTPCanary默认生成10年有效期证书听起来很美。但在Android 12上系统会对超长有效期证书39个月触发额外的OCSP Stapling检查而HTTPCanary的本地OCSP响应器并不完善导致握手超时。我的建议是在HTTPCanary设置里把证书有效期手动设为36个月这是Android证书策略的黄金平衡点。第三个认知颠覆“系统证书”不等于“全局信任”。即使证书进了/system/etc/security/cacerts/某些App如Signal、Session会使用Network Security Config强制指定信任的CA列表完全无视系统证书库。这时你需要的不是重装证书而是反编译APK修改其res/xml/network_security_config.xml添加certificates srcsystem/。但这涉及法律风险务必获得客户书面授权。最后一点个人体会抓包的终点从来不是看到明文而是理解数据背后的业务逻辑。我见过太多人证书装得无比完美抓了一堆/api/v1/submit的POST请求却看不懂里面encrypted_data字段的AES-GCM密钥轮转规则。HTTPCanary再强大也只是工具。真正的价值是你透过它看清了那个App是如何用RSA加密AES密钥、如何用HMAC-SHA256防篡改、又如何在客户端埋点里偷偷上传设备指纹。所以当你下次再看到“证书安装成功”的绿色对勾请别急着截图发朋友圈。先打开logcat敲一行adb logcat | grep -i trust听听系统在说什么。那才是真正的、属于工程师的确认音。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2639993.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…