背景:
最近需要一個PDF轉WORD的功能需求,找到了一個dll,但是有時間限制,於是就嘗試了以下,利用工具去除該時間限制。
DLL文件:PDF2WORD
工具:
IDA Pro Advanced6.1 (主要用於分析匯編代碼的邏輯,找到關鍵點)
OllyDbg (修改dll中的匯編代碼並可以另存為dll)
思路:在DLL的反匯編代碼中找出時間判斷的位置,跳過該時間判斷。
實現:
利用IDA Pro 打開dll文件,該工具可以圖形化的展示dll內部各個方法的跳轉關系,如下圖:
該DLL在超期使用時,會彈出提示,如"Clock Tempering Detected"字樣的字符,在IDA中,查找該字符,如下圖:
搜索過程是比較漫長的,有經驗的朋友就知道,一般這些字符,會有固定的存放位置,在.rdata或.text 區段,如下圖
很明顯,第一個就是我們要找到的字符串,雙擊之,進入如下界面
黃色區域的,就是該字符的在程序中的調用地點,想看看他在何處定義的,雙擊之,如下圖
上圖已經列出了該字符區域在哪些方法中被調用了,如下圖
回到剛才在程序中的調用位置,在IDA中,可以將圖形縮小,順着這個方法,不斷的向上找,
找到他是什么時候開始調用這個方法的。如下圖:
藍色方塊就是進入提示的地方,綠色方塊,有個判斷,正確了,就走向能用的線路。
方法名是loc_1000399E,這樣就好解決了,不讓方法走入他們的父節點。直接跳轉到1000399E地址就可以了。
在橙色方塊上面那句,jl loc_10003899,改為 jmp loc_1000399E,這樣,判斷時間的方法就不會走進去了。直接屏蔽了。
開始修改了,此時會發現IDA原來沒辦法直接保存為dll,能看能改就是不能存,這就需要用到OllyDbg工具了。
在IDA中,鼠標選中 jl loc_10003899 這句話,然后切換到匯編視圖
找到了具體的匯編代碼,復制這段代碼。開始用OllyDbg來修改了。
OllyDbg打開該DLL
鼠標右擊,開始搜索二進制文本
找到如下位置(有的時候,會出現同樣的地方,這就需要你一個個的判斷,是否是那個位置)
雙擊之,
修改為
點擊匯編,修改后的代碼
接下來,就要進行保存了
代碼區域,選中更改了那兩句
在該界面,右擊,選擇保存,就可以把dll重新輸出。
到此為止,該dll的時間限制就去除了,可以更改本機時間測試以下:)