看過網上多篇關於軟體狗破解的文章,雖不乏精品,但大多是屬於找到出錯對話方塊,想辦法跳過之類文章,實在缺乏技術含量,且有誤人之嫌。軟體狗不是這樣解的!這樣的破解首先有兩大問題,第一:軟體是否在按有狗流程執行?第二:軟體狗資料丟失。
我們先看看彩虹GS-MH狗,這個狗的API定義如下:
所有資料都定義在MH_DLL_PARA中
typedef struct _MH_DLL_PARA
{
WORD Command; //命令碼
WORD Cascade; //級聯順序號
WORD DogAddr; //首地址
WORD DogBytes; //操作位元組數
DWORD DogPassword; //讀寫密碼
DWORD DogResult; //變換結果
DWORD NewPassword //新密碼
BYTE DogData[200]; //輸入輸出資料
} MH_DLL_PARA;
結構成員Command是命令碼,定義如下
DogCheck 1 查狗
ReadDog 2 讀狗
WriteDog 3 寫狗
DogConvert 4 變換
GetCurrentNo 5 取流水號
EnableShare 6 允許共享
DisableShare 7 停止共享
SetDogCascade 8 設定級聯碼
SetNewPassword 9 設定新密碼
破解關鍵是200位元組資料和狗變換,也就是2號功能和4號功能。和以前討論過的R4狗一樣,這個狗的API也是多功能函式,根據引數完成不同功能。此文重在討論破解方法而不是具體怎麼破解,所以不給出怎麼找到狗操作的CALL地址以及相應資料地址方法。
找到任何一個讀狗的CALL,將DogAddr改為0,DogBytes改為200,讀完狗在DogDat就可以得到200字的狗內資料,破解時將讀狗操作轉為查這個資料表就可以了。
關於4號功能,如果頻繁使用,那一定加密程式中會有一個碼錶,如果使用不多,可以直接記錄變換前後資料形成自己的碼錶。
關於寫狗等操作的處理相對簡單,不再贅述。
當完成上述工作後,我們的破解程式一定是按照有狗時的流程在執行,而不會是被強行修改執行。
簡單舉個例子,比如我的加密程式要用到一個公式:y=k*x+1,而加密者將常量K放到了狗中,呼叫公式前讀狗,成功返回資料及一個標誌,前文提到的爆破方法修改程式流程,必然導致得到錯誤的y值!
所以對軟體狗的破解,瞭解其API是絕對第一重要的,在API中能看到程式與狗的資料交換。(除外S4,R5這些將程式放到狗中執行的新一代加密狗),追蹤到狗操作的API,整理出(或者無狗時猜測出)重要的資料,完全模擬API操作,這才是我認為軟體狗的破解方法。