2013年11月1日 星期五

[OllyDBG][反組譯/deassembly][mirc_6.0][keygen]如何使用OllyDBG寫一個序號產生器,Writing a keygen by OllyDBG Tutorial

原文網址在此 http://www.securitytube.net/video/1078

如果網頁連結/影片失效請聯絡我。

閱讀本文請搭配上方網址的影片。
-------------------------------------------------------------------------------------------------------
最近對於反組譯 與 組合語言有點興趣,所以找了網路上的教學來看,由於是英文的所以讀者可能需要多聽幾次。

此教學為"教學 與 學習" 用,請不要拿去做商業行為。

作業系統: Windows 8 64bit
反組譯工具: OllyDBG 2.0 官方版本 no plugin
程式撰寫工具: SlickEdit 官方試用版本
GCC編譯環境: Cygwin 64bit-安裝gcc

以上大家都可以在google輕易找到

至於學習對象為mirc 版本為6.0.1,官方不提供舊版,請讀者們自己尋找。


OllyDBG的基本操作這邊就不詳細介紹了,Google以下資訊非常的多。

這邊會用到的是

F2-設斷點
F4-執行到目前位置
F7-逐步執行遇到call跳進去執行
F8-逐步執行遇到Call不跳進去執行

以下為上方網頁影片重點整理:


1/4:

  首先開啟OllyDBG 選擇學習對象,先執行一遍了解程式的大概運作流程。
這邊原作者一開始猜測Box傳遞訊息使用GetDlgItemTextA,但是找尋不到所以轉而尋找SendDlgMessageA,則找到許多Caller, 但是不知道哪個才是Register所呼叫的,所以把所有的Caller都下了斷點。如此再次執行程式並觀察被截停在哪就知道判斷序號的地方為何處。

  發現某區段程式碼疑似判斷的則可以把其他斷點都消除,只留下要檢測的。接下來就是苦功與經驗了,大概閱讀一下程式碼意義,可以知道Call結束後Test EAX,EAX,為檢測上一個Call的返回直,如果EAX為true 則可以通過反之則不行,如果我們只是要單純可以使用這個程式,原作者說可以直接把EAX設為1,如此一來不管Call回傳結果為何都判斷為True。


2/4 and 3/4

 這邊我們要進去看那個Call的判斷序號演算法,來推算出產生序號的方法。

 第一個演算法是判斷有無"-"

 第二個則是把User name 第四個之後丟進來做hash 產生 地一部分的序號

 第三個則是把User name 第三個之後丟進來做Hash 產生第二部分序號

這邊困難的部分是如何閱讀Assembly code 把code 轉為自己熟悉的高階語言,這需要大量的時間與努力才有辦法達到與觀察Assembly code 就可以知道核心判斷演算法為何。


4/4

對於演算法做驗證,與簡單的C++ MFC GUI的撰寫。

如果有人需要影片中的 mirc_keygen.c  or mirc_keygen.exe 也可以私信給我。

歡迎討論。

另外再次提醒請不要拿去做商業行為。

沒有留言:

張貼留言