Android基础彻底解析-APK入口点,xml,组件,脱壳,逆向
第一章:引言与背景
Android逆向工程,作为一种深入分析Android应用程序的技术,主要目的就是通过分析应用的代码、资源和行为来理解其功能、结构和潜在的安全问题。它不仅仅是对应用进行破解或修改,更重要的是帮助开发者、研究人员和安全人员发现并解决安全隐患。
本文主要对整个安卓逆向入门的体系进行整理,解决一些安卓逆向时候的痛点问题!每个知识点都会有对应的例题下载,或者前文对应刷题的链接,在刷题中学习,才可以更快的掌握知识!
下面是本文的关键点:
- APK逆向工具:工欲善其事,必先利其器(这部分可以掠过,只做了工具的下载地址和简单介绍)
- APK的基本结构(详细解析了每个文件的作用和目的)
- Android逆向分析中的基础(解决没有安卓开发基础学习安卓逆向时候的痛点问题)
- 如何找出APP的程序的入口点?
- 如何识别是否加壳,并且简单脱壳?
- 如何寻找一个页面的xml布局文件?
- 如何确定按钮所绑定的函数?
- 如何寻找app中涉及到的资源文件?
- 什么是java层逆向,什么是Native层逆向?
- 安卓系统中的四大组件是如何在逆向题目中被应用的?
- 最后进行了安卓体系的梳理!
第二章:APK逆向工具:工欲善其事,必先利其器
1.1 雷电模拟器运行APK
雷电模拟器,作为安卓模拟器的佼佼者,一直以来备受用户青睐。它不仅可以让你在PC上畅快运行安卓应用,还能提供与手机端接近的使用体验,让你在开发、调试乃至游戏娱乐中都能游刃有余。安装雷电模拟器其实并不复杂,但要确保顺利完成,还是有一些细节需要关注。
相关使用:雷电模拟器的使用 - 搜索
下载地址:雷电模拟器官网_安卓模拟器_电脑手游模拟器
1.2 ADB的使用
ADB(Android Debug Bridge),简直是安卓开发者和逆向工程师的“瑞士军刀”。无论是调试、安装应用,还是进行日志分析,ADB都是不可或缺的工具。你可能会认为ADB只是一个命令行工具,然而它的强大远超你的想象。
相关使用:ADB安装及使用详解(非常详细)从零基础入门到精通,看完这一篇就够了-CSDN博客
下载地址:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
1.4 使用JADX反编译APK
JADX是一款非常流行且功能强大的APK反编译工具,它能够将APK中的DEX文件(即Dalvik Executable文件)反编译成可读的Java源代码。JADX的优势不仅仅在于它的易用性,还在于它的反编译效果非常优秀,能够清晰地显示反编译后的Java代码,帮助开发者和安全人员深入理解应用的内部逻辑。
JADX的优点:
- 易用性:图形界面的设计使得操作简单直观,适合初学者和经验丰富的开发者。
- 高效的反编译效果:JADX能够将DEX文件反编译成非常接近原始Java代码的源代码,对于Java层的应用分析尤为高效。
- 支持多种格式:除了反编译Java代码,JADX还支持查看APK中的资源文件(如图片、XML文件等),让你能够全面了解应用的构成。
相关使用:APK反编译工具jadx - chuyaoxin - 博客园
下载地址:https://down.52pojie.cn/Tools/Android_Tools/jadx-1.5.0.zip
1.5 使用GAD进行APK反汇编
GAD(Google Android Disassembler)是一个专注于APK底层字节码分析的工具。与JADX不同,GAD更多侧重于字节码级别的反汇编,它能够帮助安全研究人员和开发者深入到应用的最底层,查看其具体的机器码和执行逻辑。GAD特别适用于那些对字节码和汇编语言感兴趣的逆向工程师,它可以帮助我们获得应用中深层次的行为信息。
GAD的优点:
- 底层分析能力:GAD能够提供非常详细的底层字节码分析,帮助你更深入地理解应用的执行过程。
- 适用于高级分析:如果你需要分析复杂的应用行为或破解复杂的加密算法,GAD提供的反汇编信息可以帮助你做出准确的判断。
相关使用:[原创]GDA使用手册-Android安全-看雪-安全社区|安全招聘|kanxue.com
下载地址:https://down.52pojie.cn/Tools/Android_Tools/GDA4.11.zip
1.6 JEB进行APK反汇编
JEB的魅力在于其高精度的反汇编能力。它不仅能解析传统的DEX文件,还能处理各类复杂的文件格式,包括加固过的APK、经过混淆处理的代码,甚至是一些非标准的Android文件结构。它像一把锐利的刀刃,切开了应用的“外壳”,揭示其最核心的部分。
JEB的优点:
- 强大的反汇编能力:JEB不仅仅局限于常规的字节码反汇编,它能够对各种复杂和非标准格式的APK进行深入分析。
- 支持多种文件格式 :JEB支持广泛的文件格式解析,除了DEX文件,还包括PE(Portable Executable)、ELF、Java字节码等多种格式。
- 高级功能与插件支持 :JEB的插件架构极为强大,用户可以根据自己的需求,定制化扩展JEB的功能。
相关使用:第36讲: 使用Jeb工具反编译安卓APK_jeb反编译工具-CSDN博客
下载地址:https://down.52pojie.cn/Tools/Android_Tools/JEB_Decompiler_3.19.1_Professional.rar
1.7 IDA进行反汇编
进入IDA的世界,你将步入一个顶级的反汇编领域。IDA(Interactive Disassembler)是众多逆向工程师手中的“神器”,无论是操作系统、应用程序还是嵌入式系统,它都能提供无与伦比的反汇编支持。
IDA的优势:
- 精确的反汇编能力:IDA能反汇编几乎所有的二进制文件格式,展示底层机器码及其执行路径,让逆向分析更加精准。
- 高度可扩展:IDA支持插件开发,用户可以根据需求扩展其功能,实现个性化分析。
- 复杂任务支持:IDA特别适合进行复杂的逆向分析任务,如破解软件、分析恶意代码等。
相关使用:菜鸟的逆向工程学习之路——逆向工具IDA的使用_ida工具-CSDN博客
下载地址:https://down.52pojie.cn/Tools/Disassemblers/IDA_Pro_v8.3_Portable.zip
1.8 Frida脱壳工具的使用
Frida 是一个强大的动态分析工具,广泛应用于反向工程和安全测试中,尤其是在对 Android 应用进行脱壳(解除保护)时,它能够帮助研究人员通过动态注入脚本来分析应用程序的行为。以下是使用 Frida 进行脱壳的环境配置和基本步骤。
环境配置:
首先,确保你已经安装了 Frida 及其相关工具,可以通过以下命令进行安装:
pip install frida # 安装 Frida 主库
pip install frida-tools # 安装 Frida 的工具集,提供命令行工具
pip install frida-dexdump # 安装 frida-dexdump,用于分析 APK 文件的 dex 内容
这些工具将帮助你在 Android 环境中启动和操作 Frida Server,以及进行 APK 分析等操作。
Frida 的环境搭建并不复杂,特别是在虚拟设备(如雷电模拟器)和 Android Debug Bridge (ADB) 的支持下。具体的搭建流程可以参考以下链接:
- Frida入门教程:基于逍遥模拟器和 ADB 环境搭建
这个教程将详细介绍如何安装和配置 Frida 环境,并提供如何在模拟器和实际设备上运行 Frida Server 和脚本的操作步骤。
第三章:APK解析基础
在深入理解Android应用的工作原理和内部结构之前,我们首先需要了解应用打包的核心文件——APK(Android Package)。APK 文件是Android操作系统中的应用程序包,它包含了应用的所有资源、代码和必要的配置文件。可以把APK看作一个容器,其中集成了Android应用的所有组成部分。
为了能够更深入地分析和理解Android应用的结构,我们可以将APK文件拆解为多个关键组件。每个组件在应用运行中都扮演着不同的角色,理解这些组件有助于我们全面掌握应用的运行机制,甚至为后续的逆向分析和漏洞挖掘打下基础。
APK的基本结构
实际上,APK 文件是以 ZIP 格式进行压缩打包的,因此,我们可以像操作普通的ZIP文件一样,使用解压工具对其进行解压。通过解压后查看APK文件的目录结构,我们能够清晰地了解每个组成部分的作用。以下是一个典型的APK文件的结构示例:
APK 文件通常包括以下几个主要部分:
- AndroidManifest.xml
- classes.dex
- resources.arsc
- assets/
- lib/
- res/
- META-INF/
接下来,我们将详细解析这些文件和目录的作用及其内容。
将一个apk进行解压,可以发现如下结构的文件目录,测试案例下载:攻防世界-Mobile-easy-so
1.AndroidManifest.xml(关键核心)
AndroidManifest.xml 是每个Android应用不可或缺的配置文件,它包含了应用的关键信息。我们可以把它看作是应用的“蓝图”或“说明书”,它向系统声明了应用的基本属性、组件以及权限等。AndroidManifest.xml中包括以下重要部分:
- 应用的包名(package):每个Android应用都有一个唯一的包名,通过包名来区分不同的应用。
- 应用的组件(Activities, Services, Broadcast Receivers, Content Providers):声明应用包含哪些组件,以及这些组件的属性和功能。
- 权限声明:列出应用所需的权限,如访问网络、读取存储、使用相机等。
- 应用主题和图标:定义应用的UI样式、图标等。
- 最小SDK版本和目标SDK版本:确定应用能在什么版本的Android系统上运行。
详细解析Manifest中的关键字段
<manifest>
:包含整个应用的包信息及权限定义。package
: 定义了应用的包名,通常为反向域名格式,如com.example.app
。android:versionCode
: 定义应用的版本号。android:versionName
: 定义应用的版本名称。
<application>
:包含应用的核心配置,如主题、图标等。android:icon
: 定义应用的图标。android:label
: 定义应用的名称。android:theme
: 应用的UI主题。
<activity>
:声明应用的各个界面(Activity),以及这些Activity的属性和行为。android:name
: Activity的类名。android:label
: Activity的标签。android:theme
: Activity特有的UI主题。
<uses-permission>
:声明应用所需要的权限,如访问网络、发送短信等。<intent-filter>
:定义组件的功能和响应的事件,如Activity的启动方式或Broadcast Receiver接收的广播类型。
2. classes.dex
classes.dex 文件包含了应用程序的可执行代码。它是应用的Dalvik字节码文件,也是Android应用在运行时通过 Dalvik虚拟机 或 ART(Android Runtime) 解释执行的核心文件。每个Android应用中,所有的Java源代码都经过编译后形成一个或多个DEX(Dalvik Executable)文件,这些文件包含了应用的业务逻辑和代码实现。
在Android 5.0(Lollipop)之后,Google引入了 ART(Android Runtime) 代替了传统的Dalvik虚拟机,ART的执行方式比Dalvik更高效,支持Ahead-of-Time(AOT)编译和即时编译(JIT)策略。
这部分比较难可以拓展阅读一下,相关文档:
- JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对比_java dalvik-CSDN博客
- 安卓逆向学习----smali,dex,java等文件之间转换关系_dex与smail-CSDN博客
3. resources.arsc
resources.arsc 文件包含了应用程序的所有编译后的资源映射信息。这个文件并不存储实际的资源内容(如图片或字符串),而是存储资源与资源ID的映射关系。例如,它会保存应用中的字符串、颜色、尺寸、样式等信息以及这些资源的ID。通过这个文件,Android系统能够在应用运行时快速访问和加载所需的资源。
使用jadx可以看见:
4. assets/
assets/ 目录包含了应用程序的原始资源文件,这些资源不经过编译,直接以原始形式存储。通常,开发者可以在该目录中存放字体文件、音频文件、HTML文件等,应用在运行时通过API来读取这些资源。例如,游戏可能会将所有的地图文件或纹理图像存放在此目录中。通过AssetManager
API,应用可以访问这些文件。
5. lib/
lib/ 目录包含了本地库文件,通常是通过 JNI(Java Native Interface) 与C/C++编写的本地代码。这些库文件可以针对不同的硬件架构(如arm、x86等)进行编译,因此lib/
目录下通常会为每个架构创建相应的子目录。这个目录中存放的本地库可以通过Java代码调用JNI接口实现与系统底层的交互。
下面是一个案例进入lib进入到目录中得到以下目录结构,不同架构的手机拥有不同的操汇编代码所以使用四种架构的汇编分别实现一次:
├─arm64-v8a
│ libcyberpeace.so
│
├─armeabi-v7a
│ libcyberpeace.so
│
├─x86
│ libcyberpeace.so
│
└─x86_64libcyberpeace.so
6. res/
res/ 目录包含了Android应用所需的所有资源文件。与 assets/ 目录不同,res/ 目录中的资源文件是经过编译的,按照不同类型的资源进行组织,例如:
- drawable/:存放图像资源(如PNG、JPEG等格式的图片)。
- layout/:存放XML格式的布局文件,定义界面的结构。
- values/:存放各种配置文件,定义应用的常量、颜色、字符串等资源。例如:
strings.xml
:存储应用的文本字符串。colors.xml
:存储应用使用的颜色资源。styles.xml
:存储样式资源。
在values/
目录下,除了strings.xml
、colors.xml
等常见资源文件,还会有像dimens.xml
(尺寸定义文件)和attrs.xml
(自定义属性)等资源文件。
可以在文件夹目录中找到也可以在jadx里面查看:
7. META-INF/
META-INF/ 目录与Java的JAR文件类似,用于存放APK文件的元数据,如签名文件、校验信息等。此目录主要包括以下文件:
- MANIFEST.MF:存放APK的清单文件,包含关于APK文件本身的信息。
- CERT.RSA:包含APK文件的数字签名。
- CERT.SF:存放APK文件的签名摘要。
这些文件确保了APK的完整性和安全性,保证APK文件没有被篡改,且来自合法的开发者。
下面是一个示例:
第四章:Android逆向分析中的基础
Android 逆向分析是一个深入挖掘应用内部工作原理的过程,通常用于漏洞挖掘、恶意软件分析或应用的安全性研究。在这章中,我们将深入探讨 Android APK 的反编译与结构分析,剖析壳分析与绕过技术,以及如何对资源与布局文件进行分析。我们还会涉猎 Java 层的逆向技巧,以及如何在 Native 层执行逆向工程。每一部分都将逐一分析和讲解,以帮助读者在 Android 逆向分析中取得更好的突破。
1. APK反编译与结构分析:如何找出程序的入口点
在进行 Android 逆向时,首先需要对 APK 文件进行反编译和结构分析。理解 APK 的基本结构至关重要,因为它帮助我们定位关键组件和入口点。一个典型的 APK 文件包含多个元素,如 AndroidManifest.xml
、DEX 文件、资源文件和库文件等。
定位入口点实战案例
目标: 学习如何反编译 APK 文件并分析其结构,找出应用程序的入口点。
文章: android apk入口分析_5.apk的程序入口界面 - CSDN博客
实战案例:BUU刷题-简单注册器
更详细的WP:BUUCTF之简单注册器(RE) - Eip的浪漫 - 博客园
首先梳理一下基本app的逆向流程:
1.将apk拖入JADX后寻找到AndroidManifest.xml文件:
下面给出AndroidManifest.xml文件的详细注释:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"android:versionCode="1" <!-- 应用版本代码,用于区分不同版本的更新 -->android:versionName="1.0" <!-- 应用版本名称,通常为可见版本号 -->package="com.example.flag"> <!-- 应用包名,唯一标识应用 --><!-- 使用的最低 SDK 版本和目标 SDK 版本 --><uses-sdkandroid:minSdkVersion="8" <!-- 设置应用的最低 SDK 版本,表示应用可在 SDK 8 或以上的设备上运行 -->android:targetSdkVersion="19"/> <!-- 设置应用的目标 SDK 版本,表示应用针对 SDK 19 的优化 --><applicationandroid:theme="@style/AppTheme" <!-- 设置应用的主题 -->android:label="@string/app_name" <!-- 设置应用的名称 -->android:icon="@drawable/ic_launcher" <!-- 设置应用的图标 -->android:debuggable="true" <!-- 设置应用是否可调试,调试模式下可以进行调试 -->android:allowBackup="true"> <!-- 设置是否允许应用数据备份 --><!-- 定义应用的主 Activity --><activityandroid:label="@string/app_name" <!-- 设置 Activity 的名称 -->android:name="com.example.flag.MainActivity"> <!-- 定义该 Activity 的完整类名 --><!-- 配置启动该 Activity 的 Intent Filter --><intent-filter><action android:name="android.intent.action.MAIN"/> <!-- 指定这是应用的主入口 --><category android:name="android.intent.category.LAUNCHER"/> <!-- 表明该 Activity 是启动器中的入口 --></intent-filter></activity></application></manifest>
在 Android 应用中,AndroidManifest.xml
文件是至关重要的,它定义了应用的所有组件以及组件之间的关系,包括应用的入口点。打开反编译后的 APK 中的 AndroidManifest.xml
文件,查找 <activity>
标签,它们通常定义了应用的各个 Activity(包括启动 Activity)。
入口点通常由以下两个标记表示:
<action android:name="android.intent.action.MAIN" />
:标记这是应用的主入口。<category android:name="android.intent.category.LAUNCHER" />
:表示该 Activity 会出现在应用启动器中(即桌面)。
所以最终得出该app的程序入口点代码是在android:name="com.example.flag.MainActivity"
处!
2.成功寻找到activity的代码入口处,开始分析activity的生命执行流程:
根据android:name="com.example.flag.MainActivity"
字段成功找到Activity的功能实现代码位置,一个Activity的生命周期是:onCreate()
->onStart()
->onResume()
->onPause()
->onStop()
->onDestroy()
,所以可以先锁定omCreate函数,锁定app加载的主要逻辑!
3.开始分析按钮的逻辑代码,成功解析出需要输入的内容:
在主要逻辑中可以发现界面中的一个按钮绑定了一个onclick按钮点击事件:
该函数用于处理用户点击事件,验证输入框中的文本是否符合特定规则,如果符合规则,则对一个预定义的字符串进行一系列字符运算和逆序处理,最终显示一个特定格式的“flag”;否则,显示错误提示“输入注册码错误”。
也就是说我们只需要输入一个正确的字符串就可以成功拿到flag!
将代码提取出来分析:
button.setOnClickListener(new View.OnClickListener() { // from class: com.example.flag.MainActivity.1@Override // android.view.View.OnClickListenerpublic void onClick(View v) {int flag = 1;String xx = editview.getText().toString();if (xx.length() != 32 || xx.charAt(31) != 'a' || xx.charAt(1) != 'b' || (xx.charAt(0) + xx.charAt(2)) - 48 != 56) {flag = 0;}if (flag == 1) {char[] x = "dd2940c04462b4dd7c450528835cca15".toCharArray();x[2] = (char) ((x[2] + x[3]) - 50);x[4] = (char) ((x[2] + x[5]) - 48);x[30] = (char) ((x[31] + x[9]) - 48);x[14] = (char) ((x[27] + x[28]) - 97);for (int i = 0; i < 16; i++) {char a = x[31 - i];x[31 - i] = x[i];x[i] = a;}String bbb = String.valueOf(x);textview.setText("flag{" + bbb + "}");return;}textview.setText("输入注册码错误");}});}
这里的逻辑代码就很清晰了:
int flag = 1;
String xx = editview.getText().toString();
if (xx.length() != 32 || xx.charAt(31) != 'a' ||
相关文章:
Android基础彻底解析-APK入口点,xml,组件,脱壳,逆向
第一章:引言与背景 Android逆向工程,作为一种深入分析Android应用程序的技术,主要目的就是通过分析应用的代码、资源和行为来理解其功能、结构和潜在的安全问题。它不仅仅是对应用进行破解或修改,更重要的是帮助开发者、研究人员和安全人员发现并解决安全隐患。 本文主要对…...
Spark RDD算子详解:从入门到精通
一、前言 在大数据处理领域,Apache Spark凭借其高效的内存计算能力,成为了流行的分布式计算框架。RDD(Resilient Distributed Dataset)是Spark的核心概念之一,它是一个分布式的数据集合,提供了丰富的操作接…...
Bootstrap4 卡片
Bootstrap4 卡片 Bootstrap 是一个流行的前端框架,它提供了丰富的组件和工具,使得开发者可以快速构建响应式、美观的网页。其中,Bootstrap4 中的卡片组件(Card)是一个非常实用的功能,可以用来展示图片、文…...
【随行付-注册安全分析报告-无验证方式导致隐患】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...
深入解析Antogen意图识别模型:从原理到实践
一、意图识别基础概念 1.1 什么是意图识别 意图识别(Intent Recognition)是自然语言处理(NLP)中的核心任务,旨在确定用户输入背后想要表达的目的或行动请求。它是对话系统理解用户的第一步,直接影响后续的对话管理和响应生成质量。 关键特征ÿ…...
企业年报问答RAG挑战赛冠军方案:从零到SotA,一战封神
RAG挑战赛是什么? 任务是基于企业年报构建问答系统。比赛日的流程简而言之: 解析阶段:获得100份随机企业的年报(PDF格式,每份最多1000页),限时2.5小时完成解析并构建数据库。问答阶段…...
深入理解 HTML5 语义元素:提升网页结构与可访问性
引言 在构建网页的过程中,合理的结构与清晰的语义对于网页的质量、可维护性以及搜索引擎优化(SEO)都至关重要。HTML5 引入了一系列语义元素,为开发者提供了更精准描述网页内容的工具。本文将深入探讨 HTML5 语义元素的作用、使用…...
DeepSeek vs Grok vs ChatGPT:三大AI工具优缺点深度解析
一、DeepSeek:低成本与中文专精的本地化AI 优点 中文处理能力卓越 DeepSeek针对中文语法和文化背景进行了深度优化,尤其在古文翻译、诗歌创作和技术文档生成中表现突出,远超ChatGPT的中文支持能力。高效推理与低成本 采用混合专家ÿ…...
MCP(模型上下文协议)简单案例
MCP(模型上下文协议)的标准化接口 MCP(Model Context Protocol,模型上下文协议)是由Anthropic开发的一种开放协议,旨在标准化大型语言模型(LLM)与外部数据源和工具的交互方式1。它就…...
BGP基础概念与核心架构
一、BGP 协议定义与定位 BGP(Border Gateway Protocol,边界网关协议) 是互联网中唯一的域间路由协议(EGP),用于在不同自治系统(AS)之间交换路由信息。与 OSPF、IS-IS 等域内路由协议…...
【经济保护主义叙事】
第一层:表面逻辑——经济保护主义叙事 公开理由:特朗普宣称加征关税是为了“保护美国制造业”“减少贸易逆差”“维护国家安全”,并强调通过关税迫使贸易伙伴降低壁垒,促进产业链回流美国。 底层逻辑:通过民族主义叙事…...
遵循IEC 62304:构建安全可靠的医疗器械软件
目录 一、IEC 62304 标准概述 1. 标准定位与适用范围 二、核心内容与要求 1. 软件安全等级(Software Safety Classification) (1)分级标准 (2)分级依据 (3)验证要求 2. 软件…...
ARM 架构下 spin_lock 实现
阅读该文章前,需要对原子指令有所了解,推荐阅读 聊一聊原子操作和弱内存序 1、概念 内核当发生访问资源冲突的时候,可以有两种锁的解决方案选择: 一个是原地等待一个是挂起当前进程,调度其他进程执行(睡眠…...
计算机视觉算法实现——SAM实例分割:原理、实现与应用全景
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 实例分割领域概述 实例分割(Instance Segmentation)是计算机视觉领域最具挑战性的任务之一,…...
asm汇编字符串操作
提供8个子程序: 1. 字符串长度 STRLEN 2. 字符串替换 REPLACE 3. 字节查找 SEARCHB 4. 双字节查找 SEARCHW 5. 输入字符串 GETSTR 6. 输出字符串 OUTSTR 7. 复制字符串 COPYSTR 8. 查找字符串 SRCHSTR 具体功能及参数描述如下 STRLEN PROC FAR ; IN: ; DS:DXSTRING ;…...
[MSPM0开发]之三MSPM0G3507之时钟系统
一、MSPM0G3507时钟模块概述 MSPM0G3507的时钟系统隶属于其电源管理和时钟单元 (PMCU) 。 PMCU主要负责电源管理、时钟配置和复位控制功能。 时钟模块包含内部和外部 振荡器 oscillators、 时钟监测器 clock monitors以及时钟选择和控制逻辑。 提供了频率时钟计数器frequency …...
如何绕过WAF实现SQL注入攻击?
引言 在渗透测试中,SQL注入(SQLi)始终是Web安全的核心漏洞之一。然而,随着企业广泛部署Web应用防火墙(WAF),传统的注入攻击往往会被拦截。本文将分享一种绕过WAF检测的SQL注入技巧…...
基础数学:图论与信息论
微积分与概率论由此进:基础数学:微积分和概率与统计-CSDN博客 线代与优化理论由此进:基础数学:线性代数与优化理论-CSDN博客 数值分析与离散数学由此进:基础数学:数值分析与离散数学-CSDN博客 四、图论与…...
05-RabbitMQ 面试题-mk
1.RabbitMQ-如何保证消息不丢失? 消息中间件的好处 提供了系统之间的异步调用,让服务与服务之间解耦削峰、填谷场景: 异步发送(验证码、短信、邮件…)MySQL和Redis , ES之间的数据同步分布式事务削峰填谷 消息发送者(publisher )把消息发送给交换机(exchange),由交…...
当当平台商品详情接口设计与调用指南
当当平台商品详情接口设计与调用指南 接口名称 GET /api/product/detail 图书商品核心信息查询接口 请求参数说明 参数名称 类型 是否必填 说明 isbn string 是 国际标准书号(支持13位/10位) product_id string 否 平台内部商品编号(与…...
基于vue框架的住院信息管理系统k08hv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:患者,工作人员,预约住院,住院登记,科室信息,床位信息,床位分配,转病房,病历信息,费用信息,出院登记 开题报告内容 基于Vue框架的住院信息管理系统开题报告 一、选题背景与意义 (一)选题背景 随着医疗技术的不…...
Flink 编程基础:Scala 版 DataStream API 入门
大家好!我是心海 流处理技术在大数据时代正变得越来越重要,而 Apache Flink 作为领先的流处理引擎,凭借其高性能、低延迟和丰富的 API 受到了广泛关注。本文将以 Scala 语言为例,详细讲解 Flink DataStream API 的基本编程模型&am…...
noscript 标签是干什么的
vue public目录下的 index.html 会有 <noscript> 标签不知道是干吗的。 其实 noscript 标签在不支持或是禁用JavaScript 的浏览器中显示替代的内容。这个元素可以包含任何 HTML 元素。这个标签的用法也非常简单: <noscript><strong>Were sorry …...
基于 Streamlit 的 PDF 编辑器
你想实现一个基于 Streamlit 的 PDF 编辑器,功能包括: PDF 转 WordPDF 表格提取PDF 拆分页面PDF 转图片 下面是一个初步的 Streamlit 应用框架代码示例,集成了以上功能。使用了常见库如 pdfplumber、PyMuPDF(fitz)、…...
Oracle 排除交集数据 MINUS
MINUS 是 Oracle 数据库中的一种集合操作符,用于返回第一个查询结果中存在但第二个查询结果中 不存在 的 唯一行。其核心功能是 排除交集数据,常用于数据差异分析或过滤特定记录 一、核心功能 排除交集:返回第一个查询结果中 不在第二个查询结…...
.net Core 和 .net freamwork 调用 deepseek api 使用流输出文本(对话补全)
.net Core 调用 deepseek api 使用流输出文本 简下面直接上代码(.net core):最后再贴一个 .net Freamwork 4 可以用的代码TLS 的代码至关重要的:(下面这个) 简 在官网里面有许多的案例:我们通过…...
巧用递归算法:破解编程难题的“秘密武器”
专栏:算法的魔法世界 个人主页:手握风云 目录 一、递归 二、例题讲解 2.1. 汉诺塔问题 2.2. 合并两个有序链表 2.3. 反转链表 2.4. 两两交换链表中的节点 2.5. Pow(x, n) 三、总结 一、递归 递归的概念 一个方法在执行过程中调用自身, 就称为递…...
C++、Python的输入输出及相关的处理操作
一、C 输入输出及相关处理操作 C 是算法竞赛中常用的语言,因其高效性适合处理大数据或严格时间限制的题目。输入输出是基础,但细节处理(如速度优化、格式要求)对比赛结果影响很大。 1. 基本输入输出 C 使用 <iostream> 库…...
Unity协程从入门到精通:告别卡顿,用Coroutine优雅处理异步与时序任务 (Day 27)
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
Web攻防—SSRF服务端请求伪造Gopher伪协议无回显利用
前言 重学Top10的第二篇,希望各位大佬不要见笑。 SSRF原理 SSRF又叫服务端请求伪造,是一种由服务端发起的恶意请求,SSRF发生在应用程序允许攻击者诱使服务器向任意域或资源发送未经授权的请求时。服务器充当代理,执行攻击者构造…...
青少年编程与数学 02-016 Python数据结构与算法 16课题、贪心算法
青少年编程与数学 02-016 Python数据结构与算法 16课题、贪心算法 一、贪心算法的基本概念定义组成部分 二、贪心算法的工作原理三、贪心算法的优点四、贪心算法的缺点五、贪心算法的应用实例(一)找零问题(二)活动安排问题&#x…...
Linux系统Debian最新版12.10安装详细教程,虚拟机系统安装(附系统镜像资源)
前言 Debian是一款以稳定性著称的免费开源Linux发行版,支持多种硬件架构,遵循自由软件原则,并提供庞大的软件仓库和长期维护。 一、环境下载 Debian 12.10镜像下载 💾资源下载👉Debian 12.10镜像下载:ht…...
android display 笔记(十一)surfaceflinger 如何将图层传到lcd驱动的呢?
SurfaceFlinger->>HWC: 提交所有图层(Layer) HWC->>DRM/KMS: 硬件合成(Overlay)或 GPU 合成 DRM/KMS->>LCD Driver: 配置显示控制器(CRTC/Encoder) LCD Driver->>Display: 通过 MI…...
管理大规模监控技术栈的最佳实践
集中管理可观测性数据 集中化监控数据有助于打破信息孤岛,提供系统全景视图。彭博社发现,当团队各自为战时,系统中断往往持续很久才有人意识到多个团队正在独立处理同一问题。通过数据集中管理,他们获得了更全面的基础设施视图&a…...
深入探索C++ STL:从基础到进阶
目录 引言 一、什么是STL 二、STL的版本 三、STL的六大组件 容器(Container) 算法(Algorithm) 迭代器(Iterator) 仿函数(Functor) 空间配置器(Allocator…...
GitHub Desktop 推送报错 Authentication Failed 身份验证失败
弹窗问题: Authentication Failed 验证失败 We were unable to authenticate with https://gitee.com/.Pleaseenter your username and password to try again. 用户名 密码 Depending on your repository’s hosting service, you might need touse a Personal Acc…...
Webpack中的文件指纹:给资源戴上个“名牌”
Webpack中的文件指纹:给资源戴上个“名牌” 你是否想过,当你修改代码后,浏览器为什么仍然拿着旧版资源不放?秘密就在于——文件指纹!简单来说,文件指纹就像给每个构建出来的文件贴上独一无二的“姓名牌”&…...
ESP32开发之ubuntu环境搭建
1. 在Ubuntu官网下载Ubuntu server 20.04版本https://releases.ubuntu.com/20.04.6/ 2. 在vmware下安装Ubuntu 3. 改Ubuntu静态IP $ sudo vi /etc/netplan/00-installer-config.yaml# This is the network config written by ‘subiquity’ network: renderer: networkd eth…...
重构艺术 | 如何优雅地“提炼函数“
在工作中总数遇到非常多的长代码,俗称“屎山”,这类代码读起来特别费劲。自己想重构一遍,但是总感觉缺乏经验指导,因此,多读书,读好书可能是最优解之一。读《重构改善即有代码的设计》有感,便写…...
[项目]基于RT-Thread的CAN通信仪表盘显示屏: 一.项目概述与软硬件说明
基于RT-Thread的CAN通信仪表盘显示屏: 一.项目概述与软硬件说明 一.项目概述二.硬件与软件资源 一.项目概述 功能结构图: 通过上位机发出模拟CAN数据给协议转换板,协议转换板将CAN协议数据转换为迪文屏数据,并通过迪文数据控制相关性质。 …...
如何查看自己 Android App 的私有数据?从 `adb backup` 到数据提取全过程
🛠️ 如何查看自己 Android App 的私有数据?从 adb backup 到数据提取全过程 📌 前言:作为一名 Android 开发者,我常常想知道自己写的 App 在用户设备上的数据存储结构是怎样的,比如有没有数据写入成功、有…...
Windows中xxx.dll动态链接库文件转xxx.a静态库文件
最近在学习探索C/C程序代码中调用Python代码时,出现了一个问题:下载的程序库文件,在使用MinGW编译C/C的代码时,一直提示无法链接,才发现是库类型不对应,无法导入链接。 上图所示的Python对应库,…...
用Java NIO模拟HTTPS
HTTPS流程 名词解释: R1:随机数1 R2:随机数2 R3:随机数3 publicKey:公钥 privateKey:私钥 step1 客户端 client hello R1 服务端 server hello R2 publicKey(验证证书,证书包含公钥) step2 客户端 R3 publicKey加密 服务端 privateKey解密 s…...
基于YOLOv8的火车轨道检测识别系统:技术实现与应用前景
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 引言:火车轨道检测领域概述 铁路运输作为国民经济的大动脉,其安全运行至关重要…...
解决 Ubuntu 上 Docker 安装与网络问题:从禁用 IPv6 到配置代理
解决 Ubuntu 上 Docker 安装与网络问题的实践笔记 在 Ubuntu(Noble 版本)上安装 Docker 时,我遇到了两个常见的网络问题:apt-get update 失败和无法拉取 Docker 镜像。通过逐步排查和配置,最终成功运行 docker run he…...
DVDFab Virtual Drive电脑DVD备份和制作软件 v13.0.3.7 中文绿色便携
前言 DVDFab Virtual Drive是一个很厉害的光盘处理软件,它能帮你做几件事情:复制你的DVD或蓝光光盘作为备份,把这些光盘里的内容转换成其他格式,还能把视频文件刻录到DVD或蓝光光盘上。这个软件很灵活,能处理像DVD、蓝…...
FISCO BCOS区块链Postman接口测试:高级应用与实战技巧 [特殊字符]
引言:为什么Postman是FISCO BCOS测试的利器? 在区块链开发领域,接口测试是确保系统稳定性和安全性的关键环节。作为国产领先的联盟链平台,FISCO BCOS在金融、政务、供应链等多个领域得到广泛应用。而Postman作为一款功能强大的API测试工具,凭借其直观的图形界面和丰富的测…...
a sort.py demo
这份代码展示了如何使用 sort.py。注意,此处,我将文件名改为 my_sort.py。 你并不能直接 copy 使用,因为环境,包,还有模型。 此处使用 SSD-MobileNetv2 进行物体检测,将结果传入以 np 数组的形式传入sort…...
Linux 入门八:Linux 多进程
一、概述 1.1 什么是进程? 在 Linux 系统中,进程是程序的一次动态执行过程。程序是静态的可执行文件,而进程是程序运行时的实例,系统会为其分配内存、CPU 时间片等资源。例如,输入 ls 命令时,系统创建进程…...
学习如何设计大规模系统,为系统设计面试做准备!
前言 在当今快速发展的技术时代,系统设计能力已成为衡量一名软件工程师专业素养的重要标尺。随着云计算、大数据、人工智能等领域的兴起,构建高性能、可扩展且稳定的系统已成为企业成功的关键。然而,对于许多工程师而言,如何有效…...