【原創】TextPad 4.7.3序列號演算法分析

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

TITLE  : TextPad 4.7.3序列號演算法分析
AUTHOR : lionel@nkbbs.org
BLOG   : http://lionel.blogchina.com/
DATE   : 01/09/2005

SOFTWARE : TextPad 4.7.3 : 32-bit Edition
HOMEPAGE : http://www.textpad.com/

    幾個月以前下載的一個軟體,從名字就可以看出來它是一個文字編輯器。個人感覺

看起來要比UltraEdit-32順眼得多,功能上也還湊合,可惜當時我一直沒找到序列號,

所以只能適用。近來閒著無聊,決定自己寫一個算號器。下面我就詳細分析一下這個軟

件序列號的演算法,下面的內容基本不涉及程式的程式碼,那些反彙編出來的東西,寫出來

了也沒幾個人看,所以我只講演算法,呵呵。

首先我給出一個正確序列號的模樣,給大家一個整體的印象:

BEGIN LICENSE
lionel
nku
59 9999CHJXXLK3X6Z01ZPYZXW
4B5E3405 A8DA500D 904F2655 C7EDBB2B E0D91457 93B78BF4
95B3FC43 2A56BDA5 A09C9F3F 2FB5A165 00F73C72 27FFEE20
E0D91457 93B78BF4 95B3FC43 2A56BDA5 E0D91457 93B78BF4
95B3FC43 2A56BDA5 D536376A 0025D966 4C03D12F 8507E6E1
END LICENSE

    看起來挺恐怖的吧!呵呵,其中BEGIN LICENSE與END LICENSE是必須的,不能變。

第二行 lionel 就是註冊的使用者名稱,最大長度45位元組,我們記作:

    char name[45] = "lionel";

第三行 nku就是註冊的單位,最大長度同樣是45位元組,我們記作:

    char company[45] = "nku";

第三行剛開始兩個字元 59,必須是數字,而且兩個字元不能相等,而且也不能等於 90


我們把這兩個字元記作:

    char s2[2] = "59";

緊接著是 9999,這個表示最大使用者的數量,如果是9999則為unlimited,即沒有使用人

數限制,最小應該為 1,不過我沒有驗證過。我們把它記為:

    char max_users[4] = "9999";

在接下來是CHJXXLK3X6Z01ZPYZXW,總共19位,這19位中不能有大寫英文字母"O",也許

是容易被看作 0的緣故。其實這19位只有前16位比較重要,我們把這前16位記作:

    char sn[16] = "CHJXXLK3X6Z01ZPY";

再接下來的 4行,每行有 6個字串,每個字串有 8個字元。而且所有的字元中只有

0-9,A-F,所以很明顯每一個字串就代表一個 DWORD,32位,總共有24組資料,也就

是96個位元組。我們把它們記作:

     char CT[96];

我們再仔細分析一下:

struct
{
   char name[45];
   char company[45];
   char s2[2];
   char max_user[4];
}PT

上面這個結構長度也剛好是96個位元組,這不是巧合,呵呵,因為 CT就是透過 PT算出來

的。而用的加密演算法就是 Twofish。Twofish每次只能加密 128-bit,也就是 16 位元組,

所以需要將這 96 位元組的 PT 分為 6組,分別加密。下面我們再分析一下 Twofish中所

使用的金鑰是什麼:

    sn[16] = "CHJXXLK3X6Z01ZPY";

總共16位元組,每一個位元組 8-bit,總共 128-bit,這剛好就是 Twofish所支援的最短的

金鑰長度。所以:

   CT = twofish_encrypt(sn, PT);

   怎麼樣?簡單吧?利用上面我所說到的這些你寫出來的算號器應該 99.9%正確,那

剩下的那0.1%呢?那部分就是我分析失誤的地方啦!你看我說才說了不到 100行,但我

分析卻整整分析了 2天,再加上研究 Twofish演算法的時間,差不多 5天了。所以有一些

細節的東西我就沒太仔細看。令我鬱悶的是我寫完算號器,休息的時候竟然在網上找到

了 ORiON的序號產生器,不過這個序號產生器算出來的號沒我的多!哈哈。他的這個算號器裡,

    s2[2] = "51"

是不變的,而且序列號都是英文,不知道為什麼。我用我的算號器試了一下,序列號是


寫的算號器介面特漂亮,不像我只會寫console的... 如果哪位好心人能給我一個 VC的

完全用 API寫的介面比較漂亮的 keygen模版,我將不勝感激!哈哈。

   如果你想參考一下我的算號器算出來的結果,可以去我的blog下載。

http://blog.blogchina.com/upload/20...21549354566.zip

相關文章