逆向学习:crack me之Acid burn.exe

首先使用dumpbin.exe 查看该程序是64位还是32位。

这里确定程序是32位程序,然后使用x32dbg打开该程序。

首先尝试逆向serial:

先什么都不输入,点击验证看看会出现什么:

在这里看到点击验证出现了一个模态提示弹窗。我们知道当出现模态弹窗时,程序代码应该卡在模态弹窗那句直到返回。此时使用xdbg32让程序暂停:

此时程序暂停后,查看调用堆栈以确定程序卡在哪句用户代码:

我们可以看到调用来了messagebox 出现弹窗,那么接下来就是查看 在哪里调用的Messagebox,以及提示的内容。

根据MessageBox的参数含义,我们知道显示的文本,是来自于 edi,esi 参数,在往上看edi,esi 参数的值来自于 ecx,edx, 而当前函数的ecx,edx的值来自于上层调用。

所以我们需要再转到上层调用处分析。

依据上图代码的分析,此时jne acid burn.42F4F1 是关键跳转,然后看到在跳转之前调用了一个函数,然后再跳转。那么猜测这个是比较输入内容的函数。于是乎,更进该函数查看下实现,在 进入0x004039fc函数后,右键选择流程图,如下展示:

对上图的代码分析,其实就是字符串比较是否相等,关键提示点是 最开始的[esi-4]、[edi-4]表示的是长度。

所以,以上代码应该是 先调用0x004039fc函数比较两个字符串是否相等。相等则不跳转到弹出失败的地方。所以 此时在调用0x004039f函数处下一个断点,再尝试一次,应该就能获得答案了。

当断点断下来时,查看答案为:Hello Dude!。 接下来输入验证下:

至此,这个serial算是获得了。

总结

整个过程可分为3步:

  1. 尝试验证serial,出现弹窗时,选择暂停程序
  2. 观察调用堆栈,以定位调用处
  3. 分析调用处相关逻辑,以获得serial.
相关推荐
旖-旎10 分钟前
递归(汉诺塔问题)(1)
c++·学习·算法·leetcode·深度优先·递归
SUNNY_SHUN26 分钟前
清华团队提出TFA-Net,用模板特征聚合破解工业异常检测中的“捷径学习“难题
人工智能·学习·视觉检测·github
SuperHeroWu728 分钟前
【鸿蒙基础入门】概念理解和学习方法论说明
前端·学习·华为·开源·harmonyos·鸿蒙·移动端
speop43 分钟前
TASK05 | Reasoning Kindom拟合的陷阱 —— 统计相关性不是推理
学习
深念Y1 小时前
感知机 ≈ 可学习的逻辑门?聊聊激活函数与二元分类的本质
人工智能·学习·分类·感知机·激活函数·逻辑门·二元分类
程序员大雄学编程1 小时前
学习资源总汇
学习
健康人猿2 小时前
Grok 4.3 Beta | xAI用300美刀告诉你,AI终于可以交作业了
学习·ai·grok·马斯克·xai·supergrok
路溪非溪3 小时前
嵌入式wifi专家成长学习路线
学习
mxwin3 小时前
Unity Shader中如何学习阴影技术 产生阴影,接受阴影,联级阴影,软阴影
学习·unity·游戏引擎·shader
鱼很腾apoc3 小时前
【学习篇】第17期 C++入门必看——类和对象全站最详篇
c语言·开发语言·学习·算法·青少年编程