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

【APK安全】系统管理器安全风险与防御指南

文章目录

    • 前言
    • 一、系统管理器的核心安全风险
      • 1. 风险 1:下载管理器安全检测缺失(恶意文件注入与执行)
        • 风险本质
        • 典型案例:未校验下载包导致恶意 APK 植入
      • 2. 风险 2:注册为设备管理器的权限滥用(设备管控与数据劫持)
        • 风险本质
        • 典型案例:伪装安全软件诱导激活,锁定设备勒索
    • 二、管理器安全防御方案
      • 1. 下载管理器安全加固:来源校验 + 完整性校验 + 行为管控
        • 核心措施
        • 安全实现代码
      • 2. 设备管理器注册安全:权限透明化 + 功能最小化 + 退出便捷化
        • 核心措施
        • 合规代码示例(权限申请与解除逻辑)
    • 三、管理器安全测试方法
      • 1. 静态测试(代码与配置审核)
      • 2. 动态测试(风险场景模拟)
      • 3. 版本兼容性测试
    • 四、总结:系统管理器安全的核心原则

⚠️本博文所涉安全渗透测试技术、方法及案例,仅用于网络安全技术研究与合规性交流,旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前,必须获得目标网络 / 系统所有者的明确且书面授权,严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。

前言

Android 系统的 “管理器” 组件(下载管理器 DownloadManager、设备管理器 DevicePolicyManager)是实现系统级功能的核心模块:下载管理器负责后台下载文件(如 APP 更新包、资源包),设备管理器则拥有设备管控权限(如锁屏、擦除数据)。这类组件因涉及 “文件传输” 与 “设备权限”,若缺乏安全检测与权限管控,攻击者可利用其实施恶意文件注入、设备劫持等攻击 —— 例如通过篡改下载链接植入恶意 APK,或诱导用户激活设备管理器后锁定屏幕勒索。

随着 Android 15 对系统组件权限的进一步收紧(如下载管理器新增 “危险文件类型拦截”、设备管理器激活需二次验证),开发者需重点关注两类管理器的安全风险,从 “来源可信、权限可控、行为可追溯” 三方面构建防御体系。本文将结合实际攻击案例,提供可落地的防御方案与测试方法,助力 APK 抵御系统管理器级安全威胁。

一、系统管理器的核心安全风险

系统管理器的安全风险本质是 “权限与功能不匹配”—— 下载管理器若未限制文件来源与类型,会成为恶意文件的 “传输通道”;设备管理器若过度申请权限且未告知用户,会导致设备被非法管控。以下拆解具体风险场景:

1. 风险 1:下载管理器安全检测缺失(恶意文件注入与执行)

风险本质

DownloadManager 是 Android 提供的系统级下载服务,支持后台下载、断点续传,默认拥有访问网络与存储的权限。若 APP 使用 DownloadManager 时存在以下疏漏,会引发安全风险:

  • 未校验下载链接来源:下载 URL 可被劫持(如 DNS 污染、中间人攻击),替换为恶意文件链接;

  • 未校验文件完整性:下载完成后未验证文件 MD5/SHA256,恶意文件(如病毒 APK、钓鱼脚本)可伪装成合法文件;

  • 未限制文件类型:允许下载.apk、.exe 等可执行文件,且自动触发安装,导致恶意程序植入;

  • 忽略 Android 版本限制:Android 11 + 引入 “存储沙箱”,下载文件路径配置错误会导致文件被其他 APP 访问。

典型案例:未校验下载包导致恶意 APK 植入

某工具类 APP 通过下载管理器实现 “插件更新” 功能,未做任何安全检测:

