在吾爱上边找到的资源,160个Crack me,第六个,网上有很多大佬也有写文章来讲解,当然在破解的时候也有参考,姑且记录下来,当作自己的学习资料:
拿到程序之后,查壳:
die查壳:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TTtJmZ5w2Y040MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4kTMwITNzETM5EDMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
可以看到是Delphi的程序,直接上手Darkde进行反编译,这都是后话,在查完壳之后,获取到程序的一些基本信息。下一步先运行一下程序,对于程序有一个大致的了解:
在程序之初,只有帮助按钮可以弹出对于我们来说有用的信息,这次破解的方法不采用关键字符串搜索的方法,这次换另外一种方法:采用Delphi反编译工具,获取关键控件的信息,从而破解程序。
第一步:Darkde反编译程序:
点击CrackMe模块,进入:
第二部:获取到控件的关键信息之后,我们可以获取到在程序中使用的控件的ID,在这次的破解中我们使用控件ID来下断点的方式进行破解,查看控件的ID:
我们在调试破解过程中用到的两个关键的 控件ID是Cancle键和OK键,(这个程序的主要目的就是在运行之后将这两个按键隐藏掉,可以从帮助信息里边看到)
第三步:OD附加进程
第四步找到关键的控件的ID:
鼠标右键—>查找—>所有常量—>输入2D0(Cancle按键的控件ID)
第五步:可以看到一共有4个地方涉及到该控件的使用,
我们可以跳过去分别去看一下这四个地方的大概作用,来找到哪个是我们要用的(我们的目的是找到隐藏Cancle键的逻辑和算法):
找到隐藏Cancle的代码段之后,进行调试,输入Nome:134567 Code: 564897(这两个值可以随便输入),在这块代码段的开头部分下断点进行调试:(输入数据之后,点击Cancle按钮)
F7跟随关键的算法部分:算法的核心部分分析如下:
算法的核心部分分析之后,其实就可以逆向的写出相应的代码,来得到满足条件的数据:
用C写了一个 :
#include<stdio.h>
int main()
{
int i=0;
int j=0;
int s=0;
int arr[10]={0};
printf("请输入你的Nome个数(友情提示位数必须大于5)\n");
scanf("%d",&s);
printf("请输入你的Nome:");
for(i=0;i<s;i++)
{
scanf("%d",&arr[i]);
}
int x=(arr[4]+0x30)%7+2;
int q=1;
int y;
//阶乘
for(i=x;i>0;i--)
{
q=q*i;
}
for(i=0;i<6;i++)
{
j=j+(arr[i]+0x30);
}
q=q*j;
y=q-0x7A69;
printf("您应该输入的Code应该是:");
printf("%d",y);
}
之后将得到的数据填入Code再点击Cancle发现Cancle键消失了:
下一步,将Cancle按键隐藏之后,就该隐藏OK键了(这两个没有顺序而言,全凭开心),和Cancle同样的方法,我们还是根据控件来对OK键定位:
核心算法的分析:
根据核心算法的分析结果,也可以顺着得到我们最后的注册码:(这里没有用代码实现,因为过程比较麻烦,但是不难就是太搬砖了)
到此这个分析过程也已经结束了,根据这次分析结果也学到了很多东西;
1、在逆向分析的时候有一个好的工具是非常重要的,要多换着使用工具,找到对的工具事半功倍
2、关键字符串搜索的方法,有一定的局限性,从其他角度多方面进行解析
3、在思考问题的时候不能钻牛角尖,否则容易在一个点卡死,而且在分析的时候,不能先入为主,否则会产生思维定势,也不容易走出来(关键是我太菜)。