逆向工程核心原理4-分析crackme

打开程序crackme

逆向工程核心原理4-分析crackme_第1张图片

  • 这个程序是使用VB编写,目标是知晓其中密码计算的算法
  • 当密码输入错误时会弹出一下对话框
  • 逆向工程核心原理4-分析crackme_第2张图片

附加到OD

逆向工程核心原理4-分析crackme_第3张图片

  • 在这里介绍一下Visual Basic 文件的特征

    • VB 专用引擎

      • VB 文件使用名为MSVBVM60.dll 的VB专用引擎,VB代码中使用MsgBox()函数来显示消息框,而实际上,VB编译器真正调用的时MSVBVM60.dll 内的rtcMsgBox()函数,而该函数内部通过调用user32.dll内的MessageBoxW()函数(WIN 32 API)来工作
    • 本地代码与伪代码

      • VB文件可以编译成本地代码和伪代码。本地代码一般使用易于调试器解析的IA-32指令;伪代码时一种解释器语言,它是由VB引擎实现虚拟机并且可以自解析的指令(字节码)。

        伪代码具有于JVM(java虚拟机)和Python专用引擎类似的心态结构,具有方便移植的优点

开始调试

逆向工程核心原理4-分析crackme_第4张图片

  • EP 地址为0x401238

  • 通过观察

    00401232   $- FF25 A0104000 JMP DWORD PTR DS:[<&MSVBVM60.#100>]      ;  MSVBVM60.ThunRTMain
    00401238 > $  68 141E4000   PUSH 00401E14                            ;  EP  压入ThunRTMain()函数所需参数 RT_MainStruct 结构体
    0040123D   .  E8 F0FFFFFF   CALL                 ;  通过CALL 401232 去间接调用ThunRTMain()
    
  • 00401238处,压入地址00401E14,而此处为ThunRTMain()函数所需参数 RT_MainStruct 结构体

  • 0040123D处,通过调用跳转到00401232间接调用MSVBVM60.ThunRTMain()(间接调用)

  • 进入ThunRTMain()

    逆向工程核心原理4-分析crackme_第5张图片

开始分析crackMe

  • 查找需要“打补丁的位置”

    • 搜索字符串

      逆向工程核心原理4-分析crackme_第6张图片

      发现了之前提示错误对话框的字符串,点击定位到该地址

  • 定位过去之后,会看到以下代码

    逆向工程核心原理4-分析crackme_第7张图片

  • 从此处向上查找,找到CALL 的头,即check 触发事件

  • 定位到:00402ED0 > \55 PUSH EBP ; Check 按键的事件

    并且在此处下断(F2)

    逆向工程核心原理4-分析crackme_第8张图片

  • 开始调试,输入Name和Serial(注意,这里不要输入一样的,最好容易分辨)

    我这里输入的Name:1238 Serial:4321

  • 按F8进行单步步过,并且查看寄存器内值的变化

    此处过程省略

  • 最后在00403197 处发现存在应该循环,并且循环次数由Name 输入的字符串长度确定

    逆向工程核心原理4-分析crackme_第9张图片

    则该处较大可能是加密算法

  • 继续调试,最后得出1234所对应的正确密码为95969798

  • 而在00403233 处存在该指令

    00403233   .  C785 2CFFFFFF>MOV DWORD PTR SS:[EBP-D4], 64            ; |密钥  UNICODE + 64
    

    得出,密钥是0x64

总结:Name 所对应的密码为每一个字母的UNICODE 码值+0x64

  • UNICODE 对应表

你可能感兴趣的:(逆向安全)