1. 程式人生 > >aLoNg3x.1分析

aLoNg3x.1分析

第6個CKme002看了一天,能力不夠,獨立分析不出。參考其他文章照做了一遍,那個就不寫了。開始的upx殼手脫了一下,流程感覺沒什麼問題,但脫出來匯入表修復就是不行。回頭再試,而且win10下的那個匯入表修復工具importREC必須要管理員許可權開啟才能顯示OD載入的程式,否則顯示不出來。

第7個拿到程式先看了下沒殼。直接執行。

OK鍵是禁用的,一個取消鍵,一個幫助鍵,幫助鍵點選後提示,這個creakeme的要求是輸入名稱序列號正確後把兩個按鈕消除掉。程式是delphi寫的而且沒殼,直接用dede找按鈕事件函式。

可以看出四個比較重要的按鍵OK按鍵,Cancel按鍵,name輸入,Codice輸入。OD裡面分別下斷點。

name框上隨便輸入,程式斷到字串輸入的判斷中,中間有個字串的比較函式比較關鍵

比較函式,函式開頭部分不截了。這一段主要是檢測name字串。首先輸入長度必須大於5,判斷完長度後,就開始將輸入的name字串進行計算,過程下面寫了。

總的來說兩個條件,一個是字串長度>5,一個是字串計算後結果=0x29A。把跳轉修改後,執行發現OK鍵激活了。所以說這個檢測判斷是用來啟用OK鍵的。然後把name和Codice的輸入長度改成5,再看下序列號的檢測。

結果發現序列號的檢測和Name的檢測函式是同一個。想了一下,程式破解的要求是把OK鍵和取消鍵都消除掉,那剩下的只能分析OK按鍵和取消按鍵裡面的函式。我先找的OK鍵,OK鍵點選後,再次斷到了序列號判斷的函式中,因為呼叫函式一樣,所以依舊把跳轉改掉,但是這次改完以後,序列號的輸入清空了,OK鍵又被禁用了。所以說,要想正常分析,OK鍵必須先要永久啟用,那輸入完以後,點選取消鍵試試看。

點選取消鍵後,大體流程也是取name和序列號,然後進入一個比較函式。這次的比較方式和之前的不一樣了

比較方式:

輸入字串
取字串第五個字元
餘數=第五個字元/7
ret=餘數+2

num=1           累乘到6
for(int i=1;i<ret;i++)
{
  num*=i
}
計算出num


輸入的字串的每一位ASSIC用ch表示

 tmp= ch*num

result+=tmp

result-=0xAB4130

result==0x7A69

result=0xAB4130+0x7A69

計算的流程簡要來說就是:先取輸入字串的第5個字元,然後除以7得到一個餘數,餘數+2得到一個數,假設這個餘數是4,那麼結果就是6,然後用1累乘到6計算出一個數num,然後用這個數num去和輸入字串的每一位的ASSIC碼ch相乘,每一位都計算出一個數tmp,這些數累加起來,得到最後一個數result,result-0xAB4130以後得到的數必須等於0x7A69。流程是這樣的,但轉化成程式碼真的夠嗆,所以這個cacle的按鈕檢測,現在我找不到正確的序列號,這裡只能改了跳轉。改完跳轉以後,取消鍵消失了,並且OK鍵也激活了。

然後就是OK鍵了,當取消鍵消失後,再次點選OK鍵,會發現它不會再呼叫之前那個判斷函式,會進入一個新的判斷函式中

也就是當輸入的序列號轉換後得到一串大寫字母,如果和輸入的name相等那麼就說明成功。但是這個必須是取消鍵消除掉後才可以,因為取消鍵在的時侯,OK鍵裡面的判斷不是這一個。