【C++】Unicode控制字符-RLO在文件伪装中的高级应用与防御策略

【C++】揭秘Unicode控制字符-RLO在文件伪装中的高级应用 本文深入探讨了Unicode控制字符RLO在C++编程中的高级应用,特别是其在文件伪装中的工作原理与安全风险。通过实例代码展示了如何利用RLO字符实现文件后缀欺骗,并提供了防御措施与检测技术,帮助开发者识别和防范此类安全威胁。 阅读详情

1. 从“图片”到“陷阱”:RLO字符如何欺骗你的眼睛

你可能遇到过这种情况:朋友发来一张“图片”,文件名显示为“风景.png”,你双击打开,结果电脑却弹出了一个安装程序,或者更糟,直接中了病毒。这不是魔法,而是一种利用了Unicode标准中一个特殊控制字符的古老但依然有效的欺骗技术。这个字符就是RLO,全称是“Right-to-Left Override”,即“从右到左覆盖”。

让我用一个最生活化的例子来解释。我们平时写文件名,比如“report.pdf”,阅读顺序是从左到右:r-e-p-o-r-t-.-p-d-f。但RLO字符就像一个神奇的“镜子”或“逆转器”。当系统在文件名中遇到这个不可见的RLO字符时,它会告诉系统:“嗨,从这里开始,后面的所有字符,请按照从右到左的顺序来显示!” 注意,这只是显示顺序的改变,文件在磁盘上的实际字节序列并没有变。

这就产生了戏剧性的效果。假设我有一个恶意程序叫“virus.exe”。如果我在“viru”和“s.exe”之间插入一个RLO字符,系统显示文件名时,遇到RLO后,就会把“s.exe”这部分从右到左显示,变成“exe.s”。那么,整个文件名看起来就成了“viruexe.s”。如果我再把“viru”这部分精心设计一下,比如改成“gpj”,那么最终显示出来的文件名就是“gpjexe.s”。此时,如果我在这串字符的末尾加上“.png”,整个文件名看起来就会是“gpjexe.s.png”。对于匆忙的用户来说,他们很可能只注意到最后的“.png”,以为这是一个无害的图片文件。

在C++编程中,处理字符串和文件时,如果我们不警惕这种控制字符,就可能在生成文件、验证文件名或显示文件列表时,将危险的文件伪装成安全的类型。这种攻击并不新鲜,但因为它利用了文字显示的基本规则,所以只要支持Unicode的系统(现在几乎是所有主流系统),都可能面临风险。理解它的原理,既是作为开发者构建安全软件的需要,也是作为普通用户保护自己的第一道防线。

2. 深入原理:Unicode双向算法与RLO的工作机制

要真正理解RLO,我们不能停留在表面技巧,得稍微深入一点Unicode的“双向算法”。我们使用的很多语言,比如中文、英文,书写顺序是从左到右;但也有一些语言,比如阿拉伯语、希伯来语,书写顺序是从右到左。当一段文字中混合了这两种方向的字符时,计算机就需要一套规则来决定如何正确显示,这套规则就是Unicode双向算法。

RLO是这套算法中的一个强指令字符。它是不可见的控制字符,但功能强大:

  • U+202E (RLO):这是一个强制的开始标记。它告诉渲染引擎:“不管后面的字符原本是什么方向属性,从现在起,全部当作从右到左的文本处理,直到遇到一个方向性终止符。”
  • U+202C (PDF):这就是“方向格式终止符”。它用来结束上一个RLO(或LRO,即从左到右覆盖)的影响范围,让文本恢复正常的双向算法计算。

在文件名的欺骗利用中,攻击者通常不会主动插入PDF终止符。为什么?因为这样可以让RLO的影响一直持续到文件名末尾,确保整个后缀部分都被逆转显示,从而达到最佳的伪装效果。

让我们在C++的层面看看它的本质。在内存中,字符串不过是一串字节或宽字符。一个包含RLO的文件名字符串在内存中的存储顺序是线性的、正常的。例如,表示“gnp.scr”并插入RLO的Unicode宽字符序列可能是这样的(16进制表示):