// 风险代码:下载管理器未校验来源与完整性
private void downloadPlugin(String pluginUrl) {// 创建下载请求,直接使用外部传入的URLDownloadManager.Request request = new DownloadManager.Request(Uri.parse(pluginUrl));// 允许下载.apk文件(可执行风险类型)request.setMimeType("application/vnd.android.package-archive");// 保存到外部存储(所有APP可访问路径)request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "plugin_update.apk");// 发起下载,未设置任何校验逻辑DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);downloadManager.enqueue(request);// 下载完成后自动触发安装(无完整性校验)registerReceiver(new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId);Cursor cursor = downloadManager.query(query);if (cursor.moveToFirst()) {int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));if (status == DownloadManager.STATUS_SUCCESSFUL) {// 获取下载文件路径,直接启动安装String filePath = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));Intent installIntent = new Intent(Intent.ACTION_VIEW);installIntent.setDataAndType(Uri.parse(filePath), "application/vnd.android.package-archive");installIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(installIntent);}}cursor.close();}}, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}

攻击者通过以下步骤实施攻击:

  1. 劫持下载链接(如公共 WiFi 场景):通过 DNS 污染将 APP 的合法插件 URL(https://official.com/plugin.apk)替换为恶意 URL(https://malicious.com/virus.apk);
  2. 伪装恶意文件:将病毒 APK 命名为 “plugin_update.apk”,伪装成合法插件;
  3. APP 下载并安装:下载管理器未校验 URL 来源与文件完整性,成功下载恶意 APK 并自动触发安装;
  4. 恶意程序运行:用户授权安装后,病毒 APK 后台窃取短信、通讯录,或发起付费短信。

2. 风险 2:注册为设备管理器的权限滥用(设备管控与数据劫持)

风险本质

DevicePolicyManager(DPM)是 Android 设备管理框架的核心,APP 注册为设备管理器后,可申请以下高敏感权限:

  • 锁屏控制:设置锁屏密码、强制锁屏、清除锁屏密码;

  • 数据管控:擦除设备数据、限制 USB 调试、禁止安装非官方 APP;

  • 设备监控:获取设备位置、监控应用安装 / 卸载、限制网络访问。

风险源于两点:

  • 权限申请不透明:APP 未明确告知用户激活设备管理器后的具体权限,诱导用户点击 “同意”;

  • 解除激活困难:部分 APP 隐藏设备管理器解除入口,用户激活后无法卸载,导致设备被长期管控;

  • 权限过度申请:仅需 “锁屏控制” 却申请 “数据擦除” 权限,扩大安全风险面。

典型案例:伪装安全软件诱导激活,锁定设备勒索

某恶意 APP 伪装成 “手机安全卫士”,诱导用户注册为设备管理器后实施勒索:

<!-- 风险配置:AndroidManifest声明设备管理器接收器,未说明权限用途 -->
<receiverandroid:name=".MaliciousDeviceAdminReceiver"android:permission="android.permission.BIND_DEVICE_ADMIN"><meta-dataandroid:name="android.app.device_admin"android:resource="@xml/device_admin" /> <!-- 权限配置文件 --><intent-filter><action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /></intent-filter>
</receiver><!-- 风险权限配置:申请全量设备管理权限 -->
<!-- res/xml/device_admin.xml -->
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"><uses-policies><force-lock /> <!-- 强制锁屏权限 --><wipe-data /> <!-- 擦除数据权限 --><disable-camera /> <!-- 禁用相机权限 --><restrict-packages /> <!-- 限制应用安装权限 --></uses-policies>
</device-admin>
// 风险代码:诱导用户激活设备管理器,激活后立即锁定设备
private void trickUserActivateDeviceAdmin() {// 弹出激活提示,伪装成“安全防护必需步骤”Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);ComponentName adminComponent = new ComponentName(this, MaliciousDeviceAdminReceiver.class);intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, adminComponent);intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "为保障手机安全,需激活安全防护(仅用于病毒扫描)"); // 欺骗性说明startActivityForResult(intent, 100);
}// 激活成功后触发勒索逻辑
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 100 && resultCode == RESULT_OK) {// 激活成功后,立即使用设备管理器权限锁定屏幕DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);ComponentName adminComponent = new ComponentName(this, MaliciousDeviceAdminReceiver.class);if (dpm.isAdminActive(adminComponent)) {// 设置随机密码并锁定屏幕String randomPwd = generateRandomPwd();dpm.resetPassword(randomPwd, 0);dpm.lockNow();// 弹出勒索提示(锁屏后通过悬浮窗显示)showRansomWindow("设备已锁定,支付500元解锁,联系QQ:123456");}}
}

用户受害流程:

  1. 下载 “手机安全卫士”,APP 提示 “激活安全防护”,用户点击同意;
  2. 设备管理器激活成功后,APP 立即锁定屏幕并设置随机密码;
  3. 用户无法解锁,只能看到勒索提示,被迫支付赎金;
  4. 即使卸载 APP,设备管理器权限未解除,仍处于锁定状态。

二、管理器安全防御方案

针对两类管理器的风险,需结合 Android 系统特性(如 Android 15 的下载拦截、设备管理器二次验证),从 “源头管控、权限限制、行为追溯” 三方面制定防御措施:

1. 下载管理器安全加固:来源校验 + 完整性校验 + 行为管控

核心措施
  • 校验下载链接来源:仅允许从可信域名(如官方域名)下载,禁止使用外部传入的未知 URL;

  • 强制文件完整性校验:下载前获取合法文件的 MD5/SHA256,下载完成后比对,不一致则删除文件;

  • 限制危险文件类型:禁止下载.apk、.xapk 等可执行文件,若需下载需额外用户授权;

  • 适配 Android 存储沙箱:Android 11 + 使用getExternalFilesDir()存储下载文件,避免其他 APP 访问;

  • 监听下载异常:通过 DownloadManager 监听下载失败、暂停状态,及时提示用户并清理异常文件。

安全实现代码
public class SecureDownloadManager {private Context mContext;private DownloadManager mDownloadManager;// 可信下载域名白名单(仅允许官方域名)private static final List<String> TRUSTED_DOMAINS = Arrays.asList("official.example.com", "cdn.official.com");// 合法插件的SHA256(从服务器获取,避免硬编码)private String mLegalFileSha256;public SecureDownloadManager(Context context) {this.mContext = context;this.mDownloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);}// 安全下载插件:校验来源、完整性、类型public void downloadPluginSecurely(String legalPluginUrl, String legalFileSha256) {this.mLegalFileSha256 = legalFileSha256;// 校验下载链接来源(是否为可信域名)Uri downloadUri = Uri.parse(legalPluginUrl);String host = downloadUri.getHost();if (!TRUSTED_DOMAINS.contains(host)) {Log.e("DownloadSecurity", "非法下载来源:" + host);showToast("下载链接不可信,已取消");return;}// 校验文件类型(禁止直接下载.apk)String fileExtension = MimeTypeMap.getFileExtensionFromUrl(legalPluginUrl);if ("apk".equals(fileExtension) || "xapk".equals(fileExtension)) {Log.e("DownloadSecurity", "禁止下载可执行文件:" + fileExtension);showToast("暂不支持该类型文件下载");return;}// 配置下载请求(适配Android 11+存储沙箱)DownloadManager.Request request = new DownloadManager.Request(downloadUri);// 设置MIME类型(非可执行类型)request.setMimeType("application/zip"); // 假设插件为zip格式// 存储到APP私有外部目录(仅当前APP可访问)File downloadDir = mContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);File downloadFile = new File(downloadDir, "plugin_update.zip");request.setDestinationUri(Uri.fromFile(downloadFile));// Android 15适配:启用系统危险文件拦截if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {request.setAllowedRiskyFileTypes(false); // 禁用危险文件类型下载}// 发起下载并注册完成监听long downloadId = mDownloadManager.enqueue(request);registerDownloadCompleteReceiver(downloadId, downloadFile.getAbsolutePath());}// 监听下载完成,校验文件完整性private void registerDownloadCompleteReceiver(long downloadId, String filePath) {mContext.registerReceiver(new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {long receivedDownloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);if (receivedDownloadId != downloadId) return;DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId);Cursor cursor = mDownloadManager.query(query);if (cursor.moveToFirst()) {int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));if (status == DownloadManager.STATUS_SUCCESSFUL) {// 校验文件完整性(SHA256比对)try {String downloadedFileSha256 = getFileSha256(filePath);if (mLegalFileSha256.equals(downloadedFileSha256)) {showToast("下载成功,开始解压插件");// 合法文件,执行解压逻辑unzipPlugin(filePath);} else {Log.e("DownloadSecurity", "文件完整性校验失败,删除文件");showToast("下载文件已篡改,已删除");new File(filePath).delete(); // 删除篡改文件}} catch (Exception e) {e.printStackTrace();new File(filePath).delete();}} else if (status == DownloadManager.STATUS_FAILED) {String errorMsg = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_REASON));Log.e("DownloadSecurity", "下载失败:" + errorMsg);showToast("下载失败:" + errorMsg);}}cursor.close();// 取消广播注册,避免内存泄漏mContext.unregisterReceiver(this);}}, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));}// 计算文件SHA256private String getFileSha256(String filePath) throws NoSuchAlgorithmException, IOException {MessageDigest digest = MessageDigest.getInstance("SHA-256");FileInputStream fis = new FileInputStream(filePath);byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) != -1) {digest.update(buffer, 0, len);}fis.close();// 转换为十六进制字符串BigInteger bigInt = new BigInteger(1, digest.digest());return bigInt.toString(16);}// 插件解压private void unzipPlugin(String filePath) {// 解压逻辑...}private void showToast(String msg) {Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();}
}

2. 设备管理器注册安全:权限透明化 + 功能最小化 + 退出便捷化

核心措施
  • 权限申请透明化:明确告知用户激活设备管理器的目的与具体权限(如 “仅用于远程锁屏,无数据擦除权限”),避免欺骗性说明;

  • 功能权限最小化:仅申请业务必需的权限(如仅需 “强制锁屏” 则不申请 “擦除数据”),减少风险面;

  • 提供便捷退出入口:在 APP 设置中添加 “解除设备管理器权限” 选项,引导用户通过系统路径解除激活;

  • 适配 Android 版本限制:Android 15 要求设备管理器激活需用户二次确认(输入锁屏密码),需兼容该验证流程;

  • 检测异常激活:若检测到非用户主动触发的激活请求(如后台自动唤起激活页面),立即终止流程。

合规代码示例(权限申请与解除逻辑)
<!-- 合规配置:仅申请必需的设备管理权限 -->
<!-- res/xml/device_admin合规版.xml -->
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"><uses-policies><force-lock /> <!-- 仅申请“强制锁屏”权限(业务必需) --><!-- 移除非必需权限:wipe-data、disable-camera等 --></uses-policies>
</device-admin>
public class SecureDeviceAdminManager {private Context mContext;private DevicePolicyManager mDpm;private ComponentName mAdminComponent;public SecureDeviceAdminManager(Context context) {this.mContext = context;this.mDpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);this.mAdminComponent = new ComponentName(context, SecureDeviceAdminReceiver.class);}// 合规激活设备管理器:明确告知权限用途public void requestActivateDeviceAdmin() {// 先检查是否已激活,避免重复请求if (mDpm.isAdminActive(mAdminComponent)) {showToast("设备管理器已激活");return;}// 弹出激活提示,明确说明权限用途Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminComponent);// 详细说明激活目的与权限范围(无欺骗性)intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "为实现“远程锁屏”功能(如手机丢失后锁定设备),需激活设备管理器:\n" +"1. 仅获取“强制锁屏”权限,无数据擦除、监控权限;\n" +"2. 可在APP“设置-安全中心”中解除激活。");// Android 15适配:检测是否需要二次验证(输入锁屏密码)if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {intent.putExtra(DevicePolicyManager.EXTRA_REQUIRE_PASSWORD_CONFIRMATION, true);}mContext.startActivityForResult(intent, 200);}// 提供便捷解除激活入口(引导用户通过系统路径解除)public void showDeactivateGuide() {if (!mDpm.isAdminActive(mAdminComponent)) {showToast("设备管理器未激活");return;}// 弹出对话框,引导用户通过系统设置解除new AlertDialog.Builder(mContext).setTitle("解除设备管理器权限").setMessage("请按以下步骤操作:\n" +"1. 打开手机“设置-安全-设备管理器”;\n" +"2. 找到“XXAPP设备管理”,取消激活;\n" +"3. 解除后“远程锁屏”功能将不可用。").setPositiveButton("前往设置", (dialog, which) -> {// 跳转到系统安全设置页面Intent settingsIntent = new Intent(Settings.ACTION_SECURITY_SETTINGS);mContext.startActivity(settingsIntent);}).setNegativeButton("取消", null).show();}// 安全使用设备管理器权限(仅执行业务必需操作)public void lockDeviceRemotely() {// 检查是否已激活且拥有权限if (!mDpm.isAdminActive(mAdminComponent) || !mDpm.hasGrantedPolicy(mAdminComponent, DevicePolicyManager.POLICY_FORCE_LOCK)) {showToast("无锁屏权限,请先激活设备管理器");return;}// 仅执行“强制锁屏”操作(无越权行为)mDpm.lockNow();showToast("设备已远程锁定");}private void showToast(String msg) {Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();}// 设备管理器接收器(仅处理激活/解除通知,无额外逻辑)public static class SecureDeviceAdminReceiver extends DeviceAdminReceiver {@Overridepublic void onEnabled(Context context, Intent intent) {super.onEnabled(context, intent);Toast.makeText(context, "设备管理器激活成功,可使用远程锁屏功能", Toast.LENGTH_SHORT).show();}@Overridepublic void onDisabled(Context context, Intent intent) {super.onDisabled(context, intent);Toast.makeText(context, "设备管理器已解除,远程锁屏功能不可用", Toast.LENGTH_SHORT).show();}}
}

