Delphi反编译[关闭]

2023-12-14

与使用其他编程语言/编译器构建的其他可执行文件相比,为什么反编译 delphi exe 如此容易?


有一些东西可以帮助逆向delphi程序:

  • 您可以获得完整的表单数据,包括事件处理程序方法的名称
  • 所有成员均具有published可见性具有与 RTTI 一起使用的元数据
  • 编译器在优化方面非常糟糕。它没有对整个程序进行优化,并且汇编通常是原始源代码的直接翻译,仅进行了较小的优化。 (至少在我使用的版本中是这样,从那时起可能有所改进)
  • 所有类,甚至那些关闭 RTTI 编译的类,都具有一定程度的可用元数据。特别是可以获得名称和继承结构classes。对于您在调试器中碰巧看到的类的任何实例,您都可以获得其 VMT 及其类名。

Delphi 使用文本文件描述表单的内容并按名称连接事件处理程序。这种方法显然需要足够的元数据来反序列化 from 的文本表示并按名称连接事件处理程序。

其他一些 GUI 工具包使用的另一种方法是自动生成代码,用于初始化表单并使用代码连接事件处理程序。由于此代码直接使用指向事件处理程序的指针并直接分配给属性/调用设置器,因此不需要任何元数据。这有一个副作用,就是倒车变得有点困难。

创建一个将 dfm 文件转换为一系列创建表单的硬编码指令的程序应该不会太难。所以像 DeDe 这样的工具将不再那么好用了。但这在实践中并没有给你带来太多好处。

但是弄清楚哪个事件处理程序对应于哪个控件/事件仍然相当容易。特别是像 FLIRT 这样的东西可以识别大多数库函数。因此,您只需在您感兴趣的断点处设置断点,然后单步执行用户代码即可。

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