// 字符序列:g, n, p, ., s, c, r
// 在“g”和“n”之间插入RLO (U+202E)
wchar_t deceptiveName[] = {L'g', 0x202E, L'n', L'p', L'.', L's', L'c', L'r', L'\0'};
// 内存存储顺序:'g' -> RLO -> 'n' -> 'p' -> '.' -> 's' -> 'c' -> 'r'

当系统调用文件浏览器的API(比如SHGetFileInfo或直接使用Shell)来显示这个文件名时,渲染引擎会解析这个字符序列。一旦遇到0x202E,引擎就会启动从右到左的显示模式。于是,它开始处理后续字符:

  1. 遇到 'n', 显示准备(但顺序待定)。
  2. 遇到 'p'。
  3. 遇到 '.'。
  4. 遇到 's'。
  5. 遇到 'c'。
  6. 遇到 'r'。 由于是在RLO模式下,这些字符被从序列的尾部开始向前组合成显示单元。所以显示逻辑会认为顺序是 'r' -> 'c' -> 's' -> '.' -> 'p' -> 'n',最终呈现给用户的视觉字符串就变成了“rcs.png”。而开头的那个'g',因为在RLO之前,所以正常显示在最左边,结果就是“grcs.png”。如果这个'g'是某个单词的一部分,比如“log”,那么最终看起来就是“logrcs.png”,完美伪装。

3. C++实战:构造与检测RLO文件名

了解了原理,我们动手用C++来演示如何生成和识别这类文件。我会分享一些我实际编码中踩过的坑和验证过的代码片段。

3.1 如何生成一个RLO欺骗文件

在C++中,我们要直接操作Unicode字符串。通常我们使用wchar_t和std::wstring来处理宽字符。生成一个欺骗性文件名,核心就是构造一个包含RLO字符的字符串,并用它来调用文件创建API。

下面是一个简单的示例程序,它会创建一个看起来像“picture.png”,但实际执行起来是“.scr”屏幕保护程序(可执行文件)的文件。请注意,此代码仅用于教育目的,请勿用于非法活动。

#include <windows.h>
#include <string>
#include <iostream>

int main() {
    // 准备一个恶意负载的二进制数据(这里用一个简单的文本文件模拟)
    const char dummyData[] = "This is a simulated executable content.\n";
    
    // 构造欺骗性文件名:目标是显示为 "picture.png"
    // 实际存储: "picture[RLO]gnp.scr"
    // 显示逻辑: RLO后面的 "gnp.scr" 被反转为 "rcs.png"
    // 最终显示: "picture" + "rcs.png" = "picture.png"
    
    std::wstring deceptiveFilename = L"picture";
    deceptiveFilename.push_back(0x202E); // 插入RLO控制字符 (U+202E)
    deceptiveFilename += L"gnp.scr"; // 这部分会被反向显示
    
    std::wcout << L"创建文件: " << deceptiveFilename << std::endl;
    // 注意:在控制台输出,可能无法正确渲染RLO,显示为乱码或方框,但文件系统API能识别。
    
    // 使用Windows API创建文件
    HANDLE hFile = CreateFileW(
        deceptiveFilename.c_str(),
        GENERIC_WRITE,
        0,
        NULL,
        CREATE_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL
    );
    
    if (hFile != INVALID_HANDLE_VALUE) {
        DWORD bytesWritten;
        WriteFile(hFile, dummyData, sizeof(dummyData) - 1, &bytesWritten, NULL);
        CloseHandle(hFile);
        std::wcout << L"文件创建成功。在资源管理器中查看,它可能显示为‘picture.png’。" << std::endl;
    } else {
        std::wcerr << L"文件创建失败。错误代码: " << GetLastError() << std::endl;
    }
    
    return 0;
}

编译运行这段代码后,你会在当前目录看到一个文件。在Visual Studio的控制台里,文件名可能显示异常。但如果你打开Windows文件资源管理器,这个文件有很大概率会显示为“picture.png”。双击它,如果.scr文件关联了执行,它就会运行。这就是欺骗的整个过程。

3.2 如何检测和防御RLO欺骗

作为开发者,我们在编写需要处理用户上传文件、扫描目录或显示文件列表的程序时,必须加入对RLO等双向控制字符的检测。防御的核心思路是:规范化文件名,并检查其中是否包含危险的控制字符。

