Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >第三届“中科实数杯”团体赛wp

第三届“中科实数杯”团体赛wp

作者头像
回天
发布于 2023-04-25 07:53:30
发布于 2023-04-25 07:53:30
2K00
代码可运行
举报
文章被收录于专栏:Ga1@xy's W0r1dGa1@xy's W0r1d
运行总次数:0
代码可运行

团体赛题目整体分为两部分:磁盘镜像分析 & 安卓模拟器分析,难度上第一部分比较简单,第二部分涉及到很多安卓相关知识,相对比较困难

Part1 磁盘镜像分析(300分)

基于硬盘镜像文件(windows7disk.E01),要求:

01 请找出操作系统设置的时区名称。(20分)

取证大师自动取证,在系统痕迹的时区信息里

02 请给出源磁盘的SHA256哈希值。(10分)

计算镜像的hash,直接取证大师就可以

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
名称: E:\中科实数杯\windows7disk.E01; 设备类型: 磁盘镜像; 大小: 30.00 GB; 
扇区数: 62,914,560; 计算扇区数: 62914560; 起始扇区: 0; 结束扇区: 62914559; 设备序列号: ; 
SHA-256: 4547A61A11064DF47B272A4803788597F9A5E9AC0F11A93ABE58C8B8588956CB  

03 请找出使用Bitlocker加密的虚拟磁盘文件中文件名为“新建文本文档.txt”的文件内容。(10分)

在取证之后的文件分析中可以看到有2个vhd文件

和一个bitlocker的恢复密钥

用火眼把镜像仿真起来,把vhd挂载后用恢复密钥尝试分别解密,发现第二个可以解开,里面的txt内容就是本题答案

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C6B1DC7D41DFF9D85800217E7F8CC3BF7A89BA349C69A5B2C4E9966CD3689CC4

04 请找出各分区文件系统类型。(10分)

镜像里只有一个分区,类型为NTFS

05 请找出操作系统主机名。(10分)

取证结果的系统信息里

06 请找出操作系统版本号。(10分)

同上,也在系统信息里

07 请找出使用Bitlocker加密的虚拟磁盘文件恢复密钥文件名是什么。(20分)

在取证结果的密钥检索里可以看到这个文件,跳转到源文件即可看到文件名,或者仿真之后与之前的vhd文件在同一个文件夹

08 请找出用户“poiuy”的SID。(10分)

取证结果的用户信息里

09 请找出操作系统中安装的浏览器名称的对应的安装日期。(10分)

仿真后可以看到只安装了Google Chrome,在取证结果的安装软件中可以找到对应的安装日期

10 请找出曾经连接到该系统的U盘的品牌、序列号、最后插拔日期。(20分)

取证结果的USB设备使用痕迹中

11 请找出回收站中的文件(含原位置)。(30分)

取证结果的用户痕迹中有回收站删除记录

12 请找出用户“poiuy”的登录密码。(10分)

取证结果的用户信息里,可以看到对应用户密码的NThash值

如果本题只是问hash值的话到这里就可以了,如果想要得到原本的密码,还需要爆破hash,当然在线网站可以直接解,如果你有比较全的字典也可以用hashcat进行爆破(最终密码是09876543),hashcat使用方法就不细讲了,可以看看文章

13 请找出使用Bitlocker加密的虚拟磁盘文件。(20分)

在第三题已经提到过了

*14 请找出使用Bitlocker加密的虚拟磁盘文件中文件名为“my.vhd.txt”的文件内容。(30分)

这题...真的有解吗

已经尝试了n种方法但至今未解,除了出题方外现在应该还没有人解出此题,感兴趣的同学可以继续尝试,在此我提供一些思路:

  1. 在内存中找恢复密钥(EFDD)
  2. 爆破弱密码(hashcat、bitcracker)
  3. 在镜像中搜寻密钥相关信息(明文或恢复)

15 请找出操作系统中安装的Android模拟器名称和安装日期。(20分)

取证结果的安装软件里:夜神模拟器

16 请找出操作系统中安装的浏览器最后浏览过的网站域名。(10分)

取证结果的上网记录里,安装的浏览器为Google Chrome,看历史记录,找最后访问的

域名的话只取https://passport.baidu.com/即可

17 请找出操作系统最后登录的用户。(10分)

取证结果的账户登录里

18 请找出操作系统安装日期。(10分)

取证结果的系统信息里

19 请找出操作系统中安装的浏览器“自动填充”中保存的网站密码信息(网站、用户名、密码)。(20分)

在已知用户poiuy登录密码的情况下,利用火眼的取证分析可以直接得到答案

20 请给出源磁盘的大小(字节)。(10分)