Delphi反编译[关闭] 的相关文章

  • 在 Outlook 中创建带有附件的邮件并显示它

    我想在 Outlook 中创建一封带有附件的邮件并在发送之前显示它 但我想我已经尝试了几乎在网上找到的所有示例 但没有任何运气 我可以使用 Indy 但我非常想使用 Outlook 来确保邮件正确 因为它是用于商业用途 函数的任何输入 该函
  • 调用泛型类型的方法?

    为什么下面的代码在 Delphi XE 中会产生错误 unit UTest interface type TTest class public procedure Foo
  • 能否从 Vista Shell 获取 48x48 或 64x64 图标?

    如果 Vista Shell 中存在 48x48 或 64x64 图标 如何使用 SHGetFileInfo 获取在 TImage 中显示图标的句柄 我想从图像列表中选择一个代表文件夹路径的图标 并在 Timage 中显示 48x48 或
  • 构建 jar 后无法运行 exe

    我制作了一个简单的实用应用程序 其中我有一个要运行的exe文件 我通过使用它来运行 Runtime getRuntime exec this getClass getResource filename exe getPath 当我从 ide
  • msmq - 触发器 - 独立可执行调用不起作用

    过去几天我一直在尝试使用 msmq 触发器来调用 exe 文件 它永远不会被调用 这些是我遵循的步骤 创建了一个提及队列路径并检查了查看的触发器 启用 选中 创建了一个不带任何条件的规则 以便每当获得新消息时都会触发触发器 并选择提到独立可
  • 对 C# 解决方案进行逆向工程

    我知道 Visual Studio 2010 Ultimate 有一些功能 我通常会凭本能这样做 但我的日程安排非常紧张 我还安装了 Visio 2010 并将其集成到 VS 中 但它的逆向工程功能似乎没有多大作用 并且必须在每个项目的基础
  • 如何将 TGifImage 中的帧提取为位图?

    下面的演示尝试在表单的画布上绘制 GIF 这不起作用 图像不会前进 如何让它发挥作用 procedure TForm1 FormCreate Sender TObject begin GIF TGIFImage Create GIF Loa
  • 如何读取注册表项的默认值

    我有一个 Delphi XE2 项目来使用注册表项进行某些操作 所以我定义了以下代码 procedure TMainForm BitBtn01Click Sender TObject var RegistryEntry TRegistry
  • Delphi XE5 REST/Android 客户端“会话已过期”

    我有一个REST Server与Android Client 都在Deplhi Xe5 Android客户端成功连接Rest服务器 在我的服务器中我有一个TDSHttpWebDispatcher with SessionTimeout 12
  • 以 png 格式剪辑幻灯片 (Delphi 2010)

    I have a filmstrip of images in png format like this 我想知道如何剪辑每个图像并将这些图像放入 TImageList 控件中 并始终保留透明度 EDIT 是的 在设计时 RRUZ 提到的技
  • 在 Delphi 2009 上安装最新版本的 Indy 10 [重复]

    这个问题在这里已经有答案了 是否有更新 Delphi 2009 中的 Indy 10 组件的分步指南 我读过正在卸载线程 https stackoverflow com questions 486210 what is the proper
  • 当 Delphi 处于覆盖模式时,如何更改它的光标形状?

    当使用 Delphi 的任何版本时 我有时会碰巧按下插入键并打开覆盖模式 这通常是一个很大的麻烦 并且您进入覆盖模式的唯一指示是编辑器底部的小文本 当使用其他程序 首先想到的是 Notepad 时 当您处于插入模式时 文本光标是 当您处于覆
  • Delphi 5 的哈希表实现 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您知道 Delphi 5 的良好且免费的哈希表实现吗 我需要在哈希表中组织大量数据 并且我有点担心在网
  • 如何释放 TInterfacedObject 中的 TObject 成员

    我知道接口对象是引用计数的 因此不需要手动释放它 但如果它有一个 TObject 继承成员 我是否应该在析构函数中手动释放该成员 考虑以下代码 program Project2 APPTYPE CONSOLE R res uses Syst
  • 如何使用 Gmail 的 SMTP 和 Indy 10 发送电子邮件?

    我正在使用 Delphi 2009 和 svn 中最新的 Indy 10 通过 SMTP 发送电子邮件 但它不适用于 Gmail Google Apps 托管域 当我尝试发送电子邮件时 我收到 必须首先发出 STARTTLS 命令 我尝试用
  • 从 Delphi VCL 样式获取特定字形

    我想从 VCL 样式获取特定的位图 并将其设置为按钮上的图像 它实际上是帮助问号 在位图样式编辑器中是来自表单的 btnHelp 图像 要从 VCL 样式获取视觉元素 字形 您必须使用GetElementDetails和TCustomSty
  • logback的“谨慎模式”是如何实现的?

    The 审慎模式 http logback qos ch manual appenders html prudentlogback 中的序列化所有 JVM 之间的 IO 操作 写入同一文件 可能运行在不同的主机上 在其他日志记录框架中 如果
  • 如何在Delphi中将对象方法作为参数传递,然后调用它?

    我担心这可能是一个有点愚蠢的问题 但这让我很难过 我正在寻找将对象的方法传递到过程中的最简单的方法 以便过程可以调用对象的方法 例如 超时后 或者可能在不同的线程中 所以基本上我想 捕获对对象方法的引用 将该引用传递给过程 使用该引用 从过
  • 阻止 IDE 自动添加使用单位

    我正在将 Lazarus 项目转移到德尔福西雅图 Lazarus 项目依赖于 40 多个单元 包括控件 并具有多种应用程序 在所有项目的使用条款中 他们使用了以下内容 uses Classes SysUtils Forms Controls
  • 使用 JAD 反编译 java - 限制

    我正在尝试使用 Java 中的 JAD 反编译几个 jar 文件 我也尝试过 JD GUI 但运气更差 但出现了很多错误 一种类型 易于修复 似乎是内部类 但我也发现了这段代码 static int SWITCH TABLE atp com