这里提供几个实用的C++检测函数:

方法一:扫描并移除/标记双向控制字符 这是最直接的方法。遍历文件名中的每个宽字符,检查其是否属于Unicode双向控制字符范围。

#include <string>
#include <algorithm>
#include <cwctype>

bool ContainsBidirectionalControl(const std::wstring& filename) {
    // 检查常见的双向控制字符
    for (wchar_t c : filename) {
        switch (c) {
            case 0x202A: // LRE
            case 0x202B: // RLE
            case 0x202C: // PDF
            case 0x202D: // LRO
            case 0x202E: // RLO
            case 0x2066: // LRI
            case 0x2067: // RLI
            case 0x2068: // FSI
            case 0x2069: // PDI
                return true;
        }
    }
    return false;
}

std::wstring SanitizeFilename(const std::wstring& filename) {
    std::wstring sanitized;
    sanitized.reserve(filename.size());
    
    for (wchar_t c : filename) {
        switch (c) {
            case 0x202A: case 0x202B: case 0x202C:
            case 0x202D: case 0x202E:
            case 0x2066: case 0x2067: case 0x2068: case 0x2069:
                // 遇到控制字符,可以选择替换为下划线或直接跳过
                sanitized.push_back(L'_');
                break;
            default:
                sanitized.push_back(c);
        }
    }
    return sanitized;
}

方法二:规范化并验证后缀 更稳健的方法是,不仅检查控制字符,还对文件名进行“规范化”处理,提取出真实的文件扩展名进行验证。

#include <string>
#include <algorithm>
#include <cwctype>

std::wstring GetRealExtension(const std::wstring& filename) {
    // 1. 首先找到最后一个点号的位置
    size_t lastDot = filename.find_last_of(L'.');
    if (lastDot == std::wstring::npos) {
        return L""; // 没有扩展名
    }
    
    // 2. 获取点号之后的部分作为“候选扩展名”
    std::wstring candidateExt = filename.substr(lastDot + 1);
    
    // 3. 关键步骤:移除候选扩展名中的所有双向控制字符
    //    因为RLO可能影响显示,但不会改变‘.’字符在内存序列中的位置。
    //    真正的扩展名是最后一个‘.’之后,去除控制字符后的部分。
    candidateExt.erase(std::remove_if(candidateExt.begin(), candidateExt.end(),
        [](wchar_t c) {
            return (c >= 0x202A && c <= 0x202E) || (c >= 0x2066 && c <= 0x2069);
        }), candidateExt.end());
    
    // 4. 转换为小写以便比较
    std::transform(candidateExt.begin(), candidateExt.end(), candidateExt.begin(), ::towlower);
    
    return candidateExt;
}

bool IsSafeFileType(const std::wstring& filename) {
    static const std::unordered_set<std::wstring> safeExtensions = { L"txt", L"pdf", L"jpg", L"png", L"docx" };
    
    std::wstring realExt = GetRealExtension(filename);
    
    // 额外安全检查:如果清理控制字符后扩展名变了,说明原文件名可疑
    if (realExt.empty()) {
        return false; // 或者根据策略决定
    }
    
    return safeExtensions.find(realExt) != safeExtensions.end();
}

在实际项目中,我建议将方法一和方法二结合使用。首先用ContainsBidirectionalControl进行快速过滤,对可疑文件进行告警或拦截。然后对于需要严格验证的文件,使用GetRealExtension获取净化后的真实扩展名进行白名单比对。同时,在保存文件到服务器或本地前,一律使用SanitizeFilename对文件名进行清洗,从根本上杜绝此类问题。

4. 高级伪装技巧与防御体系的构建

攻击者不会只满足于简单的“exe”变“png”。他们会结合其他技术,让欺骗更加难以察觉。这里我分享几种遇到过的高级组合技,以及如何构建一个立体的防御体系。

4.1 结合其他Unicode字符进行伪装

  1. 零宽度连接符与RLO:Unicode中有一些零宽度的字符,如零宽度连接符、零宽度非连接符。它们不可见,但可以影响文本的拼接和显示。攻击者可能将RLO与这些字符结合,构造出在大多数查看器中都显示正常,但实际解析时却大相径庭的文件名。
  2. 利用字符相似性:除了控制字符,Unicode还包含大量外观相似的字符。例如,西里尔字母的“а”与拉丁字母的“a”看起来几乎一样。攻击者可能制作一个名为“photo.png”的文件,但其中的“p”或“o”被替换为外形相似的异体字符。虽然这不同于RLO的逆转,但常与RLO结合,增加检测难度。防御时需要将文件名进行规范化,比如使用IdnToAscii等函数进行国际化域名转换,或将字符映射到其规范形式。

4.2 针对开发者的防御最佳实践

构建防御体系不能只靠一个函数,而应该是一套组合拳:

  • 输入验证层:在任何接受文件名的入口(上传接口、命令行参数、配置文件),强制进行规范化处理。使用上面提供的SanitizeFilename函数,拒绝或清理包含双向控制字符的文件名。
  • 存储层:保存文件时,不要使用用户提供的原始文件名。最好使用自己生成的唯一ID(如UUID)作为存储名,而将原始文件名(经过清理的)存入数据库元数据中供显示。这样,无论用户传什么,磁盘上的文件都是“干净”的。
  • 输出展示层:在Web界面或GUI中显示文件名时,不要直接输出原始字符串。对于要显示的文件名,可以再次进行过滤,将控制字符替换为可见的占位符(如[RLO]),让管理员和用户一眼就能看出异常。
  • 客户端教育:在用户界面上,可以增加安全提示。例如,在文件上传组件旁注明:“系统会自动过滤文件名中的特殊控制字符”。或者在检测到可疑文件名时,给用户一个明确的警告:“该文件名包含可能影响显示的特殊字符,已自动重命名。”
  • 使用操作系统API:有些系统API提供了更安全的文件操作方式。例如,在判断文件类型时,不要仅仅依赖扩展名,而应该使用FindFirstFile获取文件真实属性,或者读取文件头部魔数进行识别。对于可执行文件,可以检查其PE头。

4.3 一个简单的C++防御类示例

我们可以将上述策略封装成一个简单的工具类,方便在项目中使用。

#include <string>
#include <algorithm>
#include <cwctype>

class FilenameSecurity {
public:
    // 检查是否包含危险字符
    static bool isDangerous(const std::wstring& filename) {
        return ContainsBidirectionalControl(filename) || ContainsHomoglyph(filename);
    }
    
    // 获取安全的、用于存储的文件名(基于时间戳和随机数)
    static std::wstring generateSafeStorageName(const std::wstring& originalExt) {
        // 生成UUID或时间戳+随机数的文件名
        // 这里简化处理
        SYSTEMTIME st;
        GetLocalTime(&st);
        wchar_t safeName[MAX_PATH];
        swprintf_s(safeName, L"file_%04d%02d%02d_%02d%02d%02d_%03d%s",
            st.wYear, st.wMonth, st.wDay,
            st.wHour, st.wMinute, st.wSecond,
            st.wMilliseconds, originalExt.c_str());
        return safeName;
    }
    
    // 清理文件名,用于显示或记录
    static std::wstring sanitizeForDisplay(const std::wstring& filename) {
        std::wstring result;
        for (wchar_t c : filename) {
            if (IsBidirectionalControl(c)) {
                result += L"[CTRL]";
            } else if (IsHomoglyph(c)) {
                result += L"[SIM]";
            } else {
                result.push_back(c);
            }
        }
        return result;
    }
    
private:
    static bool ContainsBidirectionalControl(const std::wstring& str) {
        // 实现同上文
        for (wchar_t c : str) {
            if ((c >= 0x202A && c <= 0x202E) || (c >= 0x2066 && c <= 0x2069)) {
                return true;
            }
        }
        return false;
    }
    
    static bool ContainsHomoglyph(const std::wstring& str) {
        // 简化示例:检查一些常见的易混淆字符
        const std::wstring riskyChars = L"аеіоΑΙΚΟΡΣ"; // 例如:西里尔字母a, 希腊字母A等
        for (wchar_t c : str) {
            if (riskyChars.find(c) != std::wstring::npos) {
                return true;
            }
        }
        return false;
    }
    
