Crackme011

Crackme011 的逆向分析

1.程序觀察

clipboard.png

能夠看到,程序只有讓輸入的地方,沒有確認按鈕什麼的。
在程序左側,寫着 Status: UNREGISTRIERT。git

猜測:github

  1. 程序會根據輸入框的變化事件來判斷是否正確(實際上是不正確的,到後面就知道了)。
  2. 輸入正確的序列號程序旁邊的 Status 會改變。

2.簡單查殼

clipboard.png

使用 VB 編寫的程序,沒有殼。算法

3.程序分析

使用 OD 載入程序,搜索字符串。
clipboard.png函數

能夠看到有不少的很類似的字符串,還有不少個 "REGISTRIERT"。spa

咱們也不知道這是什麼東西,隨便雙擊一個進入代碼。
clipboard.png3d

能夠發現,這代碼和 009 和 010 很是相像。
都是先求得輸入的長度,而後創建循環,最後再進行比較。
可是這裏,一個代碼塊有不少的這樣的組合。code

這是爲何呢?
咱們先在比較函數處下斷點。
clipboard.pngblog

咱們沒有進行任何操做,程序就馬上中斷了。
猜測程序可能使用了定時器。咱們使用 VB Decompiler 加載程序
clipboard.png事件

能夠看到有4個定時器。
每一個定時器代碼塊,裏面都是不少個上面那樣的代碼。
clipboard.png
clipboard.pngip

先分析程序的算法
clipboard.png
clipboard.png
clipboard.png
clipboard.png

  1. 程序先計算出咱們輸入的序列號的長度
  2. 創建循環,循環次數是序列號的長度
  3. 在循環中,程序取得咱們輸入序列號的前兩個字符,將其轉化爲浮點數,保存在內存中
  4. 而後程序依次取得序列號的單個字符,將其轉化爲使用10進製表示的 ASCII 碼
  5. 將上述兩個值相加,再轉化爲十六進制
  6. 將每一個字符和前兩個字符相加的值鏈接起來

最後程序將這個字符串和一串字符串相比較,相同就註冊成功。
因爲咱們輸入的序列號最後轉化的字符串是十六進制表示的,因此相比較的字符串也應該是在 0-9,A-F 範圍內的,這樣咱們很容易就肯定了真正的用來比較的字符串:"081 7E 74 7D 7A 7D 7C 7F 82 83 6D 74 74 7A 7F 7E 7B 7C 7D 82 6D 8H 7E 7B 7C"。

因爲最後生成的字符串,是和咱們輸入的序列號的前兩位息息相關的。
前兩位越大,最後每一個字符相對應的也就越大。
前兩位不同,最後每一個數字相對應的也就不同。

根據正確的比較碼,咱們能夠反推出正確的序列號:

74*3032589#**0541238#7412

clipboard.png

相關文件在個人 Github

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息