selph
selph
发布于 2022-08-11 / 233 阅读
0
0

新160个CrackMe练习:038-Eternal Bliss.3

算法难度:⭐⭐

爆破难度:⭐

信息收集

运行情况:

啊这,看来又是VB

image

查壳与脱壳:

无壳:

image

调试分析

又是VB,真的太顶了,逆VB好恶心啊

首先VBDecompiler找到这个注册按钮事件的函数起始地址,然后x86dbg下断点开始分析(这个伪代码太恶心了,还是看反汇编吧)

image

首先输入1234567进行调试,VB的反汇编很恶心就是,很长一段代码,只有几句是跟代码逻辑相关的内容,大部分都是干扰

刚开始保存了一系列字符到栈里:

image

(大部分代码没啥用,主要看自动注释的内容,还有函数call,是否是处理我们输入的内容,如果是,大概率就是我们要看的地方,否则先跳过吧)

然后接下来计算了一下字符串长度,保存了起来,大概率是循环遍历字符要用到

image

再往下就是循环了,一个jmp跳转下去,然后又跳转上来,直接看循环的关键内容吧:

超级长的循环代码,实际有用的就这几行,取一个字节,然后转换成ascii码的值,然后累加起来,累加值保存在[ebp-40]

image

接下来跳出循环,然后就用上了函数开头保存的一堆字符:

这里就是第一处校验跳转了,这里累加Reverse每个字符的ascii的值,和输入的累加值做对比,如果相同则不跳转

image

再往下就是第二次校验对比了,首先是获取第2,4,7个字符

image

然后对这三个字符进行一系列计算:保存到了[ebp-150]里

image

再往下就是对比了:判断刚刚计算的那个值是否为0,如果为0则表示失败

image

到这里已经分析的差不多了:

  • 开始遍历字符累加,确保注册码是Reverse这7个字母的组合
  • 后来取其中第2,4,7个字符拿来计算,确保这个字母组合的这几个位置的字母是固定的,这三个位置都是e

满足这两个条件即为正确的码,测试:veResre:

image

总结

逆Vb的时候不用一条一条看,很简单的几句话,可能会被VB填充成超级大一段


评论