【iOS安全】使用LLDB调试iOS App | LLDB基本架构 | LLDB安装和配置

article/2025/6/26 17:06:17

LLDB基本架构

参考:
https://crifan.github.io/ios_re_dynamic_debug/website/debug_code/lldb_debugserver.html
https://book.crifan.org/books/ios_re_debug_debugserver_lldb/website/

在这里插入图片描述
在这里插入图片描述

LLDB安装和配置

1. 让iPhone中出现/Developer/usr/bin/debugserver

最初的iPhone中没有 /Developer/usr/bin/debugserver

图片名称

需要让iPhone中出现/Developer/usr/bin/debugserver

1.1 启动xcode并创建项目

用数据线把iPhone连到MacBook ,MacBook 上打开xcode,创建项目并连接设备,自动配置好后xcode就会把debugserver发送到iPhone上

1.2 报错:MacBook xcode连接iPhone时报错xxx is not available

在这里插入图片描述

Window → Devices and Simulators 报错如下:
在这里插入图片描述

The current device configuration is unsupported. This iPhone 8 (Model A1863, A1905, A1906, A1907) is running iOS 14.3 (18C66), which is not supported by Xcode 11.7.
Domain: com.apple.dtdevicekit
Code: 601
Recovery Suggestion: To run on this device, please update to a version of Xcode that supports iOS 14.3. You can download Xcode from the Mac App Store or the Apple Developer website.
User Info: {DVTRadarComponentKey = 487927;DeviceType = "iPhone10,1";
}

解决方法:
参考:https://developer.apple.com/forums/thread/659166
在这里插入图片描述
从这里下载14.3的支持文件
https://github.com/JinjunHan/iOSDeviceSupport/tree/master/iOSDeviceSupport

复制粘贴到
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/

但是出现新的报错:
在这里插入图片描述
在这里插入图片描述

DetailsFailed to start remote service on device.
Domain: com.apple.dtdevicekit
Code: 811
Recovery Suggestion: Please check your connection to your device.
User Info: {DVTRadarComponentKey = 261622;
}
--
The service is invalid.
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402653150
User Info: {DVTRadarComponentKey = 261622;MobileDeviceErrorCode = "(0xE8000022)";"com.apple.dtdevicekit.stacktrace" = (0   DTDeviceKitBase                     0x000000011d61e81a DTDKCreateNSErrorFromAMDErrorCode + 2331   DTDeviceKitBase                     0x000000011d630161 __63-[DTDKRemoteDeviceConnection startFirstServiceOf:unlockKeybag:]_block_invoke + 5642   DTDeviceKitBase                     0x000000011d62f829 __48-[DTDKRemoteDeviceConnection futureWithSession:]_block_invoke_3 + 223   DTDeviceKitBase                     0x000000011d620df9 __DTDKExecuteInSession_block_invoke_2 + 354   DTDeviceKitBase                     0x000000011d620209 __DTDKExecuteWithConnection_block_invoke_2 + 4735   DTDeviceKitBase                     0x000000011d620007 __DTDKExecuteWithConnection_block_invoke + 1066   libdispatch.dylib                   0x00007fff70ae9658 _dispatch_client_callout + 87   libdispatch.dylib                   0x00007fff70af56ec _dispatch_lane_barrier_sync_invoke_and_complete + 608   DVTFoundation                       0x0000000103f24138 DVTDispatchBarrierSync + 2089   DVTFoundation                       0x0000000103efaa93 -[DVTDispatchLock performLockedBlock:] + 6410  DTDeviceKitBase                     0x000000011d61ff08 DTDKExecuteWithConnection + 22611  DTDeviceKitBase                     0x000000011d620c63 DTDKExecuteInSession + 37612  DTDeviceKitBase                     0x000000011d62f66a __48-[DTDKRemoteDeviceConnection futureWithSession:]_block_invoke_2 + 13113  DVTFoundation                       0x0000000103f215c4 __DVT_CALLING_CLIENT_BLOCK__ + 714  DVTFoundation                       0x0000000103f23206 __DVTDispatchAsync_block_invoke + 119415  libdispatch.dylib                   0x00007fff70ae86c4 _dispatch_call_block_and_release + 1216  libdispatch.dylib                   0x00007fff70ae9658 _dispatch_client_callout + 817  libdispatch.dylib                   0x00007fff70aeec44 _dispatch_lane_serial_drain + 59718  libdispatch.dylib                   0x00007fff70aef609 _dispatch_lane_invoke + 41419  libdispatch.dylib                   0x00007fff70af8c09 _dispatch_workloop_worker_thread + 59620  libsystem_pthread.dylib             0x00007fff70d43a3d _pthread_wqthread + 29021  libsystem_pthread.dylib             0x00007fff70d42b77 start_wqthread + 15
);
}
--
System InformationmacOS Version 10.15.7 (Build 19H1323)
Xcode 11.7 (16142)

