如何隐藏exe或dll中的字符串?

2024-03-02

我发现可以从二进制文件中提取硬编码字符串。
例如属性视图流程浏览器 http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx显示所有超过 3 个字符的字符串。

这是我为了简单测试而编写的一个简单可执行文件的代码:

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#include <stdio.h>
#include <tchar.h>
#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
    _TCHAR* hiddenString1 =_T("4537774B-CC80-4eda-B3E4-7A9EE77991F5");
    _TCHAR* hiddenString2 =_T("hidden_password_or_whatever");
    for (int i= 0; i<argc; i++) {
        if (0 == _tcscmp(argv[i],hiddenString1)) {
            _tprintf (_T("The guid argument is correct.\n")); }
        else if (0 == _tcscmp(argv[i],hiddenString2)) {
            _tprintf (_T("Do something here.\n")); }
    }

    _tprintf (_T("This is a visible string.\n"));
    //Keep Running
    Sleep(60000);
    return 0;
}

The strings can clearly be extracted from the corresponding executable:
alt text

我认为找到琴弦有点太容易了。

我的问题是:

  1. How to simply hide 隐藏字符串1 or 隐藏字符串2在里面 可执行的?
  2. 有没有更安全的 使用“作弊代码”的方式比 一些晦涩的隐藏输入?

欢迎来到更广阔的防御性编程世界。

有几种选择,但我相信所有这些都依赖于某种形式的混淆;尽管并不完美,但至少是一些东西。

  1. 您可以以其他二进制形式(十六进制?)存储文本,而不是直接字符串值。

  2. 您可以加密存储在应用程序中的字符串,然后在运行时解密它们。

  3. 您可以将它们拆分到代码中的各个点,然后再重新构建。

或者它们的某种组合。

请记住,某些攻击比查看实际的二进制文件更进一步。有时他们会在程序运行时调查程序的内存地址空间。 MS 想出了一个叫做.Net 2.0 中的安全字符串 http://msdn.microsoft.com/en-us/library/system.security.securestring.aspx。目的是在应用程序运行时保持字符串加密。

第四个想法是不要将字符串存储在应用程序本身中,而是依赖验证代码提交到您控制的服务器。在服务器上您可以验证它是否是合法的“作弊代码”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何隐藏exe或dll中的字符串? 的相关文章

  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 如何禁止 celery 中的 pickle 序列化

    Celery 默认使用 pickle 作为任务的序列化方法 如中所述FAQ http ask github com celery faq html isn t using pickle a security concern 这代表一个安全漏
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反

