Delphi元件破解教程(一) (3千字)

看雪資料發表於2015-11-15

Desperate Turk Crackers Group            
元件名稱:Dream Font Color
破解者:    MbR
保護:     純IDE
工具:    DCUcu,Delphi5,Ultraedit
Url :     www.dream-com.com    
難度:容易
教程號:3
日期:    2001年7月19日
Borland Delphi Visual Component Library Reversing
這篇教程中,我將盡量演示如何破解Delphi視覺化元件庫(VCL)。讓我們開始吧...
下載Dream Font Color元件庫,並將之裝入Delphi。然後新建一個應用程式,將Dream Color元件裡的VCL加入窗體,將工程儲存到一個空目錄中,編譯執行。... 怎麼,沒什麼不對勁的地方... 關閉Delphi,確保已經完全關閉... 進入儲存工程的目錄,執行編譯過的專案... 嘿,我們看到了下面的Nag訊息框:

“This application uses unregistered etc....” 我們稱這個為“純IDE保護"。這意味著Delphi執行中是不會有什麼問題的。但當Delphi關閉時,我們就會看到這個訊息。現在進入VCL單元(unit)所在的目錄。按F3查詢警告訊息框裡所顯示的關鍵字(例如:unregistered)

如你所見,純IDE保護極可能在psceditbar.dcu中完成。另外,在fontcolor_d5.bpl檔案中似乎也有“unregistered”關鍵字。如果在DCU檔案中有xxxxx.dpk檔案,那麼我們就不必為bpl檔案打補丁了。因為完成dcu檔案的補丁後,在Delphi中開啟bpl檔案重新編譯,Bpl檔案就會自動打上補丁。但是如果沒有dpk檔案,那麼我們就不得不手動為bpl檔案打補丁了。(我將具體在另外一個教程中討論這個問題)。
現在,用DCUcu開啟psceditbar.dcu進行檢視... 當Delphi關閉時開啟編譯過的工程時就會彈出訊息框。這是一個重大的線索... 使用DCUcu檢視dcu檔案,觀察函式和事件列表,找到“checktrialversion”...雙擊之...

1. 10: è.... |E8(00 00 00 00 | CALL PSCIsDelphiRunning{0x3B8}
2. 15: „À |84 C0 | TEST AL,AL
3. 17: u. |75 13 | JNE +19; (0x2C)
4. 19: j0 |6A 30 | PUSH $30
5. 1B: h0... |68(30 00 00 00 | PUSH checkTrialVersion{0x3BE}+$00000030
6. 20: h8... |68(38 00 00 00 | PUSH checkTrialVersion{0x3BE}+$00000038
7. 25: j. |6A 00 | PUSH $00
8. 27: è.... |E8(00 00 00 00 | CALL MessageBox{0x1E7}
9. 2C: Ã |C3 | RET NEAR
如你所見,它在第一行呼叫“PSCIsDelphiRunning”函式,如果Delphi在執行中則跳至(0x2C) (第九行)。如果不在執行則跳至CALL MessageBox{0x1E7} 並彈出訊息框。
如果你想找到純IDE視覺化元件的控制部分,那麼用DCUcu開啟VCL,查詢“messagebox”或“messagedlg”文字。你將很有可能找到控制部分。
現在該如何使用DCUcu為dcu檔案打補丁呢...
3. 17: u. |75 13 | JNE +19; (0x2C)
4. 19: j0 |6A 30 | PUSH $30
5. 1B: h0... |68(30 00 00 00 | PUSH checkTrialVersion{0x3BE}+$00000030
複製上面這部分,清除不需要的部分,只留下十六進位制值。
例如 75 13 6A 30 68 30 00 00 00... 為什麼要這樣做呢?因為在反編譯的程式碼裡我們是看不到偏移值的:(((。複製上述十六進位制值,並使用十六進位制工具開啟dcu檔案,查詢所複製的十六進位制值... 確保定位在正確的地方,使用同樣的值查詢下一個。如果仍然停在原來的地方,說明所在的位置是正確。
現在將 75 13改為 EB 13 並儲存。開啟Delphi,新建一個工程,使用Dream Font Color元件庫裡的元件,編譯並儲存專案。關閉Delphi執行編譯過的compiled exe然後... 警告訊息框又出現了!!! 該死,我只是在開玩笑:) ) 如果呢已經完成上述的所以步驟,那你應該不會再看到這樣的訊息框了。
我將再另一篇教程裡詳細討論有關VCL的事情,在此之前請在這片教程的有關方面多加練習。
順便說一下,DCUcu是DCU2INT的圖形介面版本,由我編寫。不久就可以在我們的網站上找到。關於Delphi和VCL逆向工程的問題你可以email給我。
祝好運
MbR [DTCG]
mbr_man@yahoo.com

相關文章