    static bool IsBidirectionalControl(wchar_t c) {
        return (c >= 0x202A && c <= 0x202E) || (c >= 0x2066 && c <= 0x2069);
    }
    
    static bool IsHomoglyph(wchar_t c) {
        // 实际应用中需要更全面的映射表
        return (c == L'а' || c == L'е' || c == L'і'); // 示例
    }
};

在实际部署中,安全是一个持续的过程。除了技术手段,保持依赖库的更新、关注最新的安全公告、对团队进行安全意识培训同样重要。RLO这种“古老”的技巧能一直有效,恰恰说明很多系统在默认情况下并未对用户输入保持足够的警惕。作为C++开发者,我们有责任在处理字符串和文件系统交互时,多思考一层,将这些潜在的威胁扼杀在代码层面。

RLO文件名伪装原理与C++扫描器实战:从Unicode控制字符到防御策略 在网络安全领域,许多看似无害的文本符号背后可能隐藏着致命攻击。Unicode控制字符是一类不可见字符,却能改变文本的显示顺序,其中最典型的便是U+202E(RLO,Right-to-Left Override)。它能让文件名在资源管理器中呈现截然不同的扩展名,诱导用户双击运行恶意程序。理解Unicode双向算法是识别此类攻击的基础,攻击者通过构造特定文件名,将真实扩展名藏在逻辑末尾,而用户看到的却是伪造的PDF或图片后缀。这一技术被广泛用于钓鱼邮件和木马传播,危害极大。针对此类威胁,开发高效的扫描工具成为防 阅读详情

相关推荐

从Bat_To_Exe伪装攻击看社会工程学防御与可执行文件检测

在网络安全领域,社会工程学攻击常利用文件伪装技术绕过用户警惕,其中可执行文件伪装成图片等常见格式是典型手法。其核心原理在于攻击者通过工具封装恶意脚本,并利用系统默认设置(如隐藏文件扩展名)和图标替换进行视觉欺骗。从技术价值看,理解这种攻击有助于构建更有效的端点检测与响应(EDR)策略,通过静态特征分析(如文件头签名、PE结构)和动态行为监控(如子进程创建)进行识别。应用场景广泛覆盖渗透测试、红队评估及企业安全防护演练。本文以Bat_To_Exe Converter为例,深入剖析可执行文件伪装的技术细节,并探

weixin_33671935的博客 528

注意不可见的Unicode,可能会有极大风险。

Unicode在不同OS中的处理方式,可能会带来严重的后果,不仅仅是乱码!

weixin_43090594的博客 1707

图片伪装工具:将exe文件隐藏于图片之中

在数字化时代,信息技术的高速发展伴随着对数据安全的持续关注。图片伪装工具作为一种信息安全技术,它允许用户将敏感数据隐藏在看似无害的图片文件中,以此来绕过安全检查。这种工具使用一种称为隐写术的技术,旨在通过复杂算法将可执行文件或其他数据嵌入到图像的像素数据中,而不影响图像的视觉质量。文件伪装技术的核心在于将敏感数据(如可执行文件)隐藏在看似无害的文件中(如图片或音频文件),以此来绕过安全检测或隐藏其真实目的。

weixin_42581003的博客 1320

神奇的 UNICODE 字符 : U+202E

转载于:https://www.cnblogs.com/develon/p/10620988.html

weixin_30821731的博客 2931

所有UNICODE字符的编码表

UNICODE字符表 汉字 日文 等所有UNICODE字符的编码表

Step7语句表监控时RLO,STA,STANDARD的含义

Step7语句表监控时RLO,STA,STANDARD的含义

QQ群名片消息后缀

玩了一下QQ昵称后缀,发现之前的Unicode码不能用了,显示无法修改,搜了一下发现没有太多教学修改,就自己发了,当做笔记吧,之前的为U+202E(右到左输出)现可以使用U+2067编码,如图。使用软件名:Unicodepad 也可使用记事本显示Unicode码进行编辑。

qq_58429272的博客 4219

Flowable高级篇 -6.8.0 最全表结构说明-主要表结构字段注释

flowable 28张表 详细

billzhen的博客 1万+

QQ群反向昵称、恶搞昵称的原理