随机推荐

  • Windows 上的 XNA 网络

    XNA 的内置网络功能有哪些 是否可以在Windows中使用XNA的内置网络 如果可以的话 有什么限制吗 如果您使用Microsoft Xna Framework Net 命名空间 http msdn microsoft com en us
  • Gem::Specification.reset 期间未解决的规范:

    启动 Guard 时 我得到以下输出 guard WARN Unresolved specs during Gem Specification reset lumberjack gt 1 0 2 ffi gt 0 5 0 WARN Clea
  • 重塑矩阵并将其转换为数据框,跟踪原始行和列索引

    我有一个大的 n m 矩阵 我想将其转换为 n m 3 数据框 我的矩阵类似于 1400 800 数据框的第一列应包含矩阵行索引 第二列应包含矩阵列索引 数据框的第三列应包含矩阵中每个单元格的值 我用 for 循环解决了这个问题 但我认为这
  • 访问 iText 中的 OpenType 字形变体

    在 iText 中使用 OpenType 字体构建 PDF 文档时 我想从字体内访问字形变体 特别是表格数字 由于 OpenType 字形变体没有 Unicode 索引 因此我不确定如何指定我想要使用一组特定的变体 表格数字 或通过其字形
  • iOS - 架构armv7的2个重复符号

    我在用Resty http projects lukeredpath co uk resty 在我的项目中的任何地方 但现在由于我必须将图像上传到服务器 所以我尝试添加另一个名为RestKit http restkit org 处理文件上传
  • Facebook JavaScript SDK 不适用于 Chrome 扩展

    我正在写一个 chrome 扩展 该扩展的功能包括 Facebook 登录 该扩展不支持外部 JavaScript 链接 因此我必须在扩展的清单文件中创建 content security policy 现在可以了 正在加载Facebook
  • 读取 strcpy() 返回值上的字符串字符时出错

    我尝试打印出strcpy 的返回值 https stackoverflow com questions 3561427 strcpy return value它给了我一个 访问冲突读取位置 异常 char ind 15 printf s n
  • 如何将单独的 int 值转换为十六进制字节数组

    我需要做一些 对我来说新的 int hex byte 工作 并且我正在努力使其正确 另一端的 tcp 服务器需要 Little Endian 我需要发送一个由十六进制值组成的字节数组 6000需要发送为 0x70 0x17 19需要发送为
  • Android Instant App - Play 控制台发布/部署错误且 DAL(数字资产链接)未链接

    我试图弄清楚为什么游戏商店不接受我的即时应用程序构建 我已经成功部署了Alpha定期向测试人员发布应用程序 因为这是发布即时应用程序的先决条件 我正在尝试部署一个发展发布即时应用程序 我究竟做错了什么 我尝试添加尽可能多的细节 我是否需要使
  • 在对象释放和垃圾回收之后,Java 仍然使用系统内存

    我正在运行 JVM 1 5 0 Mac OS X 默认 并且我正在活动监视器中监视我的 Java 程序 我有以下内容 import java io BufferedReader import java io IOException impo
  • Erlang 可以使用哪些分布式进程注册表?

    我想为 Erlang 编译一个相当完整的分布式进程注册表库列表 此类库需要支持基本操作 例如register name Pid Name and whereis name Name 并且理想情况下registered names 0 名称不
  • 对布尔键进行 DynamoDB 查询

    我是 DynamoDB 以及一般的 noSQL 新手 并且在理解一些概念方面遇到了一些困难 特别是一件事给我带来了一些问题 即基于布尔键查询表 我意识到我无法在布尔键上创建主索引或辅助索引 但我不知道理想情况下应该如何对具有以下结构的表进行
  • c/c++ 左移无符号 vs 有符号

    我有这个代码 include
  • 为一个别名加载 Java KeyStore?

    有谁知道是否可以加载密钥库 以便仅提示输入给定别名的密码 Example 在我的密钥存储中 我有两个私钥 Alice 的加密证书和 Bob 的加密证书 当我加载我的密钥存储时 keyStore KeyStore getInstance Wi
  • 如何创建私有远程perforce分支并推送到它?

    熟悉git 第一次使用perforce 我正在开发自己的功能 我不想将其推送到主线远程存储库 我需要类似 git 远程分支的东西 其中 我可以提交我的更改 就像是git commit 我可以推送到不合并的远程私有分支 就像是git push
  • 带有枚举输入参数的 Webapi post 方法

    当尝试调用采用枚举作为输入参数的 Web API 方法时 为什么会出现下面屏幕截图中的错误 我该如何解决这个问题 看起来像messageDestinationType无论我做什么始终为空 我更愿意将输入类型保留为枚举 我对使用 Web ap
  • 如何修复导入错误:无法从plotly(python)导入Dash中的名称“Event”?

    我正在研究数据可视化任务 其中使用了plotly python 中的Dash 当我运行代码时 我收到一个错误 导入错误 无法导入名称 事件 我尝试了各种安装过程 例如 pip install events 或 pip install Eve
  • 如何在 @RequestParam() 中将默认值指定为整数

    我是新来的弹簧靴和学习 RequestParam 我知道我们可以在字符串中给出默认值 但是当我尝试将默认值作为整数给出时 它向我显示一个错误 RequestMapping returnVeriable public int getVeria
  • playframework 中的分页

    我想在 Play FrameWork 中实现分页 是否有任何教程或示例 我已经浏览了那里的网站并完成了教程 但无法实现分页 Thanks 我已经实现了很多页面play 使用播放分页模块 http www playframework org
  • 如何隐藏exe或dll中的字符串?

    我发现可以从二进制文件中提取硬编码字符串 例如属性视图流程浏览器 http technet microsoft com en us sysinternals bb896653 aspx显示所有超过 3 个字符的字符串 这是我为了简单测试而编