当前位置: 首页 > news >正文

APP渗透—查脱壳、反编译、重打包签名

APP渗透—查脱壳、反编译、重打包签名

  • 1. 前言
    • 1.1. 其它
  • 2. 安装工具
    • 2.1. 下载jadx工具
      • 2.1.1. 下载链接
      • 2.1.2. 执行文件
    • 2.2. 下载apktool工具
      • 2.2.1. 下载链接
      • 2.2.2. 测试
    • 2.3. 下载dex2jar工具
      • 2.3.1. 下载链接
  • 3. 查壳脱壳
    • 3.1. 查壳
      • 3.1.1. 探探查壳
      • 3.1.2. 棋牌查壳
    • 3.2. 脱壳
      • 3.2.1. 某妃脱壳
        • 3.2.1.1. 尝试脱壳
        • 3.2.1.2. 下载文件
        • 3.2.1.3. 打开文件
        • 3.2.1.4. 打开效果
    • 3.3. 总结
  • 4. 反编译
    • 4.1. 其它
    • 4.2. 反编译尝试
      • 4.2.1. apktool工具
      • 4.2.2. 查看编译效果
      • 4.2.3. 保留dex文件
      • 4.2.4. 其它方式获取dex文件
        • 4.2.4.1. 修改APK后缀
    • 4.3. 编译java源码
      • 4.3.1. 移动dex文件
      • 4.3.2. 执行命令
      • 4.3.3. 查看源码
      • 4.3.4. 总结
  • 5. 后续流程
    • 5.1. 修改数据
      • 5.1.1. 修改apk文件名称
    • 5.2. 回编译
    • 5.3. 应用签名
      • 5.3.1.MT管理器签名
      • 5.3.2.查看效果
      • 5.3.3.查看安装后效果

1. 前言

  在之前的文章都主要都是对APK文件进行信息收集,而信息收集后就需要对APP漏洞进行挖掘,但是从本质上来看,APP其实就是将原先应该部署在网站上的页面塞入APP中,所有的调用都是给予服务器,而且在对WEB漏洞进行挖掘的时候,除了部分漏洞是基于本地页面所导致的,其它的可以说基本上就是由于服务端的问题。

  所以本质上在获取到APP相关的信息后可以直接在浏览器中打开,或者截取相关的数据包来进行截断测试,比如获取到IP地址,可以直接使用nmap进行端口扫描,看看是否开放数据库端口、远程连接端口、中间件端口等,都进行可以扫描挖掘。

1.1. 其它

  本章主要就是介绍一下APP反编译,所谓的反编译在渗透中也是安全的一部分,例如,APP通过反编译植入后门,在发送给别人安装,亦或者通过反编译修改会员功能、免费阅读、破解等均属于APP的范畴中。

  由于个人水平有限,对反编译这一块只能说是作为参考,更细致的可能需要读者自行搜索相关的内容进行学习。

2. 安装工具

  所谓"工欲善其事,必先利其器",那么在反编译之前就需要将相关的工具安装好。

2.1. 下载jadx工具

  jadx - Dex to Java反编译器

  用于从Android Dex和Apk文件生成Java源代码的命令行和GUI工具

2.1.1. 下载链接

  jadx下载

在这里插入图片描述

2.1.2. 执行文件

  下载后进入该文件的lib目录下,执行命令,执行完就能够看到界面了,后面就需要使用到这个界面。

 java -jar .\jadx-gui-1.4.7.jar

在这里插入图片描述

2.2. 下载apktool工具

  apktool是逆向工程第三方,封闭,二进制Android应用程序的工具。它可以将资源解码为接近原始的形式,并在进行一些修改后重建它们。它还使使用应用程序更容易,因为项目喜欢文件结构和自动化的一些重复性任务,如构建apk等。

2.2.1. 下载链接

  apktool下载

  这里需要右击wrapper script选择从链接另存为文件 一定要是bat结尾。

在这里插入图片描述

  选择find newest here然后继续下载最新的jar即可。

在这里插入图片描述

在这里插入图片描述

2.2.2. 测试

  这里输入执行命令后,只要打印出相关的信息就证明成功了。

apktool

在这里插入图片描述

2.3. 下载dex2jar工具

  将 classes.dex 转换为jar文件。

2.3.1. 下载链接

  dex2jar

在这里插入图片描述

3. 查壳脱壳

  查壳和脱壳主要是在我们对APK文件进行反编译的时候,可能会出现APK文件带壳,那么想要顺利的对APK文件进行反编译就需要脱壳,当然啦一边APK文件能够加壳的都是一些大企业才会添加的,普通的企业大概率是不会对APK文件进行加壳。

  加壳是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。是应用加固的一种手法对原始二进制原文进行加密/隐藏/混淆。

  作用:加壳的程序可以有效阻止对程序的反汇编分析,常用来保护软件版权,防止被软件破解。

3.1. 查壳

  查壳主要就是方便对APK文件进行反编译,否则是无法对APK文件进行反编译的,这里网上有很多的工具,这里我就不给了,肯定有更好用的查壳工具,而且这个工具已经断更了,所以这里主要是为了演示。

  这里我们准备两个APK文件,一个是探探的,一个是棋牌的APK文件。

3.1.1. 探探查壳

  可以看到探探APK文件是使用了网易易盾进行加固,而且像这些大厂加固的壳,通常来说是比较难以脱壳的,毕竟加壳公司需要赚钱,如果轻易的被脱壳了,那么还怎么挣钱,当然啦,也不排除有大佬有这方面技术,当时人家也都是用来赚钱的,怎么会公开脱壳方式,而且公开了可能也会有一些风险,至于什么风险,想必应该都知道。

在这里插入图片描述

3.1.2. 棋牌查壳

  这个棋牌是个非法软件,基本上不可能会对软件进行加壳的,那么像这种没有壳的就能够对其进行反编译,或者能够脱壳的APK文件均可以进行反编译。

在这里插入图片描述

3.2. 脱壳

  脱壳就是将原本加壳的APK文件进行脱壳操作,这样就可以将APK文件进行反编译,但是还是那句话,大厂的加壳不是那么轻易脱的,小厂的可能还能将就着脱。

  BlackDex

3.2.1. 某妃脱壳

  这里演示一下某妃脱壳,某妃是没有壳的,你想一个色色APP开发者可能会考虑那么多的安全性么?

3.2.1.1. 尝试脱壳

  可以看到这里是脱壳成功了,那么文件也就存储在这个链接中,如果想要将文件提取出来,就可以进入到这个链接中去提取出来。

在这里插入图片描述

3.2.1.2. 下载文件

  这里由于使用模拟器中的文件复制粘贴,有点不好操作,这里就使用终端进行下载文件了。

adb pull 模拟器中文件路径 下载到主机的路径

在这里插入图片描述

3.2.1.3. 打开文件

  这里就可以使用刚刚的jadx工具打开文件了。

在这里插入图片描述

3.2.1.4. 打开效果

  这里就能够看到打开的效果了,当然在某妃下面不单单这一个文件,还有三个都可以。

在这里插入图片描述

3.3. 总结

  本来想找一个脱壳失败的截图,我发现这工具居然基本上都能脱壳,但是至于脱出来的内容有没有用,我不是大佬就不得知了。

4. 反编译

  反编译其实就是我们下载到的 App 安装包是 Apk 文件(Android Application Package),通过 Apk 文件,我们也可以得到这个应用的代码和资源文件,对应用进行修改。

  而在渗透测试中反编译其实就是相当于测试是否能够被反编译,如果能够被反编译,并且修改里面的内容,使其绕过官方限制,当然一些无伤大雅的修改可能不会造成那么大的严重后果,但是如果修改看一些核心内容,那么就可能会造成一些未知的后果,那么这个APP程序就不算安全。

4.1. 其它

  由于个人水平较差,同时写文章主要也是学习记录,所以这里我也就使用简单一点的APP来进行反编译,至于复杂的,就算我反编译了,也是不知道原理,那么还不如看别人的呢。

  当然我写这个文章也是给自己的学习留下笔记,后面可以保证自己能够快速回忆起。

4.2. 反编译尝试

  我们就使用无壳的进行测试,有壳的话,肯定就需要先脱壳了,这里需要进入apktool目录下执行命令,当然如果你配置了环境变量,那么就不需要进入目录了。

  这里我也是在网上随便找了一个简单的APP来进行测试,这个是一个空APP,源文章在下面:

  反编译一款APP然后重新打包

