📄 drmpd.h
字号:
// UWORD32 mem342; // 2 WORD16 #0x240 可能没用
SHA_CONTEXT m_shadata; // 58 WORD16 #0x244
UWORD32 mem4[24]; // 48 WORD16 #0x2b8 to generate mackey
// WORD16 mem5[116]; // 116 WORD16 #0x318 好像没用
} CIPHER_CONTEXT; // 512 WORD16 - 116 WORD16
typedef struct tag_structX_unknown3
{
DRM_BYTE mem11; // 1 DRM_BYTE errorResult
// DRM_BYTE mem12; // 1 DRM_BYTE 可能没用
// WORD16 mem13; // 1 WORD16 可能没用
LIC_Data ld; // 32 WORD16 #0x4
DRM_BYTE *pbPMID; // 2 WORD16 #0x44
LENGTH_TYPE cbPMID; // 2 WORD16 #0x48
UWORD32 mem5; // 2 WORD16 #0x4c lic中无信息位数54
UWORD32 mem6; // 2 WORD16 #0x50 lic counter
UWORD32 mem7; // 2 WORD16 #0x54
UWORD32 mem8; // 2 WORD16 #0x58
UWORD32 mem9; // 2 WORD16 #0x5c
} structX_unknown3; // 48 WORD16
typedef struct tag_structX_unknown2
{
// WORD16 mem1[34]; // 34 WORD16 可能没用
structX_unknown3 mem2; // 48 WORD16
} structX_unknown2; // 82 WORD16
typedef struct tag_struct_DRM_state
{
DRM_BYTE m_DecryptInited; // 1 DRM_BYTE
// DRM_BYTE mem12; // 1 DRM_BYTE 可能没用
// WORD16 mem13; // 1 WORD16 可能没用
CIPHER_CONTEXT mem2; // 512 WORD16 #0x4
structX_unknown2 mem3; // 82 WORD16 #0x404
// DRM_BYTE* mem4; // 2 WORD16 #0x4a8
} struct_DRM_state;
typedef struct tag_PMLICENSE
{
UWORD32 mem1; // 2 WORD16
UWORD32 mem2; // 2 WORD16
LIC_Data ld; // 32 WORD16
} PMLICENSE; // 36 WORD16
//typedef struct tagLD
//{
// DRM_BYTE KID[32];
// DRM_BYTE member1[9];
// DRM_BYTE rights[4];
// DRM_BYTE appSec[4];
// DRM_BYTE expiryDate[4];
// DRM_BYTE member2[11];
//} LD;
//
//typedef struct tagPMLICENSE
//{
// DRM_BYTE member1[8];
// LD ld;
//} PMLICENSE;
/*
* FUNCTIONS
*/
#if SIXTEEN_BIT_ADDRESSING
void F(DRM_DWORD* pl, DRM_DWORD* pr, COUNT_TYPE S, DRM_DWORD* pwork,
DRM_DWORD* pzork, DRM_DWORD* pTable);
UWORD32 rotate_left(UWORD32 a, UWORD16 n);
extern void ZSP_swapWORD(UWORD16 *pdata, LENGTH_TYPE len);
void memcpyDWORD(UWORD32* pto, UWORD32* pfrom, LENGTH_TYPE len);
LENGTH_TYPE ZSP_DRM_strlen(DRM_BYTE *string);
UWORD16 ZSP_DRM_memcmp(DRM_BYTE* p1, DRM_BYTE* p2, LENGTH_TYPE len);
void ZSP_DRM_memcpy(DRM_BYTE* pto, DRM_BYTE* pfrom, LENGTH_TYPE len);
void DRM_BYT_CopyBytes(
OUT void *f_pbTo,
IN COUNT_TYPE f_ibTo,
IN const void *f_pbFrom,
IN COUNT_TYPE f_ibFrom,
IN LENGTH_TYPE f_cb );
DRM_BYTE DRM_16B_Read8BitByte(
IN const void *f_pv,
IN COUNT_TYPE f_ib);
void DRM_16B_Write8BitByte(
OUT void *f_pv,
IN COUNT_TYPE f_ib,
IN DRM_BYTE f_mb);
#endif
//// drmpd
DRM_RESULT CDrmPD_Init__(void* pDRM_state);
DRM_RESULT CDrmPD_InitDecrypt__( void* pDRM_state,
PMLICENSE* pmlic,
DRM_BYTE* pPMID,
LENGTH_TYPE cbPMID,
DRM_BYTE* pLicData,
UWORD32* pOffset,
UWORD32* pActual);
DRM_RESULT CDrmPD_Decrypt__ (/*void* pDRM_state, */DRM_BYTE* pbBuffer, LENGTH_TYPE cbBuffer);
DRM_RESULT CDrmPD_InitPacket__(void* pDRM_state, DRM_BYTE* pLast15, UWORD16 cbPayloadSize);
//// pdlicstr
//void SetSecret_1of7__(struct_DRM_state* pin);
//DRM_RESULT SetSecret_2of7__(struct_DRM_state* pin);
//DRM_RESULT SetSecret_3of7__(struct_DRM_state* pin);
//DRM_RESULT SetSecret_4of7__(struct_DRM_state* pin);
//DRM_RESULT SetSecret_5of7__(struct_DRM_state* pin);
//DRM_RESULT SetSecret_6of7__(struct_DRM_state* pin);
//DRM_RESULT SetSecret_7of7__(struct_DRM_state* pin);
UWORD32 hash__(DRM_BYTE* pin);
DRM_RESULT CPDLicStore_Init__(structX_unknown3* pin);
DRM_RESULT MatchLicense__(LIC_Data* pld,
DRM_BYTE* pLicData);
DRM_RESULT PMIDToPMKey__(struct_DRM_state* pDRMState,
// UWORD32 temp1,
UWORD16 temp,
SHA_CONTEXT* pContextSHA,
DRM_BYTE* pPMID,
LENGTH_TYPE cbPMID,
DRM_BYTE* pLicData,
DRM_BYTE* pbPMKey,
LENGTH_TYPE cbPMKey);
void FlipBits__(DRM_BYTE* pbIn, LENGTH_TYPE cbIn);
DRM_RESULT PMContentKeyToContentKey__(struct_DRM_state* pDRMState,
DRM_BYTE* pbPMKey,
LENGTH_TYPE cbKey,
DRM_BYTE* pbKey);
DRM_RESULT CPDLicStore_Lookup__(
structX_unknown3* pin,
struct_DRM_state* pDRMState,
DRM_BYTE* pPMID,
LENGTH_TYPE cbPMID,
LIC_Data* pld,
PMLICENSE* pmlic,
DRM_BYTE* pLicData,
UWORD32* pOffset,
UWORD32* pActual,
DRM_BYTE* pbKey);
//// dess
void desSkey__(
IN OUT DESTable *pTable,
IN OUT DRM_BYTE *p,
IN DRM_UINT c );
void desSkey_LS__(struct_DRM_state* pDRMState,
DESTable* pdestable,
DRM_BYTE* pbKey,
LENGTH_TYPE cbKey);
void desS__(
DRM_BYTE* rgbOut,//8byte
DRM_BYTE* p,//可能为8byte
DESTable* pTable,
DRM_INT op );
//// xsum
DRM_RESULT checksum2__(struct_DRM_state* pDRMState,
DRM_BYTE* pbPMKey,
LENGTH_TYPE cbPMKey,
DRM_BYTE* pLicData,
LENGTH_TYPE licDataLen, // 实际上固定为64
DRM_BYTE* pbCheckSum);
//// so1
//DRM_BYTE SO1_GetB0__(void);
//DRM_BYTE SO1_GetB1__(void);
//DRM_BYTE SO1_GetB2__(void);
//DRM_BYTE SO1_GetB3__(void);
//DRM_BYTE SO1_GetB4__(void);
//// so2
//UWORD32 SO2_BiggerAction__(UWORD32* pin);
//UWORD32 SO2_Action__(UWORD32 in);
//// so3
//COUNT_TYPE SO3_CheapRec__(COUNT_TYPE in);
//COUNT_TYPE SO3_ErsatzRec__(COUNT_TYPE in);
//// so4
//DRM_BYTE SO4_Random__(UWORD32* pin);
//UWORD16 SO4_scp_rand__(UWORD32* pin);
//// soalter
//void SOAlter_Init__(DRM_BYTE* pin);
//void SOAlter_Init2__(DRM_BYTE* pin, DRM_BYTE a1, DRM_BYTE a2);
//DRM_BYTE SOAlter_Alter__(DRM_BYTE* pin, DRM_BYTE a1);
//// sobuf
//void SOBuf_Init__(DRM_BYTE** ppin);
//DRM_RESULT SOBuf_SetByte__(DRM_BYTE** ppin, COUNT_TYPE index, DRM_BYTE val);
//DRM_RESULT SOBuf_GetByte__(DRM_BYTE** ppin, COUNT_TYPE index, DRM_BYTE* out);
///// blackbox
//void DRMInit__(CIPHER_CONTEXT* pin);
DRM_RESULT DRMDecrypt__(CIPHER_CONTEXT* pin, LENGTH_TYPE cbBuffer, DRM_BYTE* pbBuffer);
DRM_RESULT DRMInitPacket__(CIPHER_CONTEXT* pin, UWORD16 cbPayloadSize, DRM_BYTE* pLast15);
UWORD32 AllignedDWORD__(DRM_BYTE* pin);
DRM_RESULT DRMKeySetup__(CIPHER_CONTEXT* pContext, DRM_BYTE cbData, DRM_BYTE* pbData);
//// cbc64ws4
void CBC64WS4_asm__(UWORD32 *pbData,
LENGTH_TYPE cBlocks,
UWORD32 rgdwKeys[2],
DRM_CBCKey *pCBCKey);
//void egcd__(UWORD64 a, UWORD64 b, UWORD64* p1, UWORD64* p2, UWORD64* p3);
void CBC64Init__( DRM_CBCKey *cbckey, DRM_CBCState *cbcstate, UWORD32 *pKey );
void CBC64InvKey__( DRM_CBCKey *cbckey, DRM_CBCKey *cbcInvKey );
void CBC64Update__(
IN DRM_CBCKey *key,
IN OUT DRM_CBCState *cbcstate,
IN LENGTH_TYPE cbData,
IN DRM_BYTE *pbData );
UWORD32 CBC64Finalize__( DRM_CBCKey *key, DRM_CBCState *cbcstate, UWORD32 *pKey2 );
UWORD32 inv32__( UWORD32 n );
UWORD32 CBC64Invert__( DRM_CBCKey *key, DRM_CBCKey *ikey,
UWORD32 MacA1, UWORD32 MacA2,
UWORD32 MacB1, UWORD32 MacB2, UWORD32 *pInvKey2 );
void CBC64InitState__( DRM_CBCState *cbcstate );
//// desport
void des__(
DRM_BYTE rgbOut[__CB_DECL(DES_BLOCKLEN)],
const DRM_BYTE rgbIn [__CB_DECL(DES_BLOCKLEN)],
DESTable *pTable,
DRM_INT op );
//// deskey
void deskey__(
OUT DESTable *pTable,
IN const DRM_BYTE rgbKey[__CB_DECL(DES_KEYSIZE)] );
//// msrc4
extern void rc4__(
IN OUT RC4_KEYSTRUCT *pKS,
IN LENGTH_TYPE cbBuffer,
IN OUT DRM_BYTE *pbBuffer );
void rc4_key__(
OUT RC4_KEYSTRUCT *pKS,
IN LENGTH_TYPE cbKey,
IN const DRM_BYTE *pbKey );
//// sha
void A_SHAInit__(
IN OUT SHA_CONTEXT* pShaContext );
void A_SHAUpdate__(
IN OUT SHA_CONTEXT *pShaContext,
IN const DRM_BYTE *pbData,
IN LENGTH_TYPE cbData );
void SHA_UpdateOffset__(
IN const DRM_BYTE *pbData,
IN COUNT_TYPE ibData,
IN LENGTH_TYPE cbData,
IN OUT SHA_CONTEXT *pShaContext );
static void SHATransform__(
IN DRM_DWORD ABCDE[5],
IN const DRM_BYTE bInput[__CB_DECL(SHA_BLOCK_SIZE)] );
static void _GetDRMDWORD(
OUT UWORD32 *dwTo,
IN LENGTH_TYPE dwCount,
IN const DRM_BYTE *bIn );
void _PackDRMDWORD(
IN const DRM_DWORD *dwFrom,
IN LENGTH_TYPE dwCount,
OUT DRM_BYTE *bOut);
static WORD32 _ft(WORD32 b, WORD32 c, WORD32 d, COUNT_TYPE t);
static UWORD32 _K(COUNT_TYPE t);
void A_SHAFinal__(
IN SHA_CONTEXT *pShaContext,
OUT DRM_BYTE rgbDigest[__CB_DECL(SHA_DIGEST_LEN)] );
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -