彩虹狗GS-MH破解-淺談狗的破解方法

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

看過網上多篇關於軟體狗破解的文章,雖不乏精品,但大多是屬於找到出錯對話方塊,想辦法跳過之類文章,實在缺乏技術含量,且有誤人之嫌。軟體狗不是這樣解的!這樣的破解首先有兩大問題,第一:軟體是否在按有狗流程執行?第二:軟體狗資料丟失。

    我們先看看彩虹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操作,這才是我認為軟體狗的破解方法。

相關文章