在这里插入图片描述

4.2.1. apktool工具

  不过反编译后的文件是在apktool目录下的,使用总归还是需要进入目录的。

  需要注意:d,代表反编译,b代表回编译。

apktool d APK文件

在这里插入图片描述

4.2.2. 查看编译效果

  这里我们反编译后获取到的是smail文件,而我们需要的是.dex文件。

  这里我找了一下网上对反编译后的各个文件夹的解释:

  Apk文件本质上其实是一个zip包。直接拿解压工具解压就可以看到其中包含了什么。下面简单介绍一下Apk文件的结构。

  • AndroidManifest.xml:应用的全局配置文件
  • assets文件夹:原始资源文件夹,对应着Android工程的assets文件夹,一般用于存放原始的网页、音频等等,与res文件夹的区别这里不再赘述,可以参考上面介绍的两篇文章。
  • classes.dex:源代码编译成class后,转成jar,再压缩成dex文件,dex是可以直接在Android虚拟机上运行的文件。
  • lib文件夹:引用的第三方sdk的so文件。
  • META-INF文件夹:Apk签名文件。
  • res文件夹:资源文件,包括了布局、图片等等。
  • resources.arsc:记录资源文件和资源id的映射关系。

  我们已经得到一个可以用文本编辑器打开的阅读的AndroidManifest.xml文件、assets文件夹、res文件夹、smali文件夹等等。original文件夹是原始的AndroidManifest.xml文件,res文件夹是反编译出来的所有资源,smali文件夹是反编译出来的代码。注意,smali文件夹下面,结构和我们的源代码的package一模一样,只不过换成了smali语言。它有点类似于汇编的语法,是Android虚拟机所使用的寄存器语言。

在这里插入图片描述

4.2.3. 保留dex文件

  再次回到文件中,就可以看到里面存在dex文件了。

apktool d -s -f D:\tool\loudongku\app\测试文件夹\测试APP.apk
d ##反编译 apk 文件,注意需要这里是使用d,而不是-d
-s ##不反编译 dex 文件,而是将其保留
-f ##如果目标文件夹存在,则删除后重新反编译

在这里插入图片描述

4.2.4. 其它方式获取dex文件

  dex文件可以使用上述的办法进行获取,不过这里还可以使用其它的办法获取。

4.2.4.1. 修改APK后缀

  这里可以将要反编译的 APK 后缀名改为 .rar 或者 .zip,并解压,得到其中的classes.dex 文件(它就是java文件编译再通过dx工具打包而成的)。

  通过这个办法同样能够获取到这个dex文件,同时可以看到xml文件,但是这个xml文件是未经过反编译的,所以是打不开的。

在这里插入图片描述

4.3. 编译java源码

  这里在获取到dex文件后,就可以使用dex2jar进行生成jar文件,这个文件主要是用于来分析逻辑的,若修改的话还是需要在xml文件中修改的,也就是之前通过apktool工具获取到的xml文件进行修改。

4.3.1. 移动dex文件

  这里我们将dex文件移动到dex2jar目录下。

在这里插入图片描述

4.3.2. 执行命令

  这里我们通过执行命令,使其dex文件变成jar文件。

d2j-dex2jar classes.dex

在这里插入图片描述

4.3.3. 查看源码

  这里同样可以使用jadx工具来查看源码,这里直接将文件拖拽进去即可。

在这里插入图片描述

4.3.4. 总结

  这里翻译成java代码还方面在进行反编译的时候进行代码的还原,否则xml文件不好反编译,但是修改还是需要修改xml中的文件。

5. 后续流程

5.1. 修改数据

  到这里我们就可以对数据进行修改了,但是我这里还是需要说一句,由于我也是临时学到这里,更细致的反编译也不是一句话两句话就能够将清楚的,我们主要需要知道一个整体的流程,具体详细的内容,还需要各位自行的学习。

5.1.1. 修改apk文件名称

  这里也没找太复杂的apk文件进行修改,同时这个apk文件中也没什么内容可修改的,所以就修改apk名称吧!

  这里我是将原先的名称修改为djyt

在这里插入图片描述

