Crackme003-AfKayAs(OD版本)

Crackme003-AfKayAs(OD版本)

AfKayAs2程序界面

在这里插入图片描述

在这里插入图片描述

根据图片提示我们需要将首先弹出来的界面进行消除,然后再找出序列号

首先我们完成第一个要求

在这里插入图片描述

在程序起点处,我们查看这个指令指示的地址,因为在程序运行的时候,我们首先出现的两个界面,所以我们猜测这个附近地址可能有关于窗口的相关信息

我们在内存地址处利用Ctrl + g寻找到这个地址

在这里插入图片描述

在这里插入图片描述

观察上图中的DEST,此处即为窗口的相关信息,我们观察DEST之后存储的数据,可以发现有00 以及 01的区别

这里的数字代表的是窗口显示的顺序

那这里我们只需要将第一个窗口的顺序与第二个窗口的顺序进行交换,就可以绕过第一个窗口,这样就可以实现第一个功能

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

修改之后运行程序,此时直接就出现了第二个窗口

在这里插入图片描述

功能二的实现:找出序列号算法的实现

第一步:进行查壳,判断是否存在壳

在这里插入图片描述

通过上图可以知道,这个程序没有壳

第二步:将程序加载到OllyDbg中

在这里插入图片描述

点击F9进行运行程序

在这里插入图片描述

第三步:查找错误提示“wrong”

在窗口随机输入,点击OK,弹出错误提示信息,这里记住的关键词是“Wrong”

在这里插入图片描述

在汇编窗口右键选择“中文搜索引擎—>智能搜索”

在这里插入图片描述

在这里插入图片描述

在弹出的窗口中,我们看到了很多的信息,其中一条就是“You Get It”

第四步:选中执行的字符串右键鼠标,点击“在解释器中跟随”,或者直接进行双击,即可去往执行的汇编窗口

如果说字符串较多的话可以右键选择搜索文本输入“Wrong”定位字符串的位置

在这里插入图片描述

第五步:向上找到最近的retn,retn代表的是上一个函数的结束,我们在retn的下一条命令出加断点

在这里插入图片描述

加入断点之后点击执行,在程序处输入并点击OK,此时程序就会断在断点处

在这里插入图片描述

按下F8单步步过进行执行,重点关注加法指令,乘法指令,除法指令等相关计算指令

注意观察信息窗口,寄存器窗口的信息变化,分析每一步命令的作用

依照上述的方法就可以得到注册码的算法。

依据上述方法大家进行尝试,相关指令的执行我将列在下面的:(以用户名输入qwer为例),大家可以根据自己输入的用户名结合算法计算出来自己的注册码

在这里插入图片描述


004081EF:获取输入的用户名
004081F5:计算输入的用户名的长度

00408200:获取到的计算机的长度 * 0X15B38

00408206:获取到输入用户名的第一个字母
0040820D:将获取到输入用户名的第一个字母转化为ASCII码的形式

00408216:将ASCII与上面计算的结果进行相加

00408225:出现了新的字符串  355665(之前十六进制计算结果转化为了10进制) 
---->推测与它相邻的CALL指令存在某种计算
可以加断点后续进行分析

004082EF:出现新的字符串---->10.00000
004082FE:fdiv浮点型除法---->10.00000/5.00000=2.00000
0040831E:faddp---->355665.00000+2.00000=355667
<----00408333中看到的

004083FB:fmul浮点型乘法---->355667.00000 * 3.00000 
00408404:fsub浮点型减法---->1067001.00000-2.00000

004084E5:fsub浮点型减法---->1066999.0000-(-15)=1067014.00000

004085CE:刚刚输入的注册码

004085F1:计算结果与输入的注册码进行浮点相除,进行比对


总结:(( 输入用户名的长度 * 0X15B38 + 第一个字母转化的ASCII码 ) +2) *3 -2 -(-15)

本次我输入的用户名为:qwer

生成的注册码为:1067014

我们记载程序执行,查看结果

在这里插入图片描述

可以看出此时这个算法总结正确

至此我们实现了第一个以及第二个要求

猜你喜欢

转载自blog.csdn.net/weixin_60363168/article/details/127672576
003