OD調試學習筆記7—去除未注冊版軟件的使用次數限制


OD調試學習筆記7—去除未注冊版軟件的使用次數限制

本節使用的軟件鏈接 (想自己試驗下的可以下載)

一:破解的思路

  仔細觀察一個程序,我們會發現,無論在怎么加密,無論加密哪里,這個程序加密的目的就是需要你掏腰包來獲得更多的功能或者解除限制。那么我們就可以逆向的來思考,如果該程序成功的注冊后,那么程序的行為必將發生變化,如NAG去除了,如功能限制沒有了等等。也就是說,程序的代碼的走法也會跟未注冊的時候截然不同。因為程序的行為改變了,那么決定它所有行為的代碼走法也會發生變化。

二:認識OD的兩種斷點

  • OllyDBG從原理上來區分,有兩種不同的斷點:軟件斷點和硬件斷點。
  • 也許會有朋友說那不是還有內存斷點嗎?
  • 內存斷點嚴格來說是屬於一種特殊的軟件斷點。
  • 內存斷點:

–     內存斷點每次只能設置一個,假如你設置了另一個內存斷點,則上一個會被自動刪除。

–     設置一個內存斷點,會改變整塊(4KB)內存的屬性,哪怕你只設置一個字節的內存斷點。

–     另外還需要提一下的是,內存斷點會明顯降低OD的性能,因為OD經常會校對內存。

  • 軟件斷點:

–     當我們按下F2設置的斷點就是軟件斷點。

–     設置該斷點的原理是在斷點處重寫代碼,插入一個int3中斷指令,當CPU執行到int3指令的時候,OD就可以獲得控制權。

  • 硬件斷點:

–     這個原理跟軟件斷點不同,硬件斷點的可行性依賴於CPU的物理支持。

–     傳說中,有這么一些寄存器,它們只用於調試,我們稱為調試寄存器:Dr0~Dr7

–     其中Dr0~Dr3四個寄存器用來存放中斷地址,Dr4、Dr5保留不使用,Dr6、Dr7用來記錄Dr0~Dr3的屬性(如讀,寫還是執行,單位是字節,字還是雙字)。

–     因此,這就解釋了為啥硬件斷點只有四個,天生不足哈。

  • 要如何來區分何時使用何種斷點呢?
  • 這兩種斷點在使用上都有它們自身的限制,只要搞清楚它們各自的特性就知道何時該用哪個了。
  • 例如軟件斷點就只能在OD的CPU界面下,在數據段它下不了,在一條指令的中間它也下不了。
  • 在我們這個例子中,斷點我們想下在windows的動態鏈接庫里,我們需要用到硬件斷點,因為用軟件斷點下在dll文件中是不會保存的,重啟程序后將丟失斷點。

 

實驗開始

調試軟件:VisualSite Designer.exe,這是一個類似photoshop的軟件

軟件來源:www.fishc.com(小甲魚OD調試篇7)

運行軟件發現有使用次數的限制,並且關閉程序后有廣告彈出,如下圖:


 

三 去除使用次數的限制

找到諸如NAG窗口調用處的方法:

一路F8,遇到停止的call處(或者說遇到NAGcall處)設置斷點,再F7進入。直到找到最終callNAG的地方。

注意:在上述的過程中,設置斷點的方式有兩類:(1)程序領空處設置軟件斷點,(2)動態鏈接庫,即系統領空處設置硬件斷點

 

上圖即為最終調用NAG的call處,這句call語句執行的有兩件事:(1)計數器減一,即剩余使用次數減一(2)彈出程序。

將該處匯編為:mov   eax,1

保存修改,再執行,提示使用次數限制的NAG窗口便消失了。

四 去除廣告

od運行程序,關閉軟件主界面,彈出廣告

 

Od界面按下暫停鍵,按下【k】查看堆棧調用情況,如下圖:

 

 

發現只有一個是來自應用程序的堆棧,其他都是動態鏈接庫的(系統),跟隨到該處地址,如下圖所示:

 

將圖中的call直接nop掉,再保存修改載入,廣告就沒有了!

 

 

以上是程序行為未發生改變時的破解,接下來講程序行為發生改變后的破解。

 

五 程序行為改變后的破解

  程序行為發生改變是指注冊前和注冊后的行為發生改變,或者說表現在程序可用和程序不可用時的行為有了不同。

    如本例程序,如果把限制的使用次數用完會發生什么事情?很簡單,程序就不給我們打開了唄!那程序不給我們打開了,它的代碼走的路線就會不同,即代碼行為發生了改變。

  判斷代碼走的路線有兩種方案,一種是條件判斷,一種是jump+變量(后一種以后再介紹)

    這里用第一種,od載入原始程序(從未修改過的最初版)從開始一直F8走,碰到跳轉(黃色的)進行注釋,跳轉實現的注釋Y,未實現的注釋N。就這樣耐心地注釋到最終調用nag窗口的地方。為什么要這么做呢?這可以說是破解程序的不二選擇,或者說是最保守的方法。注釋完成后,將軟件使用次數用完,使程序行為發生改變。

  注釋的目的是就是為了和行為發生改變后的代碼做對比,通過對比,找出不一樣的關鍵處,也就知道了程序行為改變的原因了。這種方法可以稱為破解的絕對方案(也就是絕對行得通的方案)

  按照此方法,對比不同的地方,如下圖:

 

  上圖中的jle是導致代碼行為發生改變的“重要嫌疑犯”,該跳轉在程序可用時(軟件使用次數未用完)是未實現跳轉,現在程序不可用時(軟件使用次數用完了)變為了跳轉實現,又是在最靠近NAG的地方,所以它引起了我們的注意!

  於是,嘗試修改這條jle指令,在它上方將test eax,eax修改為mov eax,1。因為在test eax,eax處eax的值顯示為0,將其改為1的話,應該就使其不跳轉了。

  如下圖:

 

  修改后,保存。載入修改后的程序,運行,發現雖然NAG窗口提示剩余使用次數為0次,但依然可以進入使用軟件了。

  同理運用之前說過的方法再去除廣告和NAG窗口之后,一個沒有使用次數限制,沒有廣告,沒有NAG的軟件就呈現在我們面前了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM