在吾愛上邊找到的資源,160個Crack me,第六個,網上有很多大佬也有寫文章來講解,當然在破解的時候也有參考,姑且記錄下來,當作自己的學習資料:
拿到程式之後,查殼:
die查殼:

可以看到是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、在思考問題的時候不能鑽牛角尖,否則容易在一個點卡死,而且在分析的時候,不能先入為主,否則會産生思維定勢,也不容易走出來(關鍵是我太菜)。