5.2. 回编译

  这里的回编译就是将修改后的文件恢复,当执行完下面的命令后,会在原先的文件夹下生成一个 dist 目录,目录下有个apk文件,这个apk文件就是安装好的。

  不过这里还不能安装,由于apk文件都是需要签名的,若没有签名或者是使用第三方签名,都可以判断app存在漏洞。

apktool b 文件夹名称

在这里插入图片描述

5.3. 应用签名

  这里上面参考的文章中,在应用签名这里挖了一个很大的坑,如果是mac电脑还好,如果是Windows电脑,直接就是一个大坑。介绍的是Windows的应用签名,但是最好采用的是mac工具进行应用签名,所以我说挖了一个很大的坑。

  关于应用签名这里,我也没找到好的办法,都挺复杂的,由于个人能力有限应用签名实在是无能为力了,当然有安卓修改大师可以一键修改,生成等,可以去了解了解,这里我就不介绍了。

  属实无能为力,而且文章也相当于烂尾了,后续找找相关资料,看看有没有相关的app渗透需要检测哪些内容,除了基本的漏洞挖掘,看看有没有其它的方面也属于安全测试范围内的。

  这里我修改一下关于应用签名,群里有个大佬提出说,可以使用MT管理器,想必之前的文章介绍过,这里就不在提供下载链接了,主要来看看,怎么签名吧!

5.3.1.MT管理器签名

  这里将之前回编译获取到的APK,上传到模拟器中,然后打开MT管理器,找到刚刚上传的APK文件,点击就会出现签名。
  可以看到这里并没有签名,这里点击功能,就会出现选项,确认即可,就会在当前目录下生成一个文件。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

5.3.2.查看效果

  可以看到当前目录下生成另外一个APK文件了,我们点击安装即可。
在这里插入图片描述

5.3.3.查看安装后效果

  这里可以看到,我们刚刚修改的就是名称,所以这里显示的就是djyt了。
在这里插入图片描述

相关文章:

APP渗透—查脱壳、反编译、重打包签名

APP渗透—查脱壳、反编译、重打包签名 1. 前言1.1. 其它 2. 安装工具2.1. 下载jadx工具2.1.1. 下载链接2.1.2. 执行文件 2.2. 下载apktool工具2.2.1. 下载链接2.2.2. 测试 2.3. 下载dex2jar工具2.3.1. 下载链接 3. 查壳脱壳3.1. 查壳3.1.1. 探探查壳3.1.2. 棋牌查壳 3.2. 脱壳3…...

【贪婪技术】

目录 知识框架No.1 贪婪技术一、问题引入二、基本思想三、问题实例:连续背包问题 No.2 最小生成树问题一、基本思想二、Prim算法1、主要思想和步骤2、算法效率 三、Kruskal算法1、主要思想和步骤 No.3 Dijkstra算法一、主要思想二、问题实例: No.4 哈夫曼…...

谈「效」风生 | 如何找到现有研发体系的「内耗问题」?

#第3期:如何找到现有研发体系的「内耗问题」?# 在上一期《谈到提升效能,我们应该如何下手?》我们聊到开始做研发效能的四个要点:评估现有流程、引入自动化工具、建立度量指标、持续改进。本期就围绕「评估现有研发体系…...

Linux第四章

文章目录 前言一、快捷键小技巧二、软件安装三、systemctl控制软件启动关闭四、软链接五、日期和时区六、ip地址和主机名七、配置linux固定ip地址八、网络请求和下载九、端口十、进程管理十一、主机状态监控十二、环境变量十三、linux文件的上传和下载十四、压缩和解压总结 前言…...

HCIA-RS实验-路由配置-静态路由缺省路由

在计算机网络中,路由器是实现数据包转发的重要设备。它通过查找路由表中的路由信息,将数据包从源地址转发到目标地址。而静态路由和缺省路由则是路由表中的两种重要信息,下面我们来详细了解一下它们的概念、特点和应用。 目录 简述 一、静态…...

Unity API详解——Quaternion类

Quaternion类又称四元数,由x、y、z和w这4个分量组成,属于struct类型。在Unity中,用Quaternion来存储和表示对象的旋转角度。Quaternion的变换比较复杂,对于GameObject一般的旋转及移动,可以用Transform中的相关方法实现…...

8个免费的PNG素材网站推荐