源磁盘30G,转换成bytes即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
30 * 1024 * 1024 * 1024 = 32212254720

Part2 安卓模拟器分析

当事人在电脑上安装了Android模拟器,下面内容均为模拟器中Android系统及应用的信息,请分析如下事项:

21 请通过分析给出登录“大发”应用使用的密码保存在本地文件中时使用的加密算法名称。(10分)

目标应用在安卓模拟器里,所以首先要找到模拟器对应的虚拟机,在火眼取证分析里可以看到

在取证大师里也能找到,只不过他没有单独的手机模拟器识别的分类,找起来会不那么直观

把这个模拟器的vmdk文件导出,再用取证工具进行分析,手机应用后缀为apk,直接搜索关键字,可以看到名字比较独特的就一个

将其导出后丢进jeb反编译,找到和登录相关的部分

可以看到在loadPWD()方法中调用了securityGet()这个函数,继续跟进

可以看到在这个函数中有调用了一个加密相关的函数encrypt(),再跟进

得到加密算法

22 请提供“大发”应用安装包的SHA256哈希值。(10分)

可以取证大师直接跳转到base.apk的源文件进行计算,也可以把apk拿出来自己算,也可以雷电app智能分析

23 请分析系统自带浏览器,通过分析给出浏览器主页的链接。(20分)

此题仿真后打开模拟器,查看浏览器的设置即可,但是想要查看浏览器的设置,首先要解锁手机,单纯绕过密码解锁手机的方式很简单,在模拟器所在目录的bin目录下有adb.exe,可以用它来调用shell执行一些命令

首先打开模拟器,然后在bin目录打开cmd,执行adb.exe shell,接下来我们只需要找到储存锁屏密钥的文件并将其删去即可

我们通过夜神模拟器可以得知这个安卓虚拟机的版本是Android 7,此版本的锁屏密码相关文件如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/data/system/gatekeeper.pattern.key
/data/system/gatekeeper.password.key

我们先将这两个文件复制出来,在接下来解锁屏密码时会用到

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adb pull /data/system/gatekeeper.pattern.key C:\Users\poiuy\Desktop
adb pull /data/system/gatekeeper.password.key C:\Users\poiuy\Desktop

然后再删掉

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm -rf /data/system/gatekeeper.pattern.key
rm -rf /data/system/gatekeeper.password.key

删除后重启即可直接进入模拟器

打开手机自带的浏览器,右上角设置,常规,打开即可看到设置的默认主页

24 请通过分析给出“大发”应用中使用的“极光推送”的AppKey值。(10分)

要解出这道题,首先我们要知道什么是AppKey

Appkey简称API接口验证序号,是用于验证API接入合法性的。接入哪个网站的API接口,就需要这个网站允许才能够接入,如果简单比喻的话:可以理解成是登陆网站的用户名。

我们一般要在AndroidManifest.xml文件中定义三方平台的appkey,appid等属性值,类似下面的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<meta-data
            android:name="UMENG_APPKEY"
            android:value="59dee5af82b6355b3d00000c" />

在得知AppKey的所在位置后,我们就可以轻松找到本题的答案,以JEB为例

25 请分析给出“大发”应用的签名里的国家代码。(10分)

雷电app智能分析或APK Messenger

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CN=Bee Weng, OU=App Team, O=Desheng Group, L=Manila, ST=Republika ng Pilipinas, C=PH

可以看到这些信息,参考文章,可以知道参数的含义分别是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CN: 名字和姓氏
OU:    组织单位名称
O:    组织名称
L:    城市或区域名称
ST://自治区名称
C:    国家/地区代号

所以本题答案为PH,是菲律宾的国家域名

26 请通过分析给出Android设备的序列号。(10分)

进入模拟器后打开设置,最下面的关于平板电脑,状态信息

27 请通过分析给出连接的WiFi名称。(10分)

同样进入模拟器,设置中的WLAN

28 请分析给出“大发”应用的主Activity。(10分)

主Activity在AndroidManifest.xml文件中,形如以下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   <activity android:name=".MainActivity">
            <intent-filter >
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

在将apk反编译后,在AndroidManifest.xml中搜索对应的字符串即可

这部分acitivty对应的android:name就是此题的答案

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
org.zywx.wbpalmstar.uex11818.activity.SplashActivity

29 请提供“大发”应用包名称及安装日期。(10分)

包名直接雷电app分析就有

安装日期就在火眼中找到对应的包名

30 请通过分析给出登录“大发”应用使用的密码。(30分)

这道题我们可以利用逆向思维,这个应用有记住密码的功能,那么我们先去分析应用是如何记住密码的

