我们第一步还是查看这个crackme
我们看到这里叫我们输入。。。。。nome。。。。和codice。然而OK是灰色不能点击的,点击点击cancella并不是退出,而是将我们输入的codice归零。点击help会出现几个弹窗:
后面两个是说如果需要寻找帮助或者是解出来了,请联系作者,然后是作者的联系方式。
意思就是只有前两个内容是有用的,它们分别是:
1.这个crackme只有隐藏“OK”和“cancella”这两个按钮,真正的“logo”按钮才会出现。
2.如果“OK”和“cancella”两个按钮没有消失,那么就没有成功破解这个crackme。
然后我们用peid查查信息:
发现用的是Delphi,二话不说,直接直接dede:
看到事件和窗体
我们可以看到几个事件的内在的关系,例如OKbutton和OKclick,nome:TEdit和Nomechange,甚至还有几个不知道有什么用的事件。这样我们就可以通过事件来确定按钮的地址。
然后我们在nome和codice的和那几个不知道有什么用的事件的地方下断
然后,我们点击运行,尝试假码,因为程序是只有有输入,就会运行计算一次,所以我们每输入一个数字就会被段下来,每输入一个数字就会被段下来,为了方便,我们在文档中输入假name:123456789和假码11111111,然后复制到里面:
复制name的时候发现,被断在了name事件的段首,我们单步向下,看到一个call:
这个这是是上面我们看到的几个不知名的事件中的一个,所以我们进去看一下:
在这个函数中,我们看到了一个循环
根据这个循环,我们就可以写一个脚本:
#include<stdio.h>
#include<string.h>
int main()
{
char name[] = "123456789";
int codice = strlen(name) ;
int re = 0;
for (int i = 1; i < strlen(name); i++)
{
re = name[i-1] * name[i];
codice += re * i;
}
codice -= 666;
printf("%d", codice);
return 0;
}
输入我们的假name:
输入进程序我们看到OK键由灰色变成了白色,但是点击OK,则会清除我们输入的codice,OK键则右边为灰色。
。。。之后就是消除cancella和OK了,我们要在ok出现后,点击cancella,然后在cancella事件里面找到一个call向0x00442AF4的函数,这个函数里面有一组算法,可以算出这个name所对应的新codice,然后根据这个新codice再进入OK事件的按钮,找到一组算法,算出这个新codice对应的name。。。。
所以这个软件的流程就是:
1.随便输入一个假name,再输入假nome对应的codice,OK按钮可用。
2.OK按钮可用后,进入cancella按钮事件,找到假name对应的真codice。
3.找到真codice后,进入OK按钮事件,找到真codice对应的真name,然后消除OK和cancella两个按钮
总的来说这个crackme对我来说,有点麻烦,特别说写注册机的时候,经常出错,这个crackme我就相当于做了一半没有完成把,如果以后有时间,就把这个坑填上