很多设计小白都不知道什么是PNG。事实上,PNG是一种支持透明度的图像格式。当你想在设计中将图像与背景或文本混合时,它就会派上用场。 如果你没有时间为你正在处理的设计创建透明的PNG图像,你也可以使用我收集的PNG素材网站,以便…...

ChatGPT技术原理 第二章:自然语言处理基础

目录 2.1 语言模型 2.3 词嵌入 2.4 注意力机制 2.5 生成式模型 2.1 语言模型...

国民技术N32G430开发笔记(8)- 内部Flash的读写操作

N32G430 内部Flash的读写操作 1、主存储区最大为 64KB,也称作主闪存存储器,包含 32 个 Page,用于用户程序的存放和运行,以及数 据存储。 每一页的大小为2K字节 2、IAP 升级我们将64K的flash分区如下: Boot 0x800000…...

JVM 基本知识

目录 前言 一、JVM 内存区域划分 1.1 程序计数器 1.2 栈 1.3 堆 1.4 方法区 二、 JVM 类加载机制 2.1 类加载需要经过的几个步骤 2.1.1 Loading - 加载 2.1.2 Linking - 连接 2.1.3 initialization(初始化) 小结 经典面试题 三、JVM 垃圾…...

【源码解析】流控框架Sentinel源码解析

Sentinel简介 Sentinel是阿里开源的一款面向分布式、多语言异构化服务架构的流量治理组件。 主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 核心概念 资源 资源…...

redis面试重点------源于黑马

缓存问题三兄弟 是因为不同的原因让请求全部打到了数据库而造成的问题 什么是缓存穿透? 缓存穿透是指查询一个数据,在redis和MySQL中都不存在。也就是查询一个数据不存在的数据,导致每次请求都会到达数据库,给数据造成很大的压力…...

jQuery知识点二

一、 jQuery 属性操作 1. 元素固有属性值 prop() 获取属性&#xff1a;prop("属性") 设置属性&#xff1a;prop&#xff08;"属性"&#xff0c;"属性值"&#xff09; ​所谓元素固有属性就是元素本身自带的属性&#xff0c;比如 <a> 元素里…...

4 月份 火火火火 的开源项目

盘点 4 月份 GitHub 上 Star 攀升最多的开源项目&#xff0c;整个 4 月份最火项目 90% 都是 AI 项目&#xff08;准确的说&#xff0c;最近半年的热榜都是 AI 项目&#xff09; 本期推荐开源项目目录&#xff1a; 1. AI 生成逼真语音 2. 复旦大模型 MOSS&#xff01; 3. 让画中…...

PAT A1011 World Cup Betting

1011 World Cup Betting 分数 20 作者 CHEN, Yue 单位 浙江大学 With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excited as the best players from the best teams doing battles for the World Cup trophy in South Af…...

Android 拍照以及相册中选择(适配高版本)————上传头像并裁剪(一)

前言 在项目研发中&#xff0c;相信大家都遇到过给用户增加头像照片的需求。 随着手机版本的不断更新&#xff0c;android 8、android 9、android 10、android 12、android 13、鸿蒙系统等等&#xff1b;遇到这个功能需求&#xff0c;大家肯定会想&#xff0c;“这还不好写&…...

带你了解现在的LED显示屏技术

随着LED显示屏技术的空前繁荣&#xff0c;LED显示屏产品备受关注&#xff0c;广泛应用于商业广告、实况播映、交通诱导、舞台演绎等领域&#xff0c;发展至今。你了解十大中国LED显示屏制造商吗&#xff1f; LED显示屏技术已经得到了长足的发展&#xff0c;现在的LED显示屏技术…...

AI模型推理(1)——入门篇

前言 本文主要介绍AI模型推理的相关基础概念&#xff0c;为后续云原生模型推理服务的学习做准备。 初识模型部署 对于深度学习模型来说&#xff0c;模型部署指让训练好的模型在特定环境中运行的过程。相比于常规的软件部署&#xff0c;模型部署会面临更多的难题&#xff1a; …...

MySQL--表的基本查询--0410--15

目录 1. Create 1.1 insert 1.1.2 插入否则更新 1.2 replace 2.Retrieve 2.1 select 2.1.1 全列查询 2.1.2 指定列查询 2.1.3 查询字段为表达式 2.1.4 为查询结果指定名称 2.1.5 去重 2.2 where 2.2.1 > and > and < and < and 2.2.2 in between…...