但是手机上出现构建好的App

解决方法见下文

1.3 报错:运行编写的App时报错Failed to start remote service on device.

在这里插入图片描述

在这里插入图片描述

DetailsFailed to start remote service on device.
Domain: com.apple.dtdevicekit
Code: 811
Recovery Suggestion: Please check your connection to your device.
User Info: {DVTRadarComponentKey = 261622;
}
--
The service is invalid.
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402653150
User Info: {DVTRadarComponentKey = 261622;MobileDeviceErrorCode = "(0xE8000022)";"com.apple.dtdevicekit.stacktrace" = (0   DTDeviceKitBase                     0x000000011d61e81a DTDKCreateNSErrorFromAMDErrorCode + 2331   DTDeviceKitBase                     0x000000011d630161 __63-[DTDKRemoteDeviceConnection startFirstServiceOf:unlockKeybag:]_block_invoke + 5642   DTDeviceKitBase                     0x000000011d62f829 __48-[DTDKRemoteDeviceConnection futureWithSession:]_block_invoke_3 + 223   DTDeviceKitBase                     0x000000011d620df9 __DTDKExecuteInSession_block_invoke_2 + 354   DTDeviceKitBase                     0x000000011d620209 __DTDKExecuteWithConnection_block_invoke_2 + 4735   DTDeviceKitBase                     0x000000011d620007 __DTDKExecuteWithConnection_block_invoke + 1066   libdispatch.dylib                   0x00007fff70ae9658 _dispatch_client_callout + 87   libdispatch.dylib                   0x00007fff70af56ec _dispatch_lane_barrier_sync_invoke_and_complete + 608   DVTFoundation                       0x0000000103f24138 DVTDispatchBarrierSync + 2089   DVTFoundation                       0x0000000103efaa93 -[DVTDispatchLock performLockedBlock:] + 6410  DTDeviceKitBase                     0x000000011d61ff08 DTDKExecuteWithConnection + 22611  DTDeviceKitBase                     0x000000011d620c63 DTDKExecuteInSession + 37612  DTDeviceKitBase                     0x000000011d62f66a __48-[DTDKRemoteDeviceConnection futureWithSession:]_block_invoke_2 + 13113  DVTFoundation                       0x0000000103f215c4 __DVT_CALLING_CLIENT_BLOCK__ + 714  DVTFoundation                       0x0000000103f23206 __DVTDispatchAsync_block_invoke + 119415  libdispatch.dylib                   0x00007fff70ae86c4 _dispatch_call_block_and_release + 1216  libdispatch.dylib                   0x00007fff70ae9658 _dispatch_client_callout + 817  libdispatch.dylib                   0x00007fff70aeec44 _dispatch_lane_serial_drain + 59718  libdispatch.dylib                   0x00007fff70aef609 _dispatch_lane_invoke + 41419  libdispatch.dylib                   0x00007fff70af8c09 _dispatch_workloop_worker_thread + 59620  libsystem_pthread.dylib             0x00007fff70d43a3d _pthread_wqthread + 29021  libsystem_pthread.dylib             0x00007fff70d42b77 start_wqthread + 15
);
}
--
System InformationmacOS Version 10.15.7 (Build 19H1323)
Xcode 11.7 (16142)

