對某軟件破解的教訓總結

        最近一直在對某個用VB做的軟件(出於敬意不說名字)開刀,本人對VB編的軟件是極爲不屑的,認爲那是懶豬乾的活。但經過這次經歷,發現VB有個好處就是,反彙編的時候簡直就是天書中的天書,如果還加了幾道殼的話,哭吧。不過我這次練手的軟件只加了一道殼,而且有專門的脫殼機。掉外殼後,就開始分析代碼。
        這個程序可能在多個地方有檢註冊的,所以暫時不考慮爆破。
        這是一個重起註冊的軟件,也就是說它的註冊碼記錄在某個地方,結果它在註冊表裏記錄運算後的註冊碼。
        註冊碼運算過程。
        首先,把從公司拿到的外部註冊碼輸入(數字字符串),然後計算得到內部註冊碼(數字字符串),記錄到註冊表。
        等到下次軟件重起,然後從內部註冊碼裏邊取某些數位,組成如a、bc、def一些數,然後取兩個 兩個的乘積,然後對這些乘積進行正弦(SIN)運算得到一條實數的字符串,再在這條數字字符串的小數部分取連續的三個數字組成內部比較碼。然後在判斷註冊的地方使用。
        經過一番努力,暫時可以從內部比較碼推出註冊碼了。只貼出少量相關函數。
 int zjm3(double x, int pos);
 //得到比較的中間碼,x的正弦字符串的pos位置以(C風格排序第一個位置爲0),默認長度3。
int zjm3(double x, int pos)
{
    char tmp[20], *cptr;
    int i;
    sprintf(tmp,"%.15f",sin(x));
    cptr=tmp+pos;
    *(cptr+3)='\0';
    sscanf(cptr,"%d",&i);
    return i;
}
        這就是軟件把註冊碼轉換爲內部比較碼的函數,如果大家覺得有用就拿去吧,呵呵。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章