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

打开程序crackme

在这里插入图片描述

  • 这个程序是使用VB编写,目标是知晓其中密码计算的算法
  • 当密码输入错误时会弹出一下对话框
  • 在这里插入图片描述

附加到OD

在这里插入图片描述

  • 在这里介绍一下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专用引擎类似的心态结构,具有方便移植的优点

开始调试

在这里插入图片描述

  • 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 <JMP.&MSVBVM60.#100>                ;  通过CALL 401232 去间接调用ThunRTMain()
    
  • 00401238处,压入地址00401E14,而此处为ThunRTMain()函数所需参数 RT_MainStruct 结构体

  • 0040123D处,通过调用<JMP.&MSVBVM60.#100>跳转到00401232间接调用MSVBVM60.ThunRTMain()(间接调用)

  • 进入ThunRTMain()

    img

开始分析crackMe

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

    • 搜索字符串

      img

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

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

    img

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

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

    并且在此处下断(F2)

    img

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

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

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

    此处过程省略

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

    img

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

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

  • 而在00403233 处存在该指令

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

    得出,密钥是0x64

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值