不好使的解决办法:
https://cloud.tencent.com/developer/ask/sof/107747170

在这里插入图片描述
cd ~/Library/Developer/Xcode/DerivedData
rm -rf *

解决方法:
安装Xcode 12.3

1.4 报错: Signing for xxx requires a development team

Signing for “lldbTest” requires a development team.Select a development team in the Signing & Capabilities editor.
在这里插入图片描述
解决方法:
在这里插入图片描述

添加team
在这里插入图片描述

1.5 报错: iPhone is not available. Please reconnect the device

iPhone is not available. Please reconnect the device
在这里插入图片描述
解决方法:
参考:https://blog.csdn.net/zjpjay/article/details/108770188

Window → Devices And Simulators 能看到报错信息
在这里插入图片描述
在这里插入图片描述
我是iOS 14.3,因此可以下载xcode 12.3

下载地址
https://developer.apple.com/download/all/

使用xcode 12.3之后出现新的报错
在这里插入图片描述

1.6 报错: iPhone is not available. Please reconnect the device

Failed to start remote service “com.apple.debugserver” on device.
Please check your connection to your deviice.

解决方法:
我没管这个报错,好像没什么影响,这一步骤只要保证iPhone中出现/Developer/usr/bin/debugserver即可

1.7 iPhone中出现debugserver

/Developer/usr/bin/debugserver
在这里插入图片描述

2. 确保iPhone中debugserver有正确的权限entitlement

2.1 从iPhone中导出debugserver到MacBook

在这里插入图片描述

2.2 MacBook上给debugserver加权限

参考:https://www.cnblogs.com/ludashi/p/5730338.html

找到iPhone中的debugserver,在macos上进行如下操作:

2.2.1 根据机型对debugserver进行瘦身
lipo -thin arm64 debugserver -output debugserver

-thin后方填写你的测试机相应的ARM指令集架构即可
指令集架构参考:https://blog.csdn.net/zgpeace/article/details/104290302
在这里插入图片描述
在这里插入图片描述

2.2.2 安装ldid
brew install ldid
2.2.3 导出debugserver现有的权限

参考:https://www.jianshu.com/p/fa2f080fb4bb

ldid -e debugserver > debugserver-origin.entitlements

我导出的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><key>com.apple.springboard.debugapplications</key><true/><key>com.apple.backboardd.launchapplications</key><true/><key>com.apple.backboardd.debugapplications</key><true/><key>com.apple.frontboard.launchapplications</key><true/><key>com.apple.frontboard.debugapplications</key><true/><key>seatbelt-profiles</key><array><string>debugserver</string></array><key>com.apple.private.logging.diagnostic</key><true/><key>com.apple.security.network.server</key><true/><key>com.apple.security.network.client</key><true/><key>com.apple.private.memorystatus</key><true/><key>com.apple.private.cs.debugger</key><true/>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><key>com.apple.springboard.debugapplications</key><true/><key>com.apple.backboardd.launchapplications</key><true/><key>com.apple.backboardd.debugapplications</key><true/><key>com.apple.frontboard.launchapplications</key><true/><key>com.apple.frontboard.debugapplications</key><true/><key>seatbelt-profiles</key><array><string>debugserver</string></array><key>com.apple.private.logging.diagnostic</key><true/><key>com.apple.security.network.server</key><true/><key>com.apple.security.network.client</key><true/><key>com.apple.private.memorystatus</key><true/><key>com.apple.private.cs.debugger</key><true/>
</dict>
</plist>

ldid对于FAT格式会输出多份entitlement权限信息,需要去除其中重复的一份xml
参考:https://book.crifan.org/books/ios_re_debug_debugserver_lldb/website/usage_note/entitlement/check_entitlement/

例如我这里从iPhone8中导出的debugserver就是包含arm64和arm64e的FAT格式的debugserver,因此entitlement权限信息就有多份,需要去掉一份