想必大家经常会看到用来调戏QQ系统消息的昵称,在手机上会有【xxx撤回了一条消息,并亲了你一口】的神奇效果。本文只简单讨论背后unicode相关的原理,不涉及文本框的显示原理。 我的昵称显示为“gloria汪”,但撤回时会出现这样一条消息: 图1 撤回消息时神奇效果​​​ 什么情况?为啥我说话还带“汪”?把这一串神奇的昵称粘贴到unicode字符查询网站上在线查询,我们立马就能看出端倪:...

ggloria的博客 4万+

基于紫光展锐平台的音频调用到hal层逻辑

基于紫光展锐平台的音频调用到hal层逻辑 1、数据流程图 AudioPolicyService和AudioFlinger的创建: 这两个服务都在audioserver中启动,文件路径: frameworks/av/media/audioserver/main_audioserver.cpp 从AudioFlinger和AudioPolicyService的创建,到output的打开,以及AudioFlinger开始往底层写入数据的具体流程如下图: #mermaid-svg-kjHL4XWwkQXN6NdA

weixin_55053963的博客 1355

视觉语言模型对抗攻击与防御:从传统方法到多模态挑战

本文深入探讨了视觉语言模型(VLM)面临的对抗攻击与防御挑战,从传统单模态攻击到多模态威胁的演进。分析了包括FGSM、PGD等经典攻击方法,以及新兴的多模态攻击如跨模态对抗样本和越狱攻击。同时提出了跨模态一致性检查、动态防御机制等创新防御策略,并结合医疗影像诊断等实战案例,为提升AI系统安全性提供了重要见解。

weixin_29231725的博客 393

有趣的Unicode字符

\u202E 一个为了书写习惯是从右往左的国家而出现的字符 它的作用是把字符以后的文字,逆序显示! 比如,在这一串文字前加上'\u202E'字符,打字的时候没有任何体现 但是当你发出去,就变成了 注意,这里是把'\u202E'转换为了中文,这样可以透明隐藏,直接生效。 如果你要这样打,也是可以的 但是发出去以后,就需要对方翻译一下咯,效果如下: 这里要Unicode转中文,网上很多转换网站啊,不过需要注意的是,因为转换出来是空白字符,不要误以为是没有转换成功哦。 转换过..

平平无奇的博客 1835

SAP中MRP运行计划行超限问题的分析与解决

SAP中基于生产性物料的采购特点,通常会采用采购计划协议的方式进行采购。其具体的采购计划通常来自于成品计划独立需求,然后通过物料清单,经由MRP跑出。 在采购计划协议中的计划行中,存在一个计划行号,随着MRP在不断跑出新的计划行,该行号资源会消耗完。当计划行号消耗完后,MRP不会再跑出新的计划行。且在MD04或MD02中看不到类似提示信息。此时可以通过MD05来查看是否出现类似下图的提示信息。 ...

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 3845

exe当作图片隐藏和释放运行测试

编译DecryptFromBmp,此时outputbmp.bmp便会被打包进DecryptFromBmp的资源中,DecryptFromBmp运行时便会释放出exe和dll,并加载执行。在EncryptAsBmp工程下的workpath目录中存放需要隐藏的exe和dll,然后运行EncryptAsBmp,此时便会将exe和dll生成outputbmp.bmp。本程序需要编译,故没有实用性。

要把所有那些负面的信息当做对自身行为的评价,而不是对自身价值的评判。 655

Vivado ILA抓DDR信号(各种IO信号:差分、ISERDES、IOBUFDS等)

Vivado ILA抓DDR信号(各种IO信号:差分、ISERDES、IOBUFDS等)

千歌叹尽执夏的博客 1109

视觉-语言模型:BLIP与Flamingo如何理解图文?

视觉-语言模型:BLIP与Flamingo如何理解图文? ,人工智能,计算机视觉,大模型,AI,在当今人工智能飞速发展的时代,视觉 - 语言模型作为多模态领域的关键技术,正逐渐改变着我们与数字世界交互的方式。它们致力于打破图像与文本之间的模态壁垒,使计算机能够像人类一样,综合理解和处理视觉与语言信息。其中,BLIP 和 Flamingo 两款模型脱颖而出,以独特的架构和创新的训练方法,在图像描述生成、视觉问答、图文检索等任务中展现出卓越的性能。本文将深入剖析 BLIP 与 Flamingo 模型的工作原理。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