三、管理器安全测试方法

系统管理器的安全测试需覆盖 “权限申请 - 功能执行 - 异常处理” 全流程,结合静态代码审核与动态风险模拟,确保防御措施生效:

1. 静态测试(代码与配置审核)

  • 下载管理器检测
  1. 搜索代码中DownloadManager.Request的创建逻辑,确认是否校验下载 URL 的 Host(是否在可信白名单);
  2. 检查下载完成后是否有文件完整性校验(如 SHA256 比对),是否禁止下载.apk 等危险文件;
  3. 确认 Android 11 + 的下载路径是否使用getExternalFilesDir(),避免存储到公共目录;
  • 设备管理器检测
  1. 查看device_admin.xml中的<uses-policies>,确认无过度申请的权限(如仅需锁屏却申请擦除数据);
  2. 搜索激活设备管理器的代码,检查EXTRA_ADD_EXPLANATION是否明确说明权限用途,无欺骗性描述;
  3. 确认是否提供解除激活的引导入口,代码中无隐藏解除路径的逻辑。

2. 动态测试(风险场景模拟)

  • 下载管理器风险模拟
  1. 劫持下载链接:使用 Charles 抓包工具,将合法下载 URL 替换为恶意文件 URL,验证 APP 是否拒绝下载;
  2. 篡改下载文件:下载完成后手动替换文件(如修改 zip 包内容),验证 APP 是否检测到完整性异常并删除文件;
  3. 测试危险文件下载:尝试传入.apk 格式的下载 URL,验证 APP 是否禁止下载或提示用户授权;
  • 设备管理器风险模拟
  1. 模拟激活流程:点击激活设备管理器,验证提示信息是否透明,Android 15 是否触发二次密码验证;
  2. 测试权限边界:尝试调用未申请的权限,验证是否执行失败;
  3. 解除激活测试:按照 APP 引导的路径解除激活,验证是否能成功取消设备管理器权限,且 APP 功能正常降级(如远程锁屏不可用)。