在网上查找一些Android实现记住密码的方法,可以找到一些文章

可以看到这些方法都有一个共同的特点:使用 SharedPreferences 来保存密码

接下来我们再分析本题所给的应用,以工具jadx为例,搜索关键字remember可以看到一系列相关的内容,其中就包含了rememberpassword

双击跳转到saveRememberPasswordStatus()这个函数,可以看到本应用也同样是使用 SharedPreferences 来保存密码

同时也可以看到在这个函数所在类的最开始也定义了一系列和用户登录相关的参数,其中也包括了用户名和密码

那么我们直接跳转到声明SharedPreferencesManager类的地方,在一开始可以看到默认存储的PreferencesName

可以初步确定保存在本地的用户名和密码存储在这个文件中,而 SharedPreferences 存储变量的文件路径为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/data/data/[应用程序包]/shared_prefs

使用 SharedPreferences 储存的参数都是以键值对的形式保存在xml文件中

包名我们在第29题已经得到了,即完整路径为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/data/data/com.elughkhktu.leohwiuirgk/shared_prefs/ds-preferences.xml

利用adb连shell,输出此文件的内容

可以看到用户登录账号为djujjf,即39题的答案

还有两个类似base64加密的非明文字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PH1fbMBQcfO/9coO/+2vAA==
GmyQesTJK3mvE9Tf1wxfWA==

直接解base64为乱码,推测是加密过的密码,继续看源码,在下面可以看到加密相关的函数

加解密用到的函数为SharedPreferencesAesCrypto类下的encrypt和decrypt,直接跳转到类声明

可以看到是先AES/CBC/PKCS5Padding再base64,解密即可得到用户密码

31 请通过分析给出“大发”应用用户登录信息保存在本地的文件名。(10分)

上题中已经提到了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/data/data/com.elughkhktu.leohwiuirgk/shared_prefs/ds-preferences.xml

32 请提供“大发”应用中硬编码的服务器URL列表中的域名。(10分)

硬编码是指将可变变量用一个固定值来代替的方法,与从外部获取数据或在运行时生成数据不同,硬编码数据通常只能通过编辑源代码和重新编译可执行文件来修改,更通俗地讲,就是把一个本来应该(可以)写到配置信息中的信息直接在程序代码中写死了。

既然是直接写在程序代码中的网址,那我们就反编译apk后在源码中寻找

搜索关键字URL,可以找到一个叫WebServerUrl的类,打开可以看到里面都是些定义的文件字符串

根据定义我们可以知道这些都是软编码(非硬编码),指向的都是些可以直接修改的文件,而在下面我们可以看到四个非常醒目的网址

这四个网址都是直接写死在代码中,无法进行修改的,就是本题的答案

33 请通过分析给出Android版本号。(10分)

进入模拟器,设置最下面

34 请分析给出“大发”应用的开发者姓名。(10分)

可见25题,Bee Weng

35 请提供“大发”应用版本号。(10分)

APK Messenger

36 请通过分析给出系统中时区设置信息。(10分)

模拟器设置,日期和时间

37 请分析给出“大发”应用的签名中记录的有效期(日期)。(10分)

APK Messenger

38 请提供“大发”应用使用的权限。(10分)

进入模拟器,设置,应用,应用权限

39 请通过分析给出登录“大发”应用使用的账号。(10分)

见30题,djujjf

40 请通过分析给出Android系统解锁图案。(30分)

参考文章:Cracking gatekeeper.pattern.key

镜像所给Android版本为7.1.2(33题已经提到过),在6.0~8.0的Android版本中,对锁屏密码采取的加密方式为scrypt-hash

在第23题中,我们已经提到了此版本下Android的锁屏密码储存在本地的文件位置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/data/system/gatekeeper.pattern.key
/data/system/gatekeeper.password.key

而有关锁屏密码的详细信息则储存在device_policies.xml文件中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/data/system/device_policies.xml

将这三个文件都提取出来,xml文件内容如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<policies setup-complete="true">
<active-password quality="65536" length="9" uppercase="0" lowercase="0" letters="0" numeric="9" symbols="0" nonletter="9" />
</policies>

可以看到密码的长度为9,所以先生成一个由不重复9位数组成的密码字典,再对密码进行比对hash爆破即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import struct
import binascii
import scrypt

N = 16384;
r = 8;
p = 1; 

f=open('gatekeeper.pattern.key', 'rb')
blob = f.read() 
s = struct.Struct('<'+'17s 8s 32s')
(meta, salt, signature) = s.unpack_from(blob) #Extract the key information

