• 主页
  • iOS
  • Flutter
  • Java
  • Markdown
所有文章 关于我

  • 主页
  • iOS
  • Flutter
  • Java
  • Markdown

软件逆向工程之Delphi

2017-08-09

最近以前的同事问我能不能破解一个桌面软件(当然是一个比较简单的小程序), 当时夸下开口说可以, 于是乎私下研究了下逆向工程.

什么是逆向工程?

  逆向工程(又称逆向技术),是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是在不能轻易获得必要的生产信息的情况下,直接从成品分析,推导出产品的设计原理.
  逆向工程在工业设计中很早就有应用. 举个栗子, 关注军事的同学都知道, 我国第一艘航空母舰——辽宁号航空母舰, 它的前身是上个世纪80年代中后期,于乌克兰建造时遭逢苏联解体建造工程中断,完成度68%的瓦良格号. 从购买到真正抵达大连期间总共历时3年多的时间花费了大量人力、物力和财力. 再比如中国的山寨之王——企鹅, 大家印象最深的应该就是市面上刚刚有个产品火了, 不到两个月腾讯肯定有相关的产品问世, 从QQ、拍拍、财付通、QQ校友、Q飞车、QQ炫舞、QQ电脑管家、CF、微信等等, 不过难得微信的小程序被支付宝山寨了一次.

合法性

  在2007年初,我国相关的法律为逆向工程正名,承认了逆向技术用于学习研究的合法性。根据有关法律,对于任何计算机方面的逆向工程,只要不用于商业用途都不违法。比如对商业软件的反编译,代码分析等

  我国虽然在计算机软件保护方面已制定了《计算机软件保护条例》、《计算机软件著作权登记条例》等法律法规,但都未涉及软件反向工程问题,这一点应尽早引起立法机关的重视,正是由于我国法律对有关软件反向工程的问题没有规定,因此诸如微软之类的公司在其软件产品的最终用户使用协议中都规定:“禁止对该软件产品进行反向工程,如果当地法律允许反向工程则除外。”

逆向工程需要什么?

  • 一些基础的语言如: C、C++(很多游戏、嵌入式使用)
  • 汇编语言
  • 一些逆向工程常见的软件(这很重要): 如静态反汇编IDA pro和动态调试器OllyDbg还有内核调试winDbg
  • 掌握外壳原理和技巧,熟悉常见的加解密算法、反调试技巧

Delphi的反编译

明确目标软件的编程语言和加壳情况

  PEiD是一款著名的查壳工具,其功能强大,现在有软件很多都加了壳,给破解汉化带来非常大的不便,PEiD几乎可以侦测出所有的壳,其数量已超过470 种PE文档 的加壳类型和签名,另外还可识别出EXE文件是用什么语言编写的,比如:VC++、Delphi、VB或Delphi等.
其他查壳工具还有: Fi、GetTyp和pe-scan等.


使用PEiD查壳

运气比较好, 如上图所示这个exe文件是没有壳的,而且是使用Delhpi编写的, 如果红圈里面是Not Found就是加过壳的, 如果后面有[Overlay]可能是加了伪装成对应语言的壳.

去壳

不同的壳有不同的去壳方式, 高手都是自己脱壳, 对于不会的人可以先尝试脱壳工具, 不一定能成功.

常见的脱壳工具

常见的壳
  • 压缩壳
    • ASPack
    • UPX
    • PeCompact
    • NsPack(国产北斗壳)
  • 加密壳
    • ASProtect加密壳
    • Armadillo加密壳
    • EXECryptor加密壳
    • Themida加密壳
    • VM Protect
    • Code Virtualizer
    • EncryptPE
    • PE-Armor

反编译和反汇编

反汇编得到的是汇编代码

反编译得到的是所用语言的源代码

反编译软件的选择

微软开发平台

对于微软开发平台开发出来的软件,我们通常使用.NET Reflector.

Borland Delphi

