前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

Delphi反编译 - kingisw的专栏 - 博客频道 - CSDN.NET kingisw的专栏 目录视图 摘要视图 订阅 “程序人生”中国软件开发者职业生涯调查 专访小恩爱CTO钟超:让数据决定创意功能的去留 电子版《程序员》杂志免费领 Delphi反编译 分类: delphi 2010-09-19 14:04 1669人阅读 评论(1) 收藏 举报 delphi编译器反编译工具汇编语言borland Delphi反编译 2008-04-12 03:38 转自http://blog.csdn.net/eagletian/ 不知道是不是博主翻译的。感觉好像后面还有很多东西。 反编译Delphi 第一节 关于反向工程(About Reverse Engineering) 反编译?反向?解密?(Decompilation? Reverse? Cracking?) 简 单的说,反编译是编译过程的反转:把一个可执行文件翻译为更高级语言。假如你丢失了你的Delphi工程的源程序而只有可执行文件:如果源程序已不可得则 反向工程(反编译)是有用的。 耶,&ldquo;源程序不可得&rdquo;,这是否意味着我们可以反编译别的程序员开发的Delphi工程呢?嗯,对也不对...... 真正的反编译可能吗?(Is true decompilation possible?) 不, 当然不行。完全自动的反编译是不可能的&mdash;没有一个反编译器可以正确的重生出原始代码。 当Delphi工程被编译和连接从而产生一个独立的可执行文件,程序中使用的大部分的名称都被转换为地址。名称的丢失意味着反编译器必须为所有的常量、变 量、函数和过程创建唯一的名称。即使在某种程度上反编译是成功的,产生的&ldquo;源代码&rdquo;仍缺少了原始含义的变量和函数名。 显而易见,原始编程语言的语法在可执行文件中已不存在。所以,让反编译器对可执行文件的连续的机器语言指令进行翻译并判断出原始语言指令是非常困难的。 为什么要使用并且什么时候使用呢(Why and when to use.) 反向工程因为以下几个原因而使用: &middot; 丢失源码的恢复; &middot; 把应用程序移入新的硬件平台; &middot; 判断程序中是否存在病毒或恶意代码; &middot; 当程序拥有者不能更正错误时的程序错误的更正; &middot; 其它开发人员的程序源代码的恢复(如:测定一个算法) 这合法吗?(Is this legal?) 反向工程不是解密,尽管很难在两者之间划一个明晰的界限。计算机程序被版权和商标法保护。不同的国家对版权拥有者的权利有着不同的解释。最共同的解释是,下列情况下的反编译是可以的: 为了更好的解释的目的,而接口说明已不可得;为了错位更正的目的,而版权拥有者不能进行更正;为了判断程序的部分内容是否被保护。当然,如果你不能肯定是否被允许反汇编某些程序的可执行文件时,你应该很小心或者联系你的律师。 第二节 Delphi反向工程 目前 ,Borland没有提供任何产品用于反编译可执行(.exe)文件或&ldquo;Delphi 编译文件&rdquo;(.dcu)为原始的程序代码(.pas)。 Delphi 编译单元:DCU(Delphi compiled unit: DCU) 当一个Delphi工程被编译或运行时,一个编译单元(.dcu)文件便产生了。默认情况下,每个单元的编译版本都存放在独立的二进制文件中,该文件的文 件名与单元文件同名,同时它的扩展名为.DCU。例如:unit1.dcu文件包含有在unit1.pas文件中声明的代码和数据。 这意味着如果你有某些资源,如编译过的组件,你所必须做的是反编译它并获得源代码。错了,DCU文件格式是非文档的(所有者格式)并且它可以随版本的改变 而改变。 编译器之后:Delphi反向工程(After the compiler: Delphi Reverse Engineering) 如果你试图反编译一个Delphi可执行文件,有几件事你应该知道: Delphi 源程序文件通常以两种文件类型存储:ASCII代码文件(.pas、.dpr)和资源文件(.res、.rc、.dfm、.dcr)。Dfm文件包含表单 中所容纳的对象的详细资料(属性)。当创建一个可执行文件时,Delphi拷贝.dfm文件中的信息到已完成的.exe代码文件。表单文件描述了表单中的 每个组件,包括所有稳定的属性值。每当我们改变表单的位置、按钮的标题或为组件指派一个事件过程时,Delphi就会在DFM文件中记下这些改变(不是事 件过程的代码&mdash;它是存放在pas/dcu文件中)。为了从可执行文件中得到'dfm',我们需要理解什么类型的资源被存放在Win32可执行文件中。 所有被Delphi编译过的程序都有以下几个部分:CODE、DATA、BSS、.idata、tls、.rdata、. rsrc。从反编译的角度来看,最重要的部分是:CODE、.rsrc。在&ldquo;Adding functionality to a Delphi program"(&ldquo;在Delphi程序中增加功能&rdquo;)(译者加:陆续译出)文章中讨论了关于Delphi可执行格式、类信息和DFM资源的一些有趣的内 容:怎样分配事件给同一个表单中定义的其他事件句柄(handler)处理、怎样增加你自己的事件句柄(handler)从而在可执行文件中增加代码改变 按钮的标题。 存放在.exe文件中的各种类型的资源里,RT_RCDATA或Application-defined(程序定义)资源 (原始数据)拥有编译前DFM文件所包含的信息。为了从.exe文件中选出DFM数据,我们可以调用EnumResourceNames API函数...关于从.exe文件中选出DFM数据的更多的信息,可以参考:&ldquo;Coding a Delphi DFM explorer&rdquo;(&ldquo;编写一个Delphi DFM探测器&rdquo;)。 第三节 Delphi 反编译工具 反 向工程一直被认为是技术奇才的专有艺术,需要熟悉汇编语言和调试器。下面几个Delphi反编译器允许任何人反编译大多数Delphi可执行文件,即使只 有有限的技术知识。 如果你对Delphi程序反向工程感兴趣,我建议你看一看以下几个&ldquo;反编译器&rdquo;: DeDe DeDe是一个非常快的程序,用于分析Delphi编译的可执行文件。反编译之后,DeDe会提供以下信息: &middot; 所有的目标dfm文件。你可以用Delphi打开并编辑它们; &middot; 带有良好的注释的ASM代码的所有发布的方法,它涉及字符串、输入函数调用、类方法调用、单元的组件、Try-Except和Try-Finally块。 默认情况下,DeDe仅仅只获得已发布方法的源代码,但如果你通过使用Tools | Disassemble Proc菜单知道RVA偏移量的话,你也可以处理可执行文件中的其他过程。 &middot; 大量的附加信息。 &middot; 你可以创建一个带有所有的dfm、pas、dpr文件的Delphi工程的文件夹。注:pas文件包含上面提及的被良好注释过的ASM代码。他们不能被再编译! Revendepro Revendepro 可以找到程序中几乎所有的结构(类、类型、过程等),并生成pascal表达式、过程则以汇编程序的形式写出来。由于汇编程序的某些限制,生成的结果不能 被在编译。这个反编译器的源代码可以免费获得。不幸的是,这是唯一一个我不能使用的反编译器&mdash;当试图用它反编译某些Delphi可执行文件时,总提示异 常。 MRIP 这个对用途文件分割器可以从其它文件中寻找和摘取文件。MRIP分割100多种文件 格式。对我们而言,最重要的是MRipper可以反编译任何Delphi可执行文件。该工具可以从Delphi应用程序中摘取所有的资源:cursors (光标)、icons(图标)、dfm文件、pas文件和其他资源。pas文件不包含事件过程执行。MRIP是一个DOS工具。 DfmExplorer 以下是DfmExplorer的说明(包括原始资料): &middot; 通过调用Win32 API的&ldquo;LoadLibrary&rdquo;或&ldquo;LoadLibraryEx&rdquo;函数在内存中载入可执行模块(EXE/DLL/BPL/DPL)。 &middot; 通过Win32 API的&ldquo;EnumResourceName&rdquo;函数找寻RCDATA资源。 &middot; 载入每个发现的DFM块,解码它并以表的形式(包括它们的名称)存储在内存中。 &middot; 在程序的主窗口我们可以以文本方式可视化所有载入可执行文件的所有的DFM。 &middot; 最后,程序可以保存到DFM选择的磁盘,作为ASCII文件(.RC)或作为二进制块(DAT)连接到可执行文件中。 Exe2Dpr 如 果你试图放松你的工程源代码,这个Delphi工程源代码救助器可以挽救丢失的源码部分。救助器生成所有的带已分配属性和事件的工程表单和数据模块。生成 的事件过程没有主程序(它不是反编译器),但又在可执行文件中的代码地址。这个工具没有GUI&mdash;它使用命令行的形式:'exe2dpr [-o] exeFile'。工程源代码在当前目录创建。如果你想覆盖当前目录的任何已存在的文件,就可以使用选项 '-o' 更多 上一篇:管理 下一篇:一IT项目经理的总结 相关主题推荐 delphi 反编译工具 应用程序 编程语言 开发人员 相关博文推荐 将拥有外网IP的计算机设置为远程工作站 回文数判断 求s=a+aa+aaa+aaaa+aa.... Java集合框架(下) 完全跨域的单点登录实现方案基本和上篇文章... android笔记 - 网络状态判断 <Ipv6 Deployment and... C语言文件内容的一般规则 查看评论 * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场 核心技术类目 全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech Perl Tornado Ruby Hibernate ThinkPHP Spark HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap 个人资料 kingisw 访问:9771次 积分:235分 排名:千里之外 原创:11篇 转载:15篇 译文:0篇 评论:1条 文章搜索 文章分类 .Net(1) c +(1) delphi(1) java(1) 软件工程(1) 文章存档 2013年09月(1)2013年03月(1)2011年12月(1)2011年05月(2)2011年03月(1)2011年01月(3)2010年11月(1)2010年10月(1)2010年09月(1)2010年08月(1)2010年04月(1)2009年10月(11)2007年06月(1) 阅读排行 一IT项目经理的总结(1842) Delphi反编译(1669) dos.bat 批处理文件的应用——批量压缩(1179) 读硬盘序列号(723) 批处理中Dos符号作用大全(304) web.config access数据库相对路径设置方法 for asp.net2.0(287) dos批处理(232) 要多关注新技术(145) 远程调用技术代码追踪(webservice)(124) 获取网卡MAC、硬盘序列号、CPU ID、BIOS编号(104) 评论排行 Delphi反编译(1) 要多关注新技术(0) 一IT项目经理的总结(0) Delphi的TWebBrowser编程参考(0) web.config access数据库相对路径设置方法 for asp.net2.0(0) 批处理中Dos符号作用大全(0) dos.bat 批处理文件的应用——批量压缩(0) 关于正则表达式(0) 学习mvc---------------进行中(0) 测试(0) 推荐文章 最新评论 Delphi反编译 yanggh168: 分析得很透彻