文件名伪装_RLO(红队钓鱼)

Rlo,即Right-to-LeftOverride 在文件名中插入此类unicode字符,来达到文件名反转的效果 将exe文件命名为mdgnp.exe,然后重命名选中md和gnp,之间插入Unicode控制字符RLO 保存文件名,然后更换图标即可

qq_44657899的博客 2492

RK3588多核NPU并行加速yolo优化教程:基于线程池的高性能推理实现

本教程详细介绍了RK3588多核NPU的并行加速优化方法。RK3588搭载三个独立NPU核心,总计算能力达6TOPS,但传统单线程方式无法充分发挥其性能。文章从硬件架构分析入手,详细讲解了三核心独立处理架构和多种工作模式,并通过代码示例展示了线程池技术的实现原理。线程池通过预创建工作线程、任务队列和条件变量等核心组件,避免了频繁创建线程的开销,能显著提升NPU的并行处理效率。教程还提供了性能计算公式和内存带宽优化策略,帮助开发者最大化利用RK3588的硬件算力,实现高性能AI推理。

LXY_LOVE36的博客 1025

Windows文件名欺骗实战:如何用RLO控制字符伪装exe为docx(附Python脚本)

本文深入剖析了利用Unicode RLO控制字符在Windows系统中进行文件名欺骗的攻击手法。通过实战演示,详细解释了如何将.exe可执行文件伪装成.docx文档,并提供了用于自动化生成与检测的Python脚本。文章旨在帮助安全研究人员和系统管理员理解此类社会工程学攻击的原理,并探讨了从技术防护到安全意识培训的多层次防御策略。

weixin_29305313的博客 468

ArcGIS Pro 3.4 二次开发 - 地理数据库

本文介绍了在ArcGIS Pro SDK 3.4和.NET 8环境下,如何操作地理数据库的多种方法。首先,通过路径打开文件地理数据库,并处理可能出现的异常。其次,使用连接属性或sde文件路径打开企业级地理数据库。此外,还展示了如何从项目项、要素图层中获取地理数据库,以及如何执行SQL语句。最后,文章详细说明了如何从地理数据库中获取单个定义或定义列表,包括表定义、要素类定义、关系类定义和要素数据集定义。这些操作均在后台线程中执行,确保应用程序的响应性。

Winemonk 944

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

RLO文件名欺骗

前阵子看一篇apt报告,里面提到了RLO文件名欺骗技术,第一次听说这个词汇,所以在网上搜了一下。 大致原理就是,在windows下面,支持一种特殊的unicode字符RLO,一个字符串中如果有这个字符的话,那么在windows下显示时,就会把RLO右侧的字符串逆序显示出来。 例: 原始字符串:abcd[RLO]efgh 在windows下显示为:abcdhgfe 攻击者可以利用这个特性,

mgxcool的专栏 7169

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

如何将你的 .exe (整蛊程序)伪装成一个文本文件(.txt)呢?

如何将你的 .exe (整蛊程序)伪装成一个文本文件(.txt)呢? 让这篇文章来告诉你怎么办!

YXY317Coder的博客 2745

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

将EXE文件伪装成JPG后,在运行时再改成EXE执行的批处理

copy/y1.jpg1.exe start1.exe

zqh139的专栏 2770

文件名利用RLO技术欺骗(学习)

效果如下: 如果再修改下图标,变成文本或图片的图标,会更具有迷惑性。 双击后可以运行,我们可以看到进程中也是这样显示 具体操作方案: (选择文件重命名) (2) (3)输入gnp后 (4)再次修改前边名字 gpedit.msc,可以自定义安全规则的这种系统,在开始菜单输入搜索gpedit.msc,打开“电脑设定”→“Windows设定”→“安全性设定”→“软体限制...

weixin_34257076的博客 867
上一篇: Tool-SQL实战:如何通过智能体框架解决Text2SQL中的条件不匹配难题
下一篇: 华为HCIA(华为认证ICT工程师)大纲
linux6sysadmin
博客等级 码龄4年 59粉丝 1615原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值