f1=open('password.txt','r')
lines=f1.readlines()
for data in lines:
    password=data.strip()   
    to_hash = meta
    to_hash += password #to_hash = meta + passwd
    hash = scrypt.hash(to_hash, salt, N, r, p)
    print 'signature  %s' % signature.encode('hex')
    print 'Hash:      %s' % hash[0:32].encode('hex')
    print 'Equal:     %s' % (hash[0:32] == signature)
    
    if hash[0:32] == signature: #if same, over
        print "Pattern Key: " + password
        print "Found!!!"
        exit()

成功得到图形锁:123578946

其他wp

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WMCTF2021-Flag Thief WP
e01镜像是目前取证中最常用的镜像格式,在制作过程中进行校验与压缩,兼具了速度与完整性两方面,对于e01镜像仿真最简单的方式就是直接将其作为物理盘挂载到本地,可以用工具 AccessData FTK Imager,挂载后我们简单翻一翻文件内容,可以看到安装了 VMware Tools,在路径
回天
2023/04/25
9110
WMCTF2021-Flag Thief WP
长安杯2021赛题复现详解
2021年4月25日,上午8点左右,警方接到被害人金某报案,声称自己被敲诈数万元;经询问,昨日金某被嫌疑人诱导裸聊, 下载了某“裸聊”软件,导致自己的通讯录和裸聊视频被嫌疑人获取,对其进行敲诈,最终金某不堪重负,选择了报警;警 方从金某提供的本人手机中,定向采集到了该“裸聊”软件的安装包--zhibo.apk(检材一),请各位回答下列问题:(题目 中需要通过分析出来的答案对检材二三四五解压,解压密码为IP的情况,需要在密码后增加-CAB2021,例: 192.168.100.100-CAB2021)
回天
2023/04/25
2.6K0
长安杯2021赛题复现详解
长安杯2022赛题复现详解
【不咕鸟】三战长安杯,有幸在本科阶段的最后一次长安杯取得了一个新的突破,比起第一年的全国第三,也算是善始善终啦。
回天
2023/04/25
2.3K0
长安杯2022赛题复现详解
android渗透测试学习笔记
attify/lot exploitation/penetration testing Drozer Exploit-Me漏洞
tea9
2022/07/16
8840
*CTF2021 Misc部分wp
下载得到一个没有后缀的文件,010查看可以发现是vhdx文件,改后缀为vhdx,尝试挂载,发现被bitlocker加密
回天
2023/04/25
6670
*CTF2021 Misc部分wp
第六届蓝帽杯初赛
今天打了一天这个比赛,也是第一次接触取证题发现还可以接受,这个比赛拿了个稍微好点的成绩,但是身为web手两个web题都没写出来,说来有点惭愧,也进了半决赛,再接再厉吧
故里[TRUE]
2023/04/19
3930
第六届蓝帽杯初赛
DASCTF_六月赛MISC部分wp
除此之外线索都没给,开局一张图,剩下全靠猜,结果考点是个工具提取盲水印,一点与水印相关信息也不给,就硬猜,感觉给点相关信息会成为一个不错的考点吧……
回天
2023/04/25
4640
DASCTF_六月赛MISC部分wp
网鼎杯2020-白虎组-密码柜
下载附件得到一个vmem文件和一个kdbx文件,百度可知这个kdbx文件是由KeePass这个软件加密得到的
回天
2023/04/25
8060
网鼎杯2020-白虎组-密码柜
Android 渗透测试学习手册 第三章 Android 应用的逆向和审计
在本章中,我们将查看 Android 应用程序或.apk文件,并了解其不同的组件。 我们还将使用工具(如 Apktool,dex2jar 和 jd-gui)来逆向应用程序。 我们将进一步学习如何通过逆向和分析源代码来寻找 Android 应用程序中的各种漏洞。 我们还将使用一些静态分析工具和脚本来查找漏洞并利用它们。
ApacheCN_飞龙
2022/12/01
1.3K0
第三届数据库大赛 ADB 性能挑战赛赛题总结
之前在分享《海量无序数据寻找第 K 大的数》这篇文章时,就已经提到过我参加了阿里云举办的《第三届数据库大赛创新上云性能挑战赛–高性能分析型查询引擎赛道》,传送门:https://tianchi.aliyun.com/competition/entrance/531895/introduction。截止到 8 月 20 日,终于结束了漫长的赛程。作为阿里云员工的我,按照赛题规定,只能参加初赛,不能参加复赛,出于不影响比赛的目的,终于等到了比赛完全结束,才动笔写下了这篇参赛总结。
kirito-moe
2021/09/08
8010
第三届数据库大赛 ADB 性能挑战赛赛题总结
Android应用测试速查表
写在前面 最近研究了下Android应用测试,找了一些资料,觉得OWASP这篇写的还是比较系统的,所以翻译出来给大家分享下。文中的翻译尽可能保持原文格式,但一些地方为了通顺和易于理解也做了一定改动,如
FB客服
2018/02/23
1.8K0
Android应用测试速查表
《吐血整理》高级系列教程-吃透Fiddler抓包教程(28)-Fiddler如何抓取Android7.0以上的Https包-下篇
虽然依旧能抓到大部分Android APP的HTTP/HTTPS包,但是别高兴的太早,有的APP为了防抓包,还做了很多操作: ① 二次加密 有的APP,在涉及到关键数据通信时,会将正文二次加密后才通过HTTPS发送,我们抓包抓到的是一堆二进制base64 ② 自带HTTP Client 像支付宝那样的变态,自己带了一个基于so的HTTP Client库,对于关键数据,都不走URLConnection和OkHttp,而是走自己的HTTP Client库,甚至一些WebView页面的渲染,都是先用自带的HTTP Client请求得到json数据,然后填到HTML模板里面,再在WebView里渲染出来。 ③ SSL/TLS Pinning,APP自带服务端证书,除了自带证书什么都不信
北京-宏哥
2022/10/28
29.4K0
对一个手游修改器锁机APP的分析
于是就进行下载分析(使用或分析这种未知风险的APP,建议都在模拟器上进行操作,因为你不知道这APP是否有危害,在模拟器上运行,如果出问题了,顶多就是删除模拟器然后重新再来,如果再手机上运行,那么这个就可能需要你进行刷机才可解决。),在模拟器上安装完APP,点击启动APP然后就出现了下面的一幕。屏幕被锁了,界面还带有极具讽刺的文字。
小道安全
2022/12/03
1K0
对一个手游修改器锁机APP的分析
Crack App | yrx App 对抗赛第二、第三题加密签名对抗
昨天整了个珍惜逆向的团购,当了一晚上的客服,结果还是很多人错过拍大腿了,算了算了 还是老老实实写文章吧
咸鱼学Python
2022/06/24
5110
Crack App | yrx App 对抗赛第二、第三题加密签名对抗
长安杯2020赛题复现详解
接群众举报,网站“www.kkzjc.com”可能涉嫌非法交易,警方调取了该网站的云服务器镜像(检材1.DD),请对检材1进行分析,获取证据,并根据线索解锁更多检材,深入挖掘出更多与案件有关的信息。
回天
2023/04/25
1.4K1
长安杯2020赛题复现详解
2025年山东省职业院校技能大赛高职组信息安全管理与评估样题
本次大赛,各位选手需要完成三个阶段的任务,每个阶段需要按裁判组专门提供的U盘中的“信息安全管理与评估竞赛答题卡-模块X”提交答案。
小胡同学
2024/12/13
5103
工程师必备APP抓包技能
一台上网电脑就能完成 APP 抓包分析一条龙服务。这是一篇 APP 抓包分析总结性文章,采用 APP 模拟器与 Web 调试代理工具组合玩法。从此 APP 抓包分析能力变得游刃有余,告别脚忙手乱。
全栈程序员站长
2022/09/02
2.1K0
工程师必备APP抓包技能
安恒杯DASCTF——四月春季赛部分wp
可以看到v6的起始是A0h,v5起始是30h,那么两个相减为70h,转为10进制刚好为112
L1near
2022/11/11
8090
安恒杯DASCTF——四月春季赛部分wp
Android + Appium 自动化测试完整的环境配置及代码详解
参考大神博客:https://www.cnblogs.com/fnng/p/4540731.html
全栈程序员站长
2022/09/09
8580
Android + Appium 自动化测试完整的环境配置及代码详解
微软修复Bitlocker驱动器加密工具的绕过漏洞
微软最近修复了Windows Bitlocker驱动器加密中的一个漏洞,这个漏洞可以被用来快速绕过加密功能获取到受害者加密的重要信息。 加密软件中的漏洞 磁盘加密工具是一个重要的保护软件,所有的电子设备都需要依靠它们来保护用户的数据。在它们出现之前,攻击者只需要启动Linux,然后安装存有用户数据的磁盘就可以访问用户的加密文件了。 但是,这些软件也存在着漏洞给黑客们机会。 九月,谷歌Project Zero团队的安全专家James Forshaw在Windows系统上安装的加密软件TrueCrypt发现
FB客服
2018/02/07
1.5K0
微软修复Bitlocker驱动器加密工具的绕过漏洞
相关推荐
WMCTF2021-Flag Thief WP
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验