Scala语言入门以及基本语法

文章目录 前言1.环境搭建1) IDEA中插件下载2) SDK下载配置 2.基本使用1&#xff09;var与val的区别2) .基本数据类型3).字符串的基本用法4) 控制结构1) if else2) for 循环3) while循环 5)类6) 函数 前言 scala在一种简洁的高级语言中结合了面向对象和函数式编程。Scala的静态…...

Linux shell编程 循环语句for continue break

for循环是编程语言中一种循环语句 示例1&#xff1a;循环读取user.txt中的用户名&#xff0c;创建用户。设置密码。 for i in $(cat /opt/user.txt) douseradd $iecho 123456 | passwd --stdin $i done 示例2&#xff1a;循环读取ipaddr文本文件中地址&#xff0c;执行ping命令…...

leetcode 643. 子数组最大平均数 I

题目描述解题思路执行结果 leetcode 643. 子数组最大平均数 I 题目描述 子数组最大平均数 I 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。 请你找出平均数最大且 长度为 k 的连续子数组&#xff0c;并输出该最大平均数。 任何误差小于 10-5 的答案都将被视为正确答…...

TDA4VM/VH 芯片硬件 mailbox

请从官网下载 TD4VM 技术参考手册&#xff0c;地址如下&#xff1a; TDA4VM 技术参考手册地址 概述 (Mailbox 的介绍在 TRM 的第7.1章节) Mailbox 使用邮箱中断机制实现了 VM 芯片的核间通信。 Mailbox 是集成在 NAVSS0 域下的一个外设&#xff08;NAVSS0 的说明可以查看&a…...

如何利用Trimble RealWorks三维激光扫描仪进行外业测量和内业处理?

文章目录 0.引言1.Trimble RealWorks介绍2.外业测量3.内业处理 0.引言 笔者所在资源与环境工程学院实验室采购有一台Trimble RealWorks三维激光扫描仪&#xff08;仪器名&#xff1a;Trimble TX8&#xff09;&#xff0c;因项目需要&#xff0c;在学校实验场地进行实地测量训练…...

mysql数据备份

数据备份分类 数据库的备份类型 完全备份&#xff1a;对整个数据库的数据进行备份部分备份&#xff1a;对部分数据进行备份&#xff08;可以是一张表也可以是多张表&#xff09; 增量备份&#xff1a;是以上一次备份为基础来备份变更数据的&#xff0c;节约空间差异备份&#x…...

排队接水--贪心

排队接水 题目描述 有 n n n 个人在一个水龙头前排队接水&#xff0c;假如每个人接水的时间为 T i T_i Ti​&#xff0c;请编程找出这 n n n 个人排队的一种顺序&#xff0c;使得 n n n 个人的平均等待时间最小。 输入格式 第一行为一个整数 n n n。 第二行 n n n 个…...

数字温度传感器-DS18B20

文章目录 一、DS18B20器件图二、DS18B20特点三、DS18B20内部结构内部构成 四、工作时序1.初始化时序2.ReadOneChar2.WriteOneChar 一、DS18B20器件图 DS18B20的管脚排列&#xff1a; GND为电源地&#xff1b;DQ为数字信号输入&#xff0f;输出端&#xff1b;VDD为外接供电电源…...

【算法】【算法杂谈】从M个数中等概率的选出n个数,保证每一个数的选中概率都是n/m(蓄水池算法)

目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介…...

vue3+ts+vite自适应项目——路由、layout布局

系列文章目录 第一章&#xff1a;搭建项目 目录 系列文章目录 前言 一、vue-router 1.安装vue-router 2.引入 2.1 新建页面 2.2 公共样式引入 2.3 layout 布局 2.4路由配置 总结 前言 上一章我们搭建了项目&#xff0c;这一张主要讲路由和layout布局&#xff0c;和…...

数据库之约束、索引和事务

一、约束 约束,顾名思义就是数据库对数据库中的数据所给出的一组检验规则.负责判断元素是否符合数据库要求.其目的就是为了提高效率以及准确性. 1.not null - > 数据元素非空 表示如果插入数据,则当前数据不能为空. //创建一张学生表,其班级id和年级id不为空 create …...