PlayReady Encrypt XAP 解密討論

目前WP7市場上的絕大部分XAP都被MS進行了加密,經過分析,這個加密方式採用了AES方式進行了加密,本人經過對新的XAP格式(PRE)進行了分析,發現新的格式裏,實際上是對之前PK(ZIP格式)的XAP進行了加密然後封裝:

 

typedef struct {
  DWORD HDR; // 0x07455250 : PRE & 0x7

  DWORD a1; // always 0x1
  DWORD HDRLength; // PRE Header Length
  DWORD XMLOffSet; // PlayReady Header XML offset
  DWORD XMLLength; // PlayReady Header XML length
  DWORD EXapOffSet; // encrypt xap offset
  DWORD EXapLength; // encrypt xap length
  DWORD DXapLength; // decrypt xap length
} PREHeader;

 

上面便是PRE格式的XAP的封裝頭部的格式,PRE Header + XML Data + Encrypt XAP Data,XML Data實際上就是一個PlayReady的XML,Encrypt XAP Data即一個AES加密後的PK封裝的XAP。

 

經過2天的反編譯,已經本人已經完成了Decrypt XAP的代碼的反編譯工作,並已經整理出了完整的C代碼,但是在反編譯獲取生成AES解密的Key的時候遇到了障礙(跟不到生成Key的需要的兩個素材的賦值代碼),通過PRE封裝和代碼分析,猜測這兩個Key的素材是通過PlayReady服務器聯網獲取的,而獲取的關鍵在於這個XML。

 

F:\Documents\Visual Studio 2008\Projects\DecXAP\Debug>DecXAP.exe e12f4f27-7cd1-4
33f-8075-071adbea2448 e12f4f27-7cd1-433f-8075-071adbea2448.xap
==============================
PRE Information:
XML offset: 0x20
XML length: 0x2FA
EncryptXap offset: 0x31A
EncryptXap length: 0x3DBC00
DecryptXap length: 0x3DBBFB
==============================
Decrypt Data failed: Key not match!

 

實際上,之前這個PlayReady XML是封裝在PK格式的XAP中的WMAppPRHeader.xml,但是這次PRE封裝單獨將這個XML以明文方式封裝在了包的第二段數據裏,有99%的機率是要通過這個XML獲取解密XAP的Key用的。

 

說了這麼多廢話,實際上現在還是沒辦法對PRE封裝的XAP進行解密,欠缺的是Key(2個Key),如果哪位對ARM反編譯有一定基礎並有興趣的朋友可以聯繫本人,或是如果哪位對MS的PlayReady有一定了解的還望不吝賜教,下面貼出一個軟件的PRE的XML希望有高手能提點一下本人:

 

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">

  <DATA>

    <PROTECTINFO>

      <KEYLEN>16</KEYLEN>

      <ALGID>AESCTR</ALGID>

    </PROTECTINFO>

    <KID>OM23zpJvGEC1iqbCLSHe2A==</KID>

    <LA_URL>http://microsoft.com/</LA_URL>

    <CUSTOMATTRIBUTES xmlns="">

      <S>qxRtHmhndDVF4RK9wDplqw==</S>

      <KGV>0</KGV>

    </CUSTOMATTRIBUTES>

    <CHECKSUM>DWxPIPfuAU4=</CHECKSUM>

  </DATA>

</WRMHEADER>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章