国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種分塊式的遠程更新方法

      文檔序號:6464086閱讀:132來源:國知局
      專利名稱:一種分塊式的遠程更新方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及軟件保護技術(shù),特別是一種分塊的遠程更新軟件保護裝置中 的功能模塊的方法。
      背景技術(shù)
      功能模塊軟件開發(fā)商中從軟件產(chǎn)品中提取出來的可以或者已經(jīng)放在軟 件保護設(shè)備中的供外部調(diào)用代碼,數(shù)據(jù)或者代碼和數(shù)據(jù)。
      功能模塊升級包用于升級軟件保護設(shè)備中的功能模塊的數(shù)據(jù)包。
      隨著經(jīng)濟技術(shù)的飛速發(fā)展,軟件作為輔助工具已經(jīng)深入到了各行各業(yè)當 中。軟件產(chǎn)品是軟件設(shè)計者和軟件編程人員智慧的結(jié)晶,軟件開發(fā)商的生存 和發(fā)展是軟件產(chǎn)品充足供應(yīng)的基礎(chǔ),因而,保護軟件產(chǎn)品的版權(quán),防止軟件 產(chǎn)品被盜版,具有很重要的現(xiàn)實意義。
      在軟件開發(fā)商已有的保護軟件產(chǎn)品的眾多策略中,多數(shù)采用了這樣一種 方式提煉出軟件產(chǎn)品中的核心算法或密鑰作為關(guān)鍵程序代碼,將所述關(guān)鍵 程序代碼及該程序代碼所需要的數(shù)據(jù)放在軟件保護設(shè)備中。作為軟件保護設(shè) 備的功能模塊,供外部軟件調(diào)用。釆用這種方式以后當用戶使用軟件產(chǎn)品時, 必須要有軟件保護設(shè)備同時運行,否則將無法使用該軟件產(chǎn)品。
      這種策略的優(yōu)勢是,軟件產(chǎn)品的關(guān)鍵代碼是放在軟件保護設(shè)備中的,破 解者很難得到軟件產(chǎn)品的關(guān)鍵程序代碼,也很難克隆軟件保護設(shè)備,也就很 難破解該軟件產(chǎn)品。當然所述的軟件保護設(shè)備的處理芯片是一個具有一定安 全認證等級的智能卡芯片才可以防止被硬克隆。正因為有這種優(yōu)勢,國內(nèi)外 越來越多的軟件開發(fā)商都采用了這種策略保護自己的軟件產(chǎn)品。
      但是,軟件開發(fā)商所生產(chǎn)的軟件產(chǎn)品需要不斷更新升級,因而對于使用 該軟件產(chǎn)品的用戶來說,也需要同步的更新與軟件產(chǎn)品配套的軟件保護設(shè)備 的功能模塊。
      為了降低成本,軟件開發(fā)商可以通過遠程升級技術(shù)升級軟件保護裝置內(nèi) 的功能模塊,但由于通訊數(shù)據(jù)量的限制,待升級內(nèi)容無法一次性的傳入到軟 件保護裝置中,需要分批傳入到軟件保護裝置中,并保存在軟件保護裝置中, 直到所有的數(shù)據(jù)都傳入后,才能確定待升級內(nèi)容是否完整和合法,然后才能 對功能模塊進行升級。這樣就需要額外的存儲區(qū)來存放傳入待升級的數(shù)據(jù)。

      發(fā)明內(nèi)容
      有鑒于此,本發(fā)明提供了一種分塊安裝或者更新軟件保護裝置中的功能 模塊的方法。
      根據(jù)本發(fā)明的一個方面,提供一種分塊式的遠程更新的方法,其特征在
      于,該方法包括步驟
      (1) 將待升級的功能模塊分塊;
      (2) 對分塊的升級數(shù)據(jù)塊進行處理后生成功能模塊升級包;
      (3) 軟件保護裝置使用所述升級包升級功能模塊。 根據(jù)本發(fā)明的一個方面,其特征還在于,在步驟(2)中,為每個升級
      數(shù)據(jù)塊設(shè)置控制信息。
      根據(jù)本發(fā)明的一個方面,其特征還在于,在步驟(2)中,為每個升級
      數(shù)據(jù)塊加密并計算校驗碼。
      根據(jù)本發(fā)明的一個方面,其特征還在于,將升級數(shù)據(jù)塊組合起來形成功 能模塊升級包。
      根據(jù)本發(fā)明的一個方面,其特征還在于,在步驟(3)中,軟件保護裝 置先將功能模塊設(shè)置成禁用狀態(tài)。
      根據(jù)本發(fā)明的一個方面,其特征還在于,軟件保護裝置接收升級數(shù)據(jù)塊。 根據(jù)本發(fā)明的一個方面,其特征還在于,軟件保護裝置驗證接收到的升級數(shù)據(jù)塊的校驗碼。
      根據(jù)本發(fā)明的一個方面,其特征還在于,如果校驗碼驗證通過,則為合
      法升級包;否則為非法的升級包,終止升級過程。
      .根據(jù)本發(fā)明的一個方面,其特征還在于,通過校驗碼驗證后,檢查升級 數(shù)據(jù)塊中的控制信息,判斷升級包有效或無效,如果是無效升級包則終止升 級過程。
      根據(jù)本發(fā)明的一個方面,其特征還在于,如果是有效升級包則升級功能 模塊中的對應(yīng)的數(shù)據(jù)。
      根據(jù)本發(fā)明的一個方面,其特征還在于,檢查當前的升級數(shù)據(jù)塊是否是 最后一個。
      根據(jù)本發(fā)明的一個方面,其特征還在于,如果是最后一個數(shù)據(jù)塊,則將 功能模塊設(shè)置為可用狀態(tài)。


      圖1,本發(fā)明的工作流程示意圖。
      圖2,本發(fā)明的一個實施例的升級數(shù)據(jù)塊結(jié)構(gòu)示意圖。
      圖3,本發(fā)明的一個實施例的工作流程示意圖
      具體實施例方式
      為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下參照附圖并舉 實施例,對本發(fā)明進行進一步詳細說明。
      圖1為本發(fā)明的工作流程圖,如圖1所示,本發(fā)明包含以下步驟
      開發(fā)商端生成升級包
      步驟IOI,將待升級功能模塊分塊。
      本步驟中,軟件開發(fā)商端根據(jù)實際需要將待升級的功能模塊的數(shù)據(jù)分塊。
      例如,可以根據(jù)軟件保護裝置中的功能模塊每次通訊能被升級的最大的 數(shù)據(jù)量來對數(shù)據(jù)分塊。
      步驟102,設(shè)置每個數(shù)據(jù)塊的控制信息。
      本步驟中,軟件開發(fā)商端為每個數(shù)據(jù)塊設(shè)置控制信息。
      所述的控制信息,包含有對該功能模塊升級包的適用范圍的描述、數(shù)據(jù) 塊標志和偏移地址。
      功能模塊升級包的適用范圍的描述可以是針對所有、一組或者單個軟件 保護設(shè)備的。如果是針對一組或者單個軟件保護裝置設(shè)備,控制信息中還需 要包含待升級的軟件保護設(shè)備的特征信息。
      所述的軟件保護設(shè)備特征信息可以是單個軟件保護設(shè)備的唯一標識,也 可以是一組軟件保護設(shè)備的唯一標識。單個軟件保護設(shè)備的唯一標識與軟件 保護設(shè)備是——對應(yīng)的,可以是軟件保護設(shè)備的硬件全球唯一序列號。 一組 軟件保護設(shè)備的唯一標識是指一組軟件保護設(shè)備共有的區(qū)別于不同組的軟 件保護設(shè)備的信息。
      軟件開發(fā)商獲取待升級的軟件保護設(shè)備特征信息的方法可以是軟件開 發(fā)商在出售軟件產(chǎn)品時記錄同時發(fā)售的軟件保護設(shè)備的軟件保護設(shè)備特征 信息,也可以是當用戶有升級軟件保護設(shè)備的需求時向軟件開發(fā)商提供的該 用戶所持有的軟件保護設(shè)備的軟件保護設(shè)備特征信息。
      數(shù)據(jù)塊標志用來指明該數(shù)據(jù)塊是否是最后一個數(shù)據(jù)塊。
      步驟103,加密數(shù)據(jù)塊并計算校驗碼。
      本步驟中,軟件開發(fā)商端對每個數(shù)據(jù)塊進行加密,并計算控制信息和數(shù) 據(jù)塊的校驗碼。再把控制信息和數(shù)據(jù)塊和校驗碼組合成生升級數(shù)據(jù)塊 加密使用的算法可以是對稱算法也可以是非對稱算法。 計算校驗碼使用的算法可以使HASH算法,HMAC算法,MAC算法或 者非對稱的數(shù)字簽名算法
      數(shù)據(jù)塊中的控制信息和校驗碼部分可以加密也可以不加密。
      計算校驗碼可以是對加密前的數(shù)據(jù)計算校驗碼,也可以是對加密后的數(shù)
      據(jù)計算校驗碼,但如果對加密后的數(shù)據(jù)計算校驗碼,使用的算法不能使
      HASH。
      例如可以先對^t據(jù)(可以包含或者不包含控制信息部分)力。密,然后
      計算控制信息和加密后的數(shù)據(jù)部分的校驗碼,此時校驗碼的計算算法必須使
      用需要密鑰參與密鑰的HMAC算法、MAC算法或者非對稱得數(shù)字簽名算法。 也可以先對控制信息和加密前的數(shù)據(jù)計算校驗碼,然后對數(shù)據(jù)(可以包含或 者不包含控制信息部分或者校驗碼部分)加密,此時計算校驗碼的算法可以 是不需要密鑰參與的HASH算法,也可以使用需要密鑰參與的HMAC算法、 MAC算法或者非對稱的數(shù)字簽名算法。
      步驟104,組合升級數(shù)據(jù)塊成為功能模塊升級包。
      本步驟中,軟件開發(fā)商端組合升級數(shù)據(jù)塊,成為功能模塊升級包。
      軟件保護裝置端使用升級包升級功能模塊
      步驟lll,設(shè)置功能模塊為禁用狀態(tài)。
      本步驟中,軟件保護裝置先將功能模塊設(shè)置成禁用狀態(tài)。
      步驟112,接收一個升級數(shù)據(jù)塊。
      本步驟中,軟件保護裝置接收一個升級數(shù)據(jù)塊。
      步驟113,驗證校驗碼并解密數(shù)據(jù)塊。
      本步驟中,軟件保護裝置驗證接收到的升級數(shù)據(jù)塊的校驗碼,并對加密
      的數(shù)據(jù)進行解密。如果校驗碼驗證通過,則為合法升級包,執(zhí)行步驟114,
      否則,為非法的升級包,終止升級過程。
      解密數(shù)據(jù)和驗證校驗碼的過程是和步驟103的順序相對應(yīng)的。 如果步驟103中校驗碼是針對加密后的數(shù)據(jù)計算的,那么驗證校驗的過
      程是針對解密前的數(shù)據(jù)的。如果步驟103中校驗碼是針對加密前的數(shù)據(jù)計算
      的。那么驗證校驗碼的過程也是針對解密后的數(shù)據(jù)。
      解密使用的算法也是和步驟103使用的加密算法相對應(yīng)的。 驗證校驗碼的算法和步驟103使用的計算校驗碼的算法也是相對應(yīng)的。 步驟U4,檢查控制信息中的參數(shù)。
      本步驟中,軟件保護裝置檢查升級數(shù)據(jù)塊中的控制信息中參數(shù)。確定升 級數(shù)據(jù)塊的有效性。
      軟件保護裝置檢查數(shù)據(jù)塊的控制信息中升級包的適用范圍。如果該升級
      包是針對全部的軟件保護裝置,則為有效的升級包,否則為無效升級包;如 果該升級包是針對一組軟件保護裝置,則檢查該軟件保護裝置的組唯一標識 是否和控制信息中的硬件特征信息一致,如果一致,則為有效的升級包,否 則為無效升級包;如果該升級包是針對單個軟件保護裝置,則檢查該軟件保 護裝置的唯一標識是否和控制信息中的硬件特征信息一致,如果一致則為有 效升級包,否則為無效升級包,如果是有效升級包則執(zhí)行步驟115,否則終 止升級過程。
      步驟115,升級功能模塊中的對應(yīng)位置的數(shù)據(jù)。
      本步驟中軟件保護裝置檢查功能模塊是否處于禁用狀態(tài),如果是則根據(jù) 控制信息中指定的偏移地址升級功能模塊相應(yīng)偏移地址的數(shù)據(jù)。否則,終止 升級過程。
      步驟116,檢查是否是最后一個數(shù)據(jù)塊。
      本步驟中,軟件保護裝置檢查是否接收到的升級數(shù)據(jù)塊是否是最后一 塊,如果是則執(zhí)行步驟117,否則返回步驟112
      步驟117,設(shè)置功能模塊為可用狀態(tài)。
      本步驟中,軟件保護裝置設(shè)置功能模塊為可用狀態(tài)。
      為了使升級過程更加安全,在上述的步驟102中,控制信息中還可以包 含數(shù)據(jù)塊的序號。步驟114中,加入對序號的檢查,這樣可以保證升級過程 的完整,防止有的數(shù)據(jù)塊被有意或者無意的丟棄;步驟102中,控制信息中 還可以加入升級包的唯一標識。步驟114中,加入對升級包的唯一標識的檢 查,對升級包的唯一標識的檢查過程如下,如果是第一個數(shù)據(jù)塊,保存升級 包的唯一標識,如果不是第一個數(shù)據(jù)塊,則檢查數(shù)據(jù)塊的升級包的唯一標識 是否和保存的升級包的唯一標識一致,如果一致為有效,否則為無效。這樣 可以保證升級過程數(shù)據(jù)塊的正確性,防止不同的升級包的數(shù)據(jù)塊被混合使
      用。
      上述步驟ill中的,設(shè)置功能模塊為禁用狀態(tài),也可以在接收到第一個 合法,有效的升級數(shù)據(jù)塊的時候完成,那么步驟111就可以省略。
      具體實施例
      本實施例中,使用TDES算法對數(shù)據(jù)進行加密,使用HMAC算法計算 校驗碼;升級包可以是針對所有軟件保護裝置或者單個軟件保護裝置,使用 軟件保護裝置的硬件序列號為硬件特征信息;采用對加密前的數(shù)據(jù)計算校驗 碼的方案;每個升級數(shù)據(jù)塊中帶有升級數(shù)據(jù)塊序號和升級包唯一標識。
      圖2為本實施例的升級數(shù)據(jù)塊結(jié)構(gòu)示意圖,如圖2所示
      升級數(shù)據(jù)塊包含了由升級包標識,數(shù)據(jù)塊序號,數(shù)據(jù)塊標志,適用范圍 描述,功能模塊標識和偏移地址構(gòu)成的控制信息,控制信息未加密,以明文 的方式存在。升級數(shù)據(jù)塊中的數(shù)據(jù)和校驗碼都被加密的,以密文的方式存在。
      圖3為本實施例的流程圖,如圖3所示,
      本實施例包括以下步驟
      軟件開發(fā)商端生成升級數(shù)據(jù)包
      步驟301,對待升級功能模塊分塊。
      本步驟中,軟件開發(fā)商端根據(jù)軟件保護設(shè)備的通訊數(shù)據(jù)量對待升級的功 能模塊的數(shù)據(jù)分塊。
      步驟302,設(shè)置每個數(shù)據(jù)塊的控制信息。 本步驟中,軟件開發(fā)商端為每個數(shù)據(jù)塊設(shè)置控制信息。 本實施例中,軟件開發(fā)商生成UUID作為功能模塊升級包的標識。數(shù)據(jù) 塊的序號以0為基準的遞增的排序。最后一個升級數(shù)據(jù)塊的數(shù)據(jù)塊標志為1, 其他的升級數(shù)據(jù)塊數(shù)據(jù)塊標志為0,針對單個軟件保護裝置的升級包的適用 范圍描述為8個字節(jié)的硬件序列號。針對所有的軟件保護裝置的升級包的適 用范圍描述為8個字節(jié)的0x00。功能模塊標識為功能模塊的ID,用于標識 同 一個軟件保護裝置中的不同的功能模塊。偏移地址為數(shù)據(jù)塊的長度乘數(shù)據(jù) 塊的序號值。
      步驟303,加密數(shù)據(jù)塊并計算校驗碼。
      本步驟中,軟件開發(fā)商端對每個數(shù)據(jù)塊進行加密,并計算控制信息和數(shù) 據(jù)塊的校驗碼。再把控制信息和數(shù)據(jù)塊和校驗碼組合成生升級數(shù)據(jù)塊
      本實施例中,軟件開發(fā)商端使用HMAC算法,對控制信息和加密前的 數(shù)據(jù)塊計算校驗碼。然后使用TDES算法對數(shù)據(jù)塊和校驗碼加密。
      HMAC算法和TDES算法使用的密鑰都是事前在軟件開發(fā)商端和軟件 保護裝置之間預先約定好的。
      步驟304,組合升級數(shù)據(jù)塊成為功能模塊升級包。
      本步驟中,軟件開發(fā)商端組合升級數(shù)據(jù)塊,成為功能模塊升級包
      軟件保護裝置端使用升級包升級功能模塊
      步驟3U,接收一個升級數(shù)據(jù)塊。
      本步驟中,軟件保護裝置接收一個升級數(shù)據(jù)塊。
      步驟312,驗證校驗碼并解密數(shù)據(jù)塊。
      本步驟中,軟件保護裝置驗證接收到的升級數(shù)據(jù)塊的校驗碼。并對加密 的數(shù)據(jù)進行解密。如果校驗碼驗證通過,則為合法升級包,執(zhí)行步驟114, 否則,為非法的升級包,終止升級過程。
      本實施例中,軟件保護裝置先使用TDES算法對數(shù)據(jù)塊和校驗碼解密, 然后使用HMAC算法驗證控制信息和數(shù)據(jù)塊的校驗碼,如果驗證通過,為 合法的升級數(shù)據(jù)塊,否則為非法的升級數(shù)據(jù)塊,終止升級過程。
      步驟313,檢查控制信息中的參數(shù)。
      本步驟中,軟件保護裝置檢查升級數(shù)據(jù)塊中的控制信息中參數(shù)。確定升 級數(shù)據(jù)塊的有效性。
      本實施例中,如果接收的升級數(shù)據(jù)塊的升級數(shù)據(jù)塊序號為0,則保存升 級包標識和升級數(shù)據(jù)塊序號。否則^f企查升級數(shù)據(jù)塊序號和升級數(shù)據(jù)塊中的升 級包標識,如果升級數(shù)據(jù)塊序號等于保存得升級數(shù)據(jù)塊序號加1,為有效升 級數(shù)據(jù),否則為無效升級數(shù)據(jù)塊,如果升級數(shù)據(jù)塊中的升級包標識和保存的 升級包標識一致,為有效的升級數(shù)據(jù)塊。否則為無效的升級數(shù)據(jù)塊;軟件保
      護裝置檢查適用范圍描述,如果是8個字節(jié)的0x00,則為有效升級數(shù)據(jù)塊, 如果不是8個字節(jié)的0x00,則判斷適用范圍描述是否合自身的硬件序列號 相同,如果相同則為有效升級數(shù)據(jù)塊;檢查是否存在功能模塊標識指定的功 能模塊,如果存在為有效的升級數(shù)據(jù)塊,否則為無效升級數(shù)據(jù)塊;如果是有 效的數(shù)據(jù)塊
      步驟314,檢查或者設(shè)置功能模塊的狀態(tài)。
      本步驟中,軟件保護裝置根據(jù)接收到的升級數(shù)據(jù)塊的控制信息檢查或者 設(shè)置功能模塊的狀態(tài)。
      本實施例中,軟件保護裝置檢查升級數(shù)據(jù)塊的升級數(shù)據(jù)塊序號,如果為 0,設(shè)置指定的功能模塊為禁用狀態(tài);如不是0則檢查功能狀態(tài)是否處于禁 用狀態(tài),如果處于禁用狀態(tài),執(zhí)行步驟315,否則終止升級過程。
      步驟315,升級功能模塊中的對應(yīng)位置的數(shù)據(jù)。
      本步驟中軟件保護裝置根據(jù)控制信息中指定的偏移地址升級功能模塊 相應(yīng)偏移地址的數(shù)據(jù)。
      步驟316,檢查是否是最后一個數(shù)據(jù)塊。
      本步驟中,軟件保護裝置檢查是否接收到的升級數(shù)據(jù)塊是否是最后一 塊,如果是則執(zhí)行步驟317,否則返回步驟311。
      本實施例中,軟件保護裝置檢查升級數(shù)據(jù)塊的升級數(shù)據(jù)塊標志,如果為 1,則為最后一個數(shù)據(jù)塊,否則認為還有后續(xù)的數(shù)據(jù)塊。
      步驟317,設(shè)置功能模塊為可用狀態(tài)。
      本步驟中,軟件保護裝置設(shè)置功能模塊為可用狀態(tài)。
      權(quán)利要求
      1、一種分塊式的遠程更新的方法,其特征在于,該方法包括步驟(1)將待升級的功能模塊分塊;(2)對分塊的升級數(shù)據(jù)塊進行處理后生成功能模塊升級包;(3)軟件保護裝置使用所述升級包升級功能模塊。
      2、 根據(jù)權(quán)利要求1的所述方法,其特征在于,在步驟(2)中,為每個 升級數(shù)據(jù)塊設(shè)置控制信息。
      3、 根據(jù)權(quán)利要求2的所述方法,其特征在于,在步驟(2)中,為每個 升級數(shù)據(jù)塊加密并計算校驗碼。
      4、 根據(jù)權(quán)利要求3的所述方法,其特征在于,將升級數(shù)據(jù)塊組合起來 形成功能模塊升級包。
      5、 根據(jù)權(quán)利要求1的所述方法,其特征在于,在步驟(3)中,軟件保 護裝置先將功能模塊設(shè)置成禁用狀態(tài)。
      6、 根據(jù)權(quán)利要求5的所述方法,其特征在于,軟件保護裝置接收升級 數(shù)據(jù)塊。
      7、 根據(jù)權(quán)利要求6的所述方法,其特征在于,軟件保護裝置驗證接收 到的升級數(shù)據(jù)塊的校驗碼。
      8、 根據(jù)權(quán)利要求7的所述方法,其特征在于,如果校驗碼驗證通過, 則為合法升級包;否則為非法的升級包,終止升級過程。
      9、 根據(jù)權(quán)利要求8的所述方法,其特征在于,通過校驗碼驗證后,檢 查升級數(shù)據(jù)塊中的控制信息,判斷升級包有效或無效,如果是無效升級包則終止升級過程。
      10、 根據(jù)權(quán)利要求9的所述方法,其特征在于,如果是有效升級包則升 級功能模塊中的對應(yīng)的數(shù)據(jù)。
      11、 根據(jù)權(quán)利要求10的所述方法,其特征在于,檢查當前的升級數(shù)據(jù) 塊是否是最后一個。
      12、 根據(jù)權(quán)利要求11的所述方法,其特征在于,如果是最后一個數(shù)據(jù) 塊,則將功能模塊設(shè)置為可用狀態(tài)。
      全文摘要
      本發(fā)明公開了一種軟件保護裝置中的功能模塊的升級方法,該方法包括軟件開發(fā)商端在生成升級包時,將待升級的功能模塊的數(shù)據(jù)分成多個數(shù)據(jù)塊,并為每個數(shù)據(jù)塊設(shè)置控制信息、計算校驗碼,并對需要加密的數(shù)據(jù)加密,然后組合這些數(shù)據(jù)塊,形成功能模塊升級包。軟件保護裝置在升級功能模塊時,也是分塊地對功能模塊進行升級,并通過驗證每個數(shù)據(jù)塊的校驗碼以確定每個數(shù)據(jù)塊的合法性,通過檢查數(shù)據(jù)塊中的控制信息來確定每個數(shù)據(jù)塊的有效性。
      文檔編號G06F21/22GK101344906SQ200810111950
      公開日2009年1月14日 申請日期2008年5月19日 優(yōu)先權(quán)日2008年5月19日
      發(fā)明者孫吉平, 勇 韓 申請人:北京深思洛克數(shù)據(jù)保護中心
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1