常用的软件有DeDe

Java

常用的有Java Decompiler.

开始破解

我使用的是由52破解提供的汉化版的ollydbg, 提取密码: acrq

将可执行文件拖入软件或者从文件菜单打开


ollydbg主目录

通过查找------所有参考文本字符串快速查找


快速查找

在汇编窗口查看, 双击该字符串行或者选择反汇编窗口中跟随


快速查找

反汇编窗口查看

修改汇编语言以及相关文字

  • 修改汇编语言, 双击汇编区域的一行

    修改汇编语言
  • 修改文字, 右键——数据窗口中跟随——选择

    修改文字1

    双击HEX数据中的数据位置, 即可更改文字, 需要注意的是: 保持大小需要勾选.

    修改文字2

保存修改保存到可执行文件

右键——复制到壳执行文件——全部复制——新窗口右键——保存


保存


全部复制


保存到文字即可
  • 逆向工程
  • Delphi
使自己的Github项目支持Cocoapods以及私有远程Repo仓库
网页静态化
  1. 1. 什么是逆向工程?
  2. 2. 合法性
  3. 3. 逆向工程需要什么?
  4. 4. Delphi的反编译
    1. 4.1. 明确目标软件的编程语言和加壳情况
      1. 4.1.1. 去壳
        1. 4.1.1.1. 常见的壳
    2. 4.2. 反编译和反汇编
    3. 4.3. 反编译软件的选择
      1. 4.3.1. 微软开发平台
      2. 4.3.2. Borland Delphi
      3. 4.3.3. Java
    4. 4.4. 开始破解
      1. 4.4.1. 将可执行文件拖入软件或者从文件菜单打开
      2. 4.4.2. 通过查找------所有参考文本字符串快速查找
      3. 4.4.3. 在汇编窗口查看, 双击该字符串行或者选择反汇编窗口中跟随
      4. 4.4.4. 修改汇编语言以及相关文字
      5. 4.4.5. 保存修改保存到可执行文件
© 2023 coppco
Hexo Theme Yilia by Litten
  • 所有文章
  • 关于我

tag:

  • Shadowsocks
  • VPS
  • 翻墙
  • First
  • 杂谈
  • 新尝试
  • Java
  • Flutter
  • Dart
  • Elicpse
  • IDE
  • Shell
  • Linux
  • Markdown
  • 资料整理
  • iOS
  • Android
  • CentOS
  • GitLab
  • git
  • 持续集成
  • Intellij IDEA
  • JavaScript跨域
  • Jsonp
  • Dubbo
  • 分布式服务架构
  • HTML
  • JavaScript
  • jQuery
  • BootStrap
  • CSS
  • JDBC
  • MySQL
  • 数据库
  • XML
  • Tomcat
  • HTTP
  • Servlet
  • Request
  • Response
  • JSP
  • Cookie
  • Session
  • 事务
  • JavaBean
  • AJAX
  • JSON
  • Listener
  • Filter
  • 注解
  • Servlet3.0
  • RPM
  • nginx
  • JDK
  • Oracle
  • Hibernate
  • Struts2
  • Spring
  • SSM
  • MyBatis
  • SSH
  • Spring MVC
  • MQ
  • Redis
  • 策略模式
  • 全文搜索技术
  • Lucene
  • Solr
  • mirror
  • 镜像站
  • ruby
  • npm
  • Freemaker
  • 坑点
  • Cocoapods
  • Objective-C
  • Xcode
  • Swift
  • SwiftUI
  • Spring Boot
  • WebSocket
  • GCD
  • Swift3.0
  • App瘦身
  • iOS和JavaScript交互
  • iOS应用跳转
  • math
  • AutoLayout
  • Masonry
  • SnapKit
  • 三方框架的使用
  • Gitlab
  • 编程思想
  • 逆向工程
  • Delphi

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

iOS、Objective-C、Swift、Java、Flutter