天天看點

CrackMe 之 006

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

拿到程式之後,查殼:

die查殼:

CrackMe 之 006

可以看到是Delphi的程式,直接上手Darkde進行反編譯,這都是後話,在查完殼之後,擷取到程式的一些基本資訊。下一步先運作一下程式,對于程式有一個大緻的了解:

CrackMe 之 006

在程式之初,隻有幫助按鈕可以彈出對于我們來說有用的資訊,這次破解的方法不采用關鍵字元串搜尋的方法,這次換另外一種方法:采用Delphi反編譯工具,擷取關鍵控件的資訊,進而破解程式。

第一步:Darkde反編譯程式:

CrackMe 之 006

點選CrackMe子產品,進入:

CrackMe 之 006

第二部:擷取到控件的關鍵資訊之後,我們可以擷取到在程式中使用的控件的ID,在這次的破解中我們使用控件ID來下斷點的方式進行破解,檢視控件的ID:

CrackMe 之 006

我們在調試破解過程中用到的兩個關鍵的 控件ID是Cancle鍵和OK鍵,(這個程式的主要目的就是在運作之後将這兩個按鍵隐藏掉,可以從幫助資訊裡邊看到)

第三步:OD附加程序

第四步找到關鍵的控件的ID:

滑鼠右鍵—>查找—>所有常量—>輸入2D0(Cancle按鍵的控件ID)

CrackMe 之 006

第五步:可以看到一共有4個地方涉及到該控件的使用,

我們可以跳過去分别去看一下這四個地方的大概作用,來找到哪個是我們要用的(我們的目的是找到隐藏Cancle鍵的邏輯和算法):

CrackMe 之 006
CrackMe 之 006
CrackMe 之 006
CrackMe 之 006

找到隐藏Cancle的代碼段之後,進行調試,輸入Nome:134567 Code: 564897(這兩個值可以随便輸入),在這塊代碼段的開頭部分下斷點進行調試:(輸入資料之後,點選Cancle按鈕)

CrackMe 之 006
CrackMe 之 006

F7跟随關鍵的算法部分:算法的核心部分分析如下:

CrackMe 之 006

算法的核心部分分析之後,其實就可以逆向的寫出相應的代碼,來得到滿足條件的資料:

用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鍵消失了:

CrackMe 之 006

下一步,将Cancle按鍵隐藏之後,就該隐藏OK鍵了(這兩個沒有順序而言,全憑開心),和Cancle同樣的方法,我們還是根據控件來對OK鍵定位:

CrackMe 之 006
CrackMe 之 006

核心算法的分析:

CrackMe 之 006

根據核心算法的分析結果,也可以順着得到我們最後的注冊碼:(這裡沒有用代碼實作,因為過程比較麻煩,但是不難就是太搬磚了)

CrackMe 之 006

到此這個分析過程也已經結束了,根據這次分析結果也學到了很多東西;

1、在逆向分析的時候有一個好的工具是非常重要的,要多換着使用工具,找到對的工具事半功倍

2、關鍵字元串搜尋的方法,有一定的局限性,從其他角度多方面進行解析

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

繼續閱讀