2.2.4 修改entitlement权限

然后对entitlement权限进行如下修改

参考:https://book.crifan.org/books/ios_re_debug_debugserver_lldb/website/debugserver_lldb_debug/proper_entitlemets.html

  • 已加上权限:get-task-allow、task_for_pid-allow、run-unsigned-code
    目的:允许debugserver调试其他app
  • 已去掉权限:com.apple.security.network.server、com.apple.security.network.client
    目的:防止后续lldb调试报错Failed to get connection from a remote gdb process
  • 已去掉权限:seatbelt-profiles
    目的:方式后续debugserver加上-l的日志文件时报错:Failed to open log file for writing errno = 1 Operation not permitted

最终修改为如下,保存为debugserver.entitlements:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><key>com.apple.springboard.debugapplications</key><true/><key>com.apple.backboardd.launchapplications</key><true/><key>com.apple.backboardd.debugapplications</key><true/><key>com.apple.frontboard.launchapplications</key><true/><key>com.apple.frontboard.debugapplications</key><true/><key>com.apple.private.logging.diagnostic</key><true/><key>com.apple.private.memorystatus</key><true/><key>com.apple.private.cs.debugger</key><true/><key>get-task-allow</key><true/><key>task_for_pid-allow</key><true/><key>run-unsigned-code</key><true/>
</dict>
</plist>
2.2.5 对debugserver进行重新签名

如果iOS < 15.0,可以用ldid
ldid -Sdebugserver.entitlements debugserver
注意S是大写,并且与debugserver紧挨着

如果iOS ≥ 15.0 或者 iOS < 15.0,可以用codesign
codesign -f -s - --entitlements debugserver.entitlements debugserver
(未尝试)

2.3 将debugserver拷贝到iPhone并赋执行权限

将已经签好权限的debugserver拷贝到iPhone的/usr/bin目录下

iPhone中的,原始版本的debugserver位置是:/Developer/usr/bin/debugserver
但该位置只读,无法修改
所以才需要拷贝到/usr/bin,因为/usr/bin是用于存放可执行文件工具的路径之一
理论上也可以拷贝到/bin/sbin /usr/sbin等,保证此路径出现在echo $PATH中即可
参考:
https://book.crifan.org/books/ios_re_debug_debugserver_lldb/website/debugserver_lldb_debug/proper_entitlemets.html

在这里插入图片描述

chmod +x debugserver
在这里插入图片描述
赋完权限后,你就可以使用debugserver命令来开启debugserver了
在这里插入图片描述

3. iPhone中运行debugserver

整体参考:
https://book.crifan.org/books/ios_re_debug_debugserver_lldb/website/debugserver_lldb_debug/mac_run_lldb_debug.html

3.1 attach模式

先手动启动app,再用debugserver去attach

3.1.1 找到App进程名

一般也就是App的可执行Mach-O文件名

PC端
frida-ps -H 192.168.31.32:6666 -a

6461  顺丰速运       com.sf-express.waybillcn

手机端查看进程名
ps -ef | grep “6461”

  501  6461     1   0 12:02AM ??         0:25.81 /var/containers/Bundle/Application/81449B8F-7C5D-4A06-8970-A3EEDF922AC2/SFMainland_Store_Pro.app/SFMainland_Store_Pro

后续用debugserver attach到App时:

可以使用Mach-O文件名
debugserver 0.0.0.0:12345 -a “SFMainland_Store_Pro”
在这里插入图片描述

可以使用完整Mach-O文件名
debugserver 0.0.0.0:12345 -a “/var/containers/Bundle/Application/81449B8F-7C5D-4A06-8970-A3EEDF922AC2/SFMainland_Store_Pro.app/SFMainland_Store_Pro”
在这里插入图片描述

可以使用进程号
debugserver 0.0.0.0:12345 -a 6461
在这里插入图片描述
其中12345是端口号,可以设置为任意值,只要不和其他端口号冲突即可;后续Macbook中lldb连接时,要用到此端口号