随机推荐

  • 如何通过单击通知来关闭我的应用程序的任何活动?

    当我单击通知时 应用以下操作 intent setFlags Intent FLAG ACTIVITY NEW TASK Intent FLAG ACTIVITY CLEAR TOP startActivity intent 在应用程序的所
  • 使用 bash 读取两个文件的嵌套循环[重复]

    这个问题在这里已经有答案了 我目前正在尝试使用以下代码来合并两个输入文件 for i in cat file1 do for j in cat file2 do printf s s n i j done done 给定文件创建如下 pri
  • 将“mut”放在变量名之前和“:”之后有什么区别?

    以下是我在 Rust 文档中看到的两个函数签名 fn modify foo mut foo Box
  • Google Cloud Vertex AI - 模型不支持 400“dedicated_resources”

    我正在尝试使用 Python SDK 在 Google Cloud Platform 上部署通过 Vertex AI 训练的文本分类模型 from google cloud import aiplatform import os os en
  • Postgres:在 int 数组中查找最大值?

    使用 Postgres 9 3 有人可以解释一下为什么我不能直接在未嵌套的数组上使用 max 函数吗 据我了解 unnest 函数返回一个 setof 就像 select 语句一样 那么为什么这个查询的简短版本不起作用呢 我在概念上遗漏了一
  • 哪里是保存用户上传的图像的最佳位置

    我有一个显示画廊的网站 用户可以从网络上传自己的内容 通过输入 URL 或从计算机上传图片 我将 URL 存储在数据库中 这对于第一个用例来说效果很好 但如果用户从计算机上传 我需要弄清楚在哪里存储实际图像 这里有什么建议或关于我应该存储这
  • 如何在 Java 中初始化字节数组?

    我必须在 java 中以字节数组形式存储一些常量值 UUID 我想知道初始化这些静态数组的最佳方法是什么 这就是我目前正在做的 但我觉得一定有更好的方法 private static final byte CDRIVES new byte
  • 将 java.sql.Timestamp 转换为即时时间

    从我的数据库中我检索值如下 20 DEC 17 10 15 53 000000000 AM 我想要上面的java sql Timestamp转换为即时时间 2017 12 20T10 15 53Z 我尝试使用当前时间戳 Timestamp
  • rasa_nlu如何使用lookup_tables进行实体提取?

    我正在尝试使用 rasa nlu 和 rasa core 开发一个聊天机器人 但我没有得到 rasa nlu 如何使用 Lookup tables 进行实体提取的链接 我已经经历过 http blog rasa com improving
  • 使用 WMI 枚举音频输入设备

    我在我的 C 项目中使用 NAudio 我正在寻找一种枚举音频输入设备 麦克风等 的方法 这样我就可以获得它们的全名 不仅仅是我可以从 NAudio 获得的 31 个字符的长名称 我浏览了一些帖子 其中人们使用 WMI 枚举音频输出设备 M
  • 为什么这有效?删除多个 from 无子查询

    我不确定这是否是 SQL Server 2012 中的错误 我有一个简单的查询 DELETE FROM TABLE1 FROM TABLE2 WHERE TABLE1 COL1 1 在SSMS中 这段代码解析没有错误 并从Table1没有错
  • 如何在 WPF 中操作另一个类的窗口对象

    我是 WPF 和 C 新手 我了解很多 VB NET 并且习惯了调用文本框等表单对象的方式 我从另一个表单调用它 现在 我正在使用WPF 我很困惑 因为我有一个主窗口 我想从类将项目添加到主窗口中的列表框 在VB Net中 就是这样 IN
  • 当不在 python 中的正确包中时,不会捕获异常

    编辑 好的 我成功地隔离了该错误以及重现该错误的准确 完整的代码 但它要么是设计使然 要么是 python 中的错误 创建两个兄弟包 admin General 每个都有自己的 init py 当然 包装内admin将以下代码放入文件 te
  • 轻松使用 ASP.NET Identity 作为角色提供者

    我刚刚花了两天时间研究并使用现有数据库实现新的 ASP NET Identity 系统 更多信息请参见这里 将 ASP NET Identity 集成到现有的 DbContext 中 现在 我有一份工作UserStore and RoleS
  • 从 Kafka 消费失败迭代器处于失败状态

    我在使用来自 kafka 的消息时遇到异常 org springframework messaging MessagingException Consuming from Kafka failed nested exception is j
  • 每日查询计数,并具有多周的日期限制

    我正在尝试每天查找 个活跃用户 用户在创建后即处于活动状态多于每周 10 个请求 共 4 个连续几周 IE 2014 年 10 月 31 日 如果用户在以下时间段内每周发出的请求总数超过 10 个 则该用户处于活动状态 2014年10月24
  • 如何同步 JMeter 线程组

    我用 JMeter 填充数据库 有 2 个线程组并行填充 2 个表 填充这两个表后 我需要启动最后一个线程组来填充第三个表 我该怎么做 是否可以同步 JMeter 线程组 您可以为第三个线程组创建一个 while 控制器 并执行如下操作 线
  • 通常大数会变成负数

    自从我开始使用 eclipse 进行 euler 项目以来 我注意到大数字有时会变成看似随机的负数 我想这与传递类型的边界有关 如果您能向我解释这些负数是如何生成的以及其背后的逻辑是什么 我将很高兴 另外 我怎样才能避免它们 最好不要使用
  • 是否可以像 dcast 一样在 tidyr 中的多列上使用扩展? [复制]

    这个问题在这里已经有答案了 我有以下虚拟数据 library dplyr library tidyr library reshape2 dt lt expand grid Year 1990 2014 Product LETTERS 1 8
  • Delphi反编译[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 与使用其他编程语言 编译器构建的其他可执行文件相比 为什么反编译 delphi exe 如此容易 有一些东西可以帮助逆向delphi程序 您可以获得完整的表单数据 包括事件处理程