我愛我的家園!

          成功在于你是否努力,希望在于你是否相信自己!

           

          《超星圖書閱覽器》圖書目錄文件格式探秘

          ========================================
          《超星圖書閱覽器》圖書目錄文件格式探秘
          ========================================
          版本 1.1
          Shun Cox (shuncox@263.net)

          注意:
          本文可以任意復制、轉換和發布,但必須保持文件內容的一致和完整。
          有任何問題請到 bookexpress.iscool.net 或郵件 shuncox@263.net


          一、.dat 文件
          _____________________________________________________________________

          整體結構為
          +-----------+
          |? ? 頭? ? |
          +-----------+
          |? 記錄 1? |
          +-----------+
          |? 記錄 2? |
          +-----------+
          |? ...? ? |
          +-----------+
          |? 記錄 n? |
          +-----------+

          .dat 文件的頭結構

          struct DatHead {
          ? ? DWORD Mark;????????// 標志,'SSDT'
          ? ? WORD Ver;????????// 可能是版本號,一般為 2
          ? ? WORD Type;????????// 類型,在 site 和 address 中都為 2,
          ????????????// bktree 中為 0(V3.51 中為 2),
          ????????????// bklist 中為 3
          ? ? DWORD NumOfRec;????// 含有多少記錄
          ? ? DWORD LenPerRec;????// 每個紀錄的長度
          ? ? DWORD LenOfHead;????// 頭的長度
          ? ? DWORD EncOffset;????// 加密段開始處,只在 bklist 中有效
          ????????????// (在 V3.51 中此變量無效)
          };


          二、不同 .dat 文件的記錄結構
          _____________________________________________________________________

          site.dat
          --------
          記錄完全加密

          struct SiteInfo {
          ? ? char Path[32];????// 本地路徑
          ? ? char Name[64];????// 圖書館名稱
          ? ? WORD Rev1;????????// 未知
          ? ? char Date[22];????// 更新日期
          ? ? char URL[132];????// 更新書庫的 URL
          ? ? DWORD Rev2;????????// 未知
          };

          address.dat
          -----------
          記錄完全加密

          struct AddrInfo {
          ? ? DWORD Rev;????????// 未知
          ? ? char Addr[];????// 下載主機地址
          };

          bktree.dat
          ----------
          V3.51 之前記錄沒有加密,V3.51 對整個記錄完全加密

          struct TreeInfo {
          ? ? char Name[100];????// 分類名稱
          ? ? WORD Rev;????????// 未知
          ? ? WORD Level;????????// 分類所處的層數
          ? ? DWORD Start;????// 在相應 bklist 中的起始記錄號
          ? ? DWORD Num;????????// 圖書數量
          };

          bklist.dat
          ----------
          bklist 的記錄相對復雜

          偏移 0 處(V3.51 以前不加密,V3.51 對整個記錄完全加密):
          struct BookInfo {
          ? ? char Name[100];????// 書名
          ? ? DWORD Pages;????// 頁數
          ? ? WORD AddrNo;????// 主機編號(從 1 開始,主機地址在
          address 中)
          };

          偏移 DatHead::EncOffset 處為加密段(V3.51 從 0x6a 開始):

          * 對于 SSREADER V3.4
          struct EncInfo {
          ? ? WORD EncLen;????// 加密長度
          ? ? // 加密開始
          ? ? WORD Copyright;????// 版權,如果(Copyright >> 8 == 0)則可以下載
          ? ? char Path[100];????// 路徑和文件名
          ? ? char Author[];????// 作者,如果(DatHead::LenPerRec != 0x110)則無
          };

          * 對于 SSREADER V3.5 - V3.51
          struct EncInfo {
          ? ? WORD EncLen;????// 加密長度(在 V3.51 中此變量無效)
          ? ? // 加密開始
          ? ? WORD Copyright;????// 版權,如果(Copyright >> 8 == 0)則可以下載
          ? ? char Rev[58];????// 未知
          ? ? DWORD SN;????????// 超星書號
          ? ? char Path[];????// 路徑和文件名
          };


          三、解密算法
          _____________________________________________________________________

          解密以 0x10 字節為單位順序進行,最后不足單位的字節忽略。

          void Decrypt(DWORD *s)
          {
          ? ? DWORD v = 0xe3779b90;
          ? ? DWORD d = 0x9e3779b9;
          ? ? static DWORD k[] = {0x3f65496d, 0x61737745,????0x2e2c2e5e,
          ????0x38375f2f};
          ? ? int i;

          ? ? for (i = 0; i < 0x10; i++) {
          ? ? ? ? s[3] -= ((s[0] << 4) + k[2]) ^ (s[0] + v) ^
          ? ? ? ? ? ? ? ? ((s[0] >> 5) + k[1]);
          ? ? ? ? s[2] -= ((s[3] << 4) + k[0]) ^ (s[3] + v) ^
          ? ? ? ? ? ? ? ? ((s[3] >> 5) + k[3]);
          ? ? ? ? s[1] -= ((s[2] << 4) + k[2]) ^ (s[2] + v) ^
          ? ? ? ? ? ? ? ? ((s[2] >> 5) + k[3]);
          ? ? ? ? s[0] -= ((s[1] << 4) + k[0]) ^ (s[1] + v) ^
          ? ? ? ? ? ? ? ? ((s[1] >> 5) + k[1]);
          ? ? ? ? v -= d;
          ? ? }
          }

          _____________________________________________________________________
          “超星圖書閱覽器” 是北京世紀超星信息技術發展公司的注冊商標
          <<< 全文結束

          posted on 2008-09-04 14:50 死神 閱讀(458) 評論(0)  編輯  收藏 所屬分類: 文件格式

          導航

          統計

          公告

          歡迎大家來到我的個人世界!

          常用鏈接

          留言簿(3)

          隨筆分類(5)

          隨筆檔案(9)

          文章分類(37)

          文章檔案(41)

          相冊

          語音技術

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 车险| 青川县| 安陆市| 达拉特旗| 新乡市| 扶绥县| 灵宝市| 莱阳市| 乌拉特前旗| 巨鹿县| 石林| 井研县| 佳木斯市| 定襄县| 西平县| 静乐县| 长顺县| 黑河市| 武定县| 秦皇岛市| 民权县| 赤水市| 朝阳市| 梧州市| 门源| 山阴县| 民权县| 新邵县| 玉溪市| 芦山县| 阳山县| 唐河县| 南平市| 桃江县| 政和县| 正蓝旗| 谢通门县| 黄平县| 广水市| 苏州市| 康乐县|