3.1.2 使用iproxy进行端口映射

参考:
https://blog.csdn.net/u010775335/article/details/127691013

需要将iPhone通过数据线连接至MacBook

MacBook安装usbmuxd
参考:https://cloud.tencent.com/developer/article/1173911

brew install usbmuxd

MacBook使用iproxy 将iPhone的端口映射到PC端口

iproxy 12345 12345
第一个参数是你要映射到的电脑端口
第二个是iPhone的端口
然后保持此窗口不动
在这里插入图片描述

3.1.3 用debugserver attach到App

启动顺丰速运app

iPhone SSH端
debugserver 0.0.0.0:12345 -a “SFMainland_Store_Pro”
在这里插入图片描述

3.2 spawn模式(未尝试)

debugserver -x auto 0.0.0.0:12345 “/var/containers/Bundle/Application/FD516591-AAA8-47B4-AD8B-5DA9EC88856B/UCWEB.app/UCWEB”

4. Mac中启动lldb来调试app

MacBook另起终端:
lldb
process connect connect://127.0.0.1:12345
等待若干分钟:
在这里插入图片描述

xxx@xxx lldb % lldb 
(lldb) process connect connect://127.0.0.1:12345
Process 10038 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOPframe #0: 0x0000000102ee6bc0 SFMainland_Store_Pro
->  0x102ee6bc0: adrp   x1, 30440x102ee6bc4: ldr    x1, [x1, #0x1f0]0x102ee6bc8: adrp   x16, 17050x102ee6bcc: ldr    x16, [x16, #0xf78]
Target 0: (SFMainland_Store_Pro) stopped.
(lldb)

此时iPhone SSH 变成
在这里插入图片描述

MacBook
(lldb) b ptrace
(lldb) c

在这里插入图片描述

完整的双侧截图如下:
在这里插入图片描述
在这里插入图片描述

LLDB指令教程

参考:https://www.jianshu.com/p/fa2f080fb4bb

breakpoint set -n “-[RNCWeakScriptMessageDelegate userContentController:didReceiveScriptMessage:]”

breakpoint set -n “-[* userContentController:didReceiveScriptMessage:]”

breakpoint list

禁用所有断点
breakpoint disable

临时修改显示汇编行数
disassemble --count 16
在这里插入图片描述

永久修改显示汇编行数
settings set stop-disassembly-count 16
在这里插入图片描述

用Frida拿到地址,再用LLDB调试

frida-trace -m "-[* userContentController:didReceiveScriptMessage:]"  -H 192.168.71.114:6666 顺丰速运

确认有-[RNCWeakScriptMessageDelegate userContentController:didReceiveScriptMessage:]

lldb检查符号是否存在

(lldb) image lookup -s “-[RNCWeakScriptMessageDelegate userContentController:didReceiveScriptMessage:]”
在这里插入图片描述
没有输出,说明LLDB找不到这个方法

(lldb) image lookup -rn “RNCWeakScriptMessageDelegate.*didReceiveScriptMessage”

问DeepSeek
在这里插入图片描述

// Frida 脚本
const method = ObjC.classes.RNCWeakScriptMessageDelegate["- userContentController:didReceiveScriptMessage:"];
console.log("Method address:", method.implementation);

frida -H 192.168.71.128:6666 -F -l addr-frida-script.js

[*] Starting Hooking
Method address: 0x102bc86dc

(lldb) breakpoint set --address 0x102bc86dc
在这里插入图片描述
打开webview时真的命中了
在这里插入图片描述


http://www.hkcw.cn/article/AThbAtvVgh.shtml

相关文章

RPG19.设置敌人

1.启动项目&#xff0c;创建爱你CharacterBase的子类 2.创建敌人数据资产 3.创建敌人的ASC 4.创建敌人的CombatComponent 5.打开EnemyCharacter&#xff0c; // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "Core…

ROS 2源换源后GPG错误解决方法

报错形式&#xff1a; 解决&#xff1a; 1. 删除旧的 ROS 密钥 sudo rm /etc/apt/trusted.gpg.d/ros.gpg 2. 重新下载并导入新的 ROS GPG 密钥 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /etc/apt/trusted.gpg.d/ros.gpg 3. 确…

day 43

应用cnn对kaggle上的图像数据集进行练习 数据集地址&#xff1a;Cat and Dog import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pyplot as plt im…

哈佛蒋雨融自曝初中被霸凌 母校撤宣传引争议

哈佛蒋雨融自曝初中被霸凌母校撤宣传引争议。在哈佛大学毕业典礼上,中国学生蒋雨融作为代表发表演讲,本应是件荣耀的事情,却因各种质疑声陷入舆论漩涡。她自曝初中时期遭受霸凌的经历,更是将事件推向高潮,让她的母校青岛65中成为焦点,学校迅速撤下了此前的相关宣传。蒋雨…

江淮能靠华为“镀金”翻身吗 自身硬实力与华为软实力的乘法效应

江淮能靠华为“镀金”翻身吗 自身硬实力与华为软实力的乘法效应!江淮汽车在卡车领域享有盛名,尤其是轻卡系列。但江淮集团的产品体系非常广泛,涵盖了重、中、轻、微型卡车、多功能商用车、MPV、SUV、轿车、客车以及专用底盘、变速箱、发动机和车桥等核心零部件。江淮汽车在5…

因性侵被拘的湖南机场董事长被除名 新领导已上任

因性侵被拘的湖南机场董事长被除名 新领导已上任!今年4月,湖南省机场管理集团党委书记、董事长,湖南省机场管理局局长邱继兴因涉嫌性侵一女子被警方刑拘,此事引发了广泛关注。6月2日,该集团官网已撤下邱继兴的职务信息,官方微信公众号中大量关于他的内容也已消失。4月18日…

媒体:关税升级 特朗普似乎有些着急 欧盟警告将加快报复措施

6月2日,美股三大指数集体收涨,道指上涨0.08%,纳指上涨0.67%,标普500指数上涨0.41%。热门科技股多数上涨,AMD和Meta涨幅超过3%,超微电脑上涨近3%,博通涨幅超过2%,英伟达上涨超过1%,特斯拉和谷歌跌幅超过1%。热门中概股也多数上涨,纳斯达克中国金龙指数上涨0.53%。百度…

律师解读孙继海青训机构嗨球纠纷 赔偿金额成争议焦点

6月2日,南方周末发布了一篇专题报道,其中一位爱好足球的律师王国良对孙继海青训机构嗨球和家长之间的纠纷进行了分析。王国良不仅是一名律师,还赞助了一支业余足球队,并全程关注了此次事件。他表示,家长们并不是不愿意赔偿,而是认为18万元的赔偿金额过高,这可能是因为双…

迪丽热巴生日工作室发文 撕拉片写真惊艳全场

迪丽热巴生日工作室发文!迪丽热巴工作室在6月3日生日前夕发布了一组质感十足的“撕拉片”写真,瞬间点燃粉丝热情。这组被网友盛赞为“最权威撕拉片”的作品以胶片独特的显影魅力作为生日序曲,主题直指“迪丽热巴0603生日快乐”。官博配文深情:“胶片显影的第8秒,是时间送来…

48岁女子怀孕以为发福已顺产生子:孙子比新出生的儿子大3岁

48岁女子怀孕以为发福已顺产生子 女儿喜迎弟弟!6月2日,广东河源一名48岁的再婚女子在怀孕后仅15分钟就顺利产下一名男婴。她的28岁女儿对此表示非常高兴,并发文称“从此多一个人为妈妈保驾护航了”。这名女子的丈夫提到,他们的孙子比新出生的儿子大3岁。据报道,这位女子发…

php执行后报502,无错误提示的排查和解决

文章目录 一、阐述问题二、开始排查1.执行代码展示2.PHP层面排查问题3.系统层面排查问题1. 分析系统日志2. core dump 分析2.1 core dump 是什么2.2 core dump 配置 并 生成 core 文件2.3 gdb 解析 core 文件 4. 问题解决 三、赠送内容四、总结 一、阐述问题 这个问题花了我起…

灵动相册,助力教学:在线教学场景的图片管理利器——仙盟引渡仙君-智能编程——仙盟创梦IDE

专为在线教学打造的相册工具&#xff0c;以蓝色专业风设计&#xff0c;纯前端实现&#xff0c;不依赖后端。具备图片管理、浏览缩放及上传功能。界面布局合理&#xff0c;交互体验佳&#xff0c;响应式适应多屏。模块化设计易维护扩展&#xff0c;助教师轻松管图&#xff0c;学…

网络攻防技术三:网络脆弱性分析

文章目录 一、影响安全的因素二、计算机网络三、网络体系结构脆弱性1、因特网容易被攻击的特性 四、典型网络协议安全性分析&#xff08;重要&#xff09;1、IPv42、RIP&#xff08;UDP)3、ICMP(UDP)4、ARP5、OSPF(IP数据报&#xff09;6、BGP(TCP)7、UDP8、TCP9、DNS(UDP)10、…

20250602在荣品的PRO-RK3566开发板的Android13下打开关机对话框

20250602在荣品的PRO-RK3566开发板的Android13下打开关机对话框 2025/6/2 15:07 缘起&#xff1a;需要在荣品的PRO-RK3566开发板的Android13下&#xff0c;打开/增加关机对话框这个功能。 因为手机都有。那我们就找资料吧。 参考资料&#xff1a; https://blog.csdn.net/terry_…

mac电脑安装 nvm 报错如何解决

前言 已知&#xff1a;安装nvm成功&#xff1b;终端输入nvm -v 有版本返回 1. 启动全局配置环境变量失败 source ~/.zshrc~ 返回&#xff1a; source: no such file or directory: /Users/你的用户名/.zshrc~2 安装node失败 nvm install 16.13返回&#xff1a; mkdir: /U…

SOC-ESP32S3部分:26-物联网MQTT连云

飞书文档https://x509p6c8to.feishu.cn/wiki/IGCawAgqFibop7kO83KcsDFBnNb ESP-MQTT 是 MQTT 协议客户端的实现&#xff0c;MQTT 是一种基于发布/订阅模式的轻量级消息传输协议。ESP-MQTT 当前支持 MQTT v5.0。 特性 支持基于 TCP 的 MQTT、基于 Mbed TLS 的 SSL、基于 WebSo…

樊振东德国看球笑容满面 现身欧冠决赛现场

樊振东德国看球笑容满面 现身欧冠决赛现场!5月31日,樊振东在社交媒体上晒照发文:Guten Morgen, Mnchen! 早上好,慕尼黑!樊振东将作为特邀嘉宾现身欧冠决赛现场,观看巴黎圣日耳曼对阵国际米兰的比赛。这场2024至2025赛季欧洲足坛的巅峰对决将于北京时间6月1日凌晨在慕尼黑…

财经观察:一颗大豆的全球化博弈

【环球时报综合报道】编者的话:美国农业部出口检验报告显示,截至2025年5月15日的一周,美国大豆出口检验量较一周前减少50%,为21.78万吨,远低于市场普遍预期的42.5万吨。外媒分析称,受美国发起的关税战影响,美国大豆出口下降,巴西、阿根廷等国正在抓紧拓展中国大豆市场。…

(16)课35:分组时可以指定多个列名,以进行更细致的分组。窗口函数的练习例题:例题一学生成绩,

&#xff08;84&#xff09;分组时可以指定多个列名&#xff0c;一言也是这么说的 &#xff1a; 测试一下 &#xff1a; &#xff08;85&#xff09;练习一 &#xff1a; 针对该表完成第二个例题 &#xff1a; &#xff08;86&#xff09; 例题二 &#xff1a; &#xff08;8…

聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化

聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化 目录 聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化效果一览 完整代码&#xff1a;[聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化](https://blog.csdn.net/kjm13182345320/article/details/148350983…