逆向工程之逆向分析实战(一):破解 “crack me” 程序

目录

逆向工程之逆向分析实战(一):破解 “crack me” 程序

一、实战内容介绍

(一)目标

(二)原理

二、逆向分析步骤

(一)准备工作

(二)初步运行程序

(三)使用 study pe 分析程序信息

(四)使用 IDA32 进行反汇编分析

(五)分析程序分支与关键代码

(六)确定破解方法

(七)动态分析验证(使用 IDA 的动态分析功能)


在逆向工程的实践中,通过实际案例来分析和破解程序是提升技能的关键。本次实战我们将以 “crack me” 程序为例,深入了解逆向分析的步骤和方法。

一、实战内容介绍

(一)目标

本次逆向分析实战的目标是破解 “crack me” 程序。这个程序运行时会提示过期(Out of date),需要购买凭证,我们要找出绕过这个限制并使程序正常运行的方法。

(二)原理

逆向分析是从可执行程序出发,通过各种工具和技术,分析程序的结构、逻辑和算法,以达到理解程序功能和可能的修改途径的目的。在这个过程中,我们利用程序的一些特性,如文件的 MD5 值来确保分析的是同一个程序版本,通过分析程序在运行过程中的报错信息、分支跳转等行为,结合反汇编工具查看程序的汇编代码,逐步弄清楚程序的验证机制,从而找到破解的方法。

二、逆向分析步骤

(一)准备工作

  1. 获取程序和工具
    • 我们已经获取了 “crack me” 程序(.exe 文件),其 MD5 值用于确认版本一致性,因为程序名称可重命名,但 MD5 值固定。
    • 同时,老师已经将本次分析所需的工具发给大家,我们要将程序和工具都放在虚拟机中进行操作,这样可以防止因程序可能存在的恶意代码或病毒而对主机造成损害。

(二)初步运行程序

在虚拟机中直接运行 “crack me” 程序,会发现它提示 “Out of date”,要求购买凭证,这是我们破解的起点。这一步不需要使用额外的命令。

(三)使用 study pe 分析程序信息

  1. 工具介绍与命令
    使用 study pe 软件来查看程序信息。通过 “File” -> “Open”(不同软件可能操作不同,这里假设类似)打开 “crack me.exe” 程序。
  2. 分析结果
    • 发现程序是 32 位的,并且没有加壳。这两个信息对于后续的分析很重要,没有加壳意味着我们可以更直接地对程序进行反汇编分析。

(四)使用 IDA32 进行反汇编分析

  1. 工具介绍与命令
    启动 IDA32,通过 “File” -> “Open” 打开 “crack me.exe” 程序。IDA32 会自动对程序进行分析,完成后显示反汇编后的代码。
  2. 整体把握程序结构
    • IDA32 将程序入口点自动命名为 start,点击 start 进入程序执行的起点。我们要先从总体上把握程序结构,不要一开始就陷入具体语句的分析。观察程序的分支情况,发现程序有多个分支,不同的分支会导致不同的结果,如提示错误信息或执行成功。
    • 例如,直接运行程序显示 “Out of date” 相关信息,这表明在程序开始阶段的某个分支判断中出现了这种情况,我们需要分析这个跳转附近的代码,了解其跳转条件。

(五)分析程序分支与关键代码

  1. 分析第一次跳转相关代码
    • 在代码中发现涉及 “KEFILE” 相关的操作。看到有 “push offset File name”,其中 “file name” 被识别为字符串 “k file.date”,然后调用 “create file” 函数,接着将结果与某个值比较,如果满足条件则跳转。这意味着程序在检查是否存在 “k file.date” 文件。
    • 我们在 “crack me” 程序所在目录新建一个名为 “k file.date” 的文本文件,再次运行程序,发现出现新的错误 “key file is not valid sorry”,这表明程序通过了文件存在的检查,但对文件内容有进一步要求。
  2. 深入分析后续分支与条件判断
    • 继续观察代码,发现后续还有多个分支和条件判断。比如有读取 “k file.date” 文件内容的操作,涉及到读取字节数的比较,如读取 15 个字节(通过 “push 40646H” 等操作判断,这里 40646H 与字符‘F’相关,结合读取操作可知要读取一定数量的字节),以及读取字符个数与十六进制 “10H”(十进制为 16)的比较。如果读取字节数不足或字符个数小于 16,则会跳转到错误提示分支。
    • 还有比较某个值(如 ESI 的值)与 8 的大小,如果小于 8 则跳转到错误分支,如果大于等于 8 则可能跳转到成功分支。这一系列条件判断表明程序对 “k file.date” 文件内容有严格要求。

(六)确定破解方法

通过对代码的分析,我们发现可以通过在 “k file.date” 文件中输入特定内容来绕过验证。具体来说,要输入足够多的字符(大于等于 16 个),并且其中‘G’的数量要大于等于 8。这样,程序在执行过程中就能通过各个条件判断,最终执行成功。

(七)动态分析验证(使用 IDA 的动态分析功能)

  1. 设置断点与调试准备
    • 虽然 IDA 主要是静态分析工具,但它也具备强大的动态分析能力。我们可以在程序中设置断点来观察程序在运行过程中的状态。例如,当我们修改 “k file.date” 文件内容或者没有该文件时,可以在关键代码处设置断点,如在判断文件是否存在的代码处(“create file” 相关代码附近),使用 IDA 的 “Add breakpoint” 功能。
    • 对于这个 Windows 程序,选择 “local windows debug” 作为分析器,然后点击执行(“Yes”),程序会运行到断点处。
  2. 单步执行与观察状态
    • 在断点处,可以使用快捷键 F7(步进进入此函数)或 F8(不进入此函数)进行单步执行。在执行过程中,可以查看寄存器的值、栈的状态等信息。例如,可以看到 ESI 等寄存器的值在程序运行过程中的变化,从而更好地理解程序对文件内容的验证过程。通过动态分析,进一步验证了我们之前通过静态分析得出的破解方法的正确性。

通过以上步骤,我们完成了对 “crack me” 程序的逆向分析和破解,这种实战过程对于理解逆向工程中的分析方法和技巧非常有帮助,希望大家可以通过类似的练习不断提升逆向分析能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值