3. 版本兼容性测试

检查 APK 是否控制系统为高 SDK 版本,否则进行如下测试:

  • 测试 Android 10(存储未沙箱)、Android 11(存储沙箱)、Android 15(下载拦截 + 二次验证)等版本,确认下载管理器的完整性校验、路径配置在各版本正常工作;

  • 验证设备管理器在 Android 15 上的激活流程,确认二次密码验证生效,且权限申请逻辑兼容新系统限制。

四、总结:系统管理器安全的核心原则

系统管理器作为 Android 的 “高权限组件”,安全防御需遵循 “权限匹配、透明可控、最小风险” 三大核心原则:

  1. 权限匹配:下载管理器的功能(如文件类型、存储路径)与安全检测(来源、完整性)匹配,设备管理器的权限与业务需求匹配,避免 “功能超范围” 或 “权限超需求”;
  2. 透明可控:下载链接的来源、设备管理器的权限用途需明确告知用户,不做欺骗性引导;同时提供便捷的风险控制入口(如取消下载、解除激活),让用户掌握控制权;
  3. 最小风险:对下载文件实施 “白名单来源 + 完整性校验” 双重管控,对设备管理器权限实施 “按需申请 + 边界检测”,从源头降低攻击面。

系统管理器的安全漏洞往往源于 “对高权限组件的轻视”—— 开发者若认为 “系统组件默认安全” 而省略检测逻辑,会给攻击者留下可乘之机。唯有将 “安全检测” 嵌入管理器的每一步操作(下载前校验、激活前告知、使用中监控),才能抵御潜在的安全威胁。

