CRACKME 3:来源于《逆向工程核心原理 第八章》

本文分享了作者在逆向vba程序中的经验,重点介绍了逆向过程中的函数分析和栈帧理解。通过分析函数作用和栈帧分布,揭示了程序如何通过特定步骤计算加密秘钥,并提供了未来学习的方向,包括掌握OD的条件断点和PE结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:算是第一次正规的逆向了吧,该程序用vba语言编写,逆向其算法。怎么说呢,这个程序逆向了大概三天,这三天考了三门期末,本来对期末真没有以前那种热情,该水水就水水,考完回来继续分析这个程序,在这上面的时间三天至少花了20个小时,从一开始一脸蒙蔽一窍不通到基本逆向出其算法和vba函数的作用,可以说是值得的,下面就总结一下自己的收获:

一、逆向前的准备工作:

  1. 了解其是什么语言编写,然后去查该语言的逆向心得。比如,我这次是逆向 vba程序,其显著特点是一个变量占12个字节,前2个字节特征,后面4个字节才是真正的值。我刚开始晚上完全不懂,真的很蒙蔽,怎么弄怎么不对。第二天早上才有灵感一查才知道,还发现了前两个字节的特征,比如,是整数,则为0002,这是一定要吸取的教训。

二、逆向过程中的心得:

  1. 逆向的核心是搞懂函数作用+栈帧的分布:着重强调栈帧,这个可以说四个小时前我还一脸蒙蔽,睡觉前忽然才想起这个,真是,基础不牢,地动山摇啊。所有的局部变量都存储在栈帧中。我们之前着重分析函数,太多函数,各种寄存器绕的头晕,其实,寄存器只是一个中转站,最终还是存储在栈帧中,所以,我们弄清每一个栈帧具体表示的变量,之后看汇编代码会轻松很多。就算一个栈帧可能有多个情况,我们只需要在代码调用前查看其是哪种情况就好
  2. 函数分析
    1. 若OD中给出函数名,则先百度该函数名了解其作用。
    2. 获取参数,看函数调用前的栈帧。
    3. 少数函数通过寄存器传入参数,比如 __vbavarForInit 中 n 值通过 ebx 传入,而 __vbavarMove则是 edx->ecx,这些都是你应该要注意的。
    4. 了解传入的是地址还是指针,往往前面有 lea,则是指针,确切的办法是一个个参数浏览一遍。
    5. 调试函数时,多注意对比内存地址变化,有些传入的指针就是函数结构的存储地址,观察。
  3. 未来学习方向
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值