http://www.dtcms.com/a/431334.html

相关文章:

  • 有做淘宝网站的在线网络制作系统
  • 【VSCode中Java开发环境配置的三个层级之Maven篇】(Windows版)
  • 10.1 刷题心得
  • 前端-Vue工程化
  • 深圳企业网站制作中心用网站做CAN总线通信好吗
  • 中山移动网站建设报价三室一厅二卫装修效果图
  • .net商城网站开发做封面的地图网站
  • 复习一下Cpp(1)
  • 什么网站访问量公司变更地址需要多少钱
  • final字段单元测试
  • 车载Class D功放电源脚烧蚀可能原因
  • 34线城市做网站推广最新新闻事件摘抄
  • 嵌入式ARM程序高级调试技能:26. ARM Linux CPU高负载分析:系统调用过多导致的线程高负载案例
  • 无锡企业自助建站系统网站开发和游戏开发的区别
  • 外贸网站平台都有哪些平台毕业设计做网站简单吗
  • dotnet-sdk-5.0.408-win-x64安装教程(附详细步骤和附安装包)
  • 数据要素X_解读 第三批“数据要素×”典型案例——金融服务领域【附全文阅读】
  • 一篇文章讲清Prompt、Agent、MCP、Function Calling
  • 网站栏目设计方案物流网络货运平台
  • 异步静态Sdram操作
  • 淘宝客的网站是怎么做的运城学院教务网络管理系统
  • 天津哪里做网站东莞网站建设服务有什么用
  • 网站原型设计和版式设计网站设计哪家公司好
  • 详解doris基础
  • 利用表单大师做网站济南建网站app
  • 网站需求分析文档懒人办公ppt模板免费
  • Java 集合框架之 List 全面解析(从概念到实践)
  • Linux-03_02(Linux实用操作)
  • 毕业设计 网站开发如何用dw做网站框架
  • Matlab通过GUI实现点云的最小二乘法(Kabsch)配准