首页
社区
课程
招聘
[原创]某DRM解密流程简单分析
2015-1-20 14:39 55517

[原创]某DRM解密流程简单分析

2015-1-20 14:39
55517
环境及工具
手机        :小米手机 MI 2A
系统版本: Android 4.1.1
工具        : IDA pro 6.6 、C32Asm 、VS2005
  帮朋友写了一个解密DRM视频的小软件,我把分析该播放器的调试步骤记录下来与大家一起学习,高手莫要见笑,仅供小菜玩乐,有不对或不足的地方还请多多指教,不胜感激!
一:第一次打开加密视频会出现如下验证:

输入用户名与密码登录成功后如下图

点击“支付并获取许可证”成功后就可以播放加密的视频了,并在安装包目录下生成了两个重要的文件,indiv3.key与V3.lic。
二:加密后视频大致结构如下:

1.        加密视频头中有加密标志,密钥等信息。
2.        32字节检验码是判断视频是否有被篡改。
3.        WMA文件的头16个字节是固定的,为十六进制的“30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C”,用来标识这个是否为WMA文件。
4.        接下来的8个字节为一个整数,表示整个WMA文件头部的大小,(定位到加密数时会用到)。
三:动态调试播放器分析解密流程,分为如下步骤。
通过反编译分析APK包发现主要逻辑是在.so中实现的,所以我们主要是调试分析.so。
第1步:运行播放器,调试器附加上,对如下函数时行下断点:
open_stream
demux_open
av_base64_decode
av_sha_init
av_rc4_init
av_aes_init

第2步:F9运行,打开一个加密的视频程序,断在open_stream函数,打开成功后接着来到demux_open函数,这一步中主要是做打开并读取加密视频头0x800字节并判断是否有"XDRM" "SIGN"标志。
libmplayer.so:5EB594C4
libmplayer.so:5EB594C4 loc_5EB594C4                            ; CODE XREF: sub_5EB5922C+93Cj
libmplayer.so:5EB594C4 LDR             LR, =(aHarrydebug6666 - 0x5EB594D8)
libmplayer.so:5EB594C8 MOV             R0, #1
libmplayer.so:5EB594CC MOV             R1, #0
libmplayer.so:5EB594D0 ADD             R2, PC, LR              ; "harrydebug6666.\n"
libmplayer.so:5EB594D4 BL              mp_msg
libmplayer.so:5EB594D8 LDRB            R2, [SP,#0xDF0+var_D10]
libmplayer.so:5EB594DC CMP             R2, #'X'                ; 判断是否有XDRM头标志
libmplayer.so:5EB594E0 BEQ             loc_5EB5995C
libmplayer.so:5EB5995C loc_5EB5995C                            ; CODE XREF: sub_5EB5922C+2B4j
libmplayer.so:5EB5995C LDRB            R0, [SP,#0xDF0+var_D0F]
libmplayer.so:5EB59960 CMP             R0, #'D'
libmplayer.so:5EB59964 BNE             loc_5EB594E4
libmplayer.so:5EB59968 LDRB            R3, [SP,#0xDF0+var_D0E]
libmplayer.so:5EB5996C CMP             R3, #'R'
libmplayer.so:5EB59970 BNE             loc_5EB594E4
libmplayer.so:5EB59974 LDRB            R1, [SP,#0xDF0+var_D0D]
libmplayer.so:5EB59978 CMP             R1, #'M'
libmplayer.so:5EB5997C BNE             loc_5EB594E4


第3步:解码加密视频头文件中的base64字符(yJ3pPh4RItrcgckEtqjS+Q==)
libmplayer.so:5EB5A704 STRB            R6, [R4],#1
libmplayer.so:5EB5A708 BL              av_base64_decode        ; 解码yJ3pPh4RItrcgckEtqjS+Q==


解码后为:
C8 9D E9 3E 1E 11 22 DA  DC 81 C9 04 B6 A8 D2 F9

第4步:rc4解密“第3步“得到的值。
密钥为固定的一个字符串: Tiasfy!!
解密前:
C8 9D E9 3E 1E 11 22 DA  DC 81 C9 04 B6 A8 D2 F9

解密后:
65 35 30 65 66 63 65 31  33 36 63 35 34 31 38 38(字符形式e50efce136c54188)

第5步:拷贝加密视频中的加密头下面32字节sha1值,后面做检验用。
39 34 53 B6 DE B8 AF B9  D7 2B 14 25 85 1C B9 D2
D2 79 B3 B2 28 B7 BA 82  F0 49 07 9E 71 6A 5E BF


第6步:打开并读取/data/data/com.huplayer.neon/files/V3.lic文件。
libmplayer.so:5EB5ABB0 ADD             R1, PC, R4 ; unk_5F591AD4
libmplayer.so:5EB5ABB4 BL              fopen ;打开/data/data/com.huplayer.neon/files/V3.lic
libmplayer.so:5EB5ABB8 SUBS            R5, R0, #0
libmplayer.so:5EB5ABBC BEQ             loc_5EB5BE04
libmplayer.so:5EB5ABC0 LDR             R4, =(aHarrydebug805_ - 0x5EB5ABD8)
libmplayer.so:5EB5ABC4 MOV             R0, R8
libmplayer.so:5EB5ABC8 BL              free
libmplayer.so:5EB5ABCC MOV             R0, #1
libmplayer.so:5EB5ABD0 ADD             R2, PC, R4              ; "harrydebug805.\n"
libmplayer.so:5EB5ABD4 MOV             R1, R6
libmplayer.so:5EB5ABD8 BL              mp_msg
libmplayer.so:5EB5ABDC MOV             R1, R6
libmplayer.so:5EB5ABE0 MOV             R2, #2
libmplayer.so:5EB5ABE4 MOV             R0, R5
libmplayer.so:5EB5ABE8 BL              fseek
libmplayer.so:5EB5ABEC MOV             R0, R5
libmplayer.so:5EB5ABF0 BL              ftell
libmplayer.so:5EB5ABF4 LDR             R7, =(aHarrydebug807_ - 0x5EB5AC5C)
libmplayer.so:5EB5ABF8 STR             R0, [SP,#0xDF0+var_D20]
libmplayer.so:5EB5ABFC BL              malloc
libmplayer.so:5EB5AC00 LDR             R12, =(aHarrydebug806_ - 0x5EB5AC10)
libmplayer.so:5EB5AC04 MOV             R1, R6
libmplayer.so:5EB5AC08 ADD             R2, PC, R12             ; "harrydebug806.\n"
libmplayer.so:5EB5AC0C STR             R0, [SP,#0xDF0+var_D84]
libmplayer.so:5EB5AC10 MOV             R0, #1
libmplayer.so:5EB5AC14 BL              mp_msg
libmplayer.so:5EB5AC18 MOV             R1, R6
libmplayer.so:5EB5AC1C LDR             R2, [SP,#0xDF0+var_D20]
libmplayer.so:5EB5AC20 LDR             R0, [SP,#0xDF0+var_D84]
libmplayer.so:5EB5AC24 BL              memset_0
libmplayer.so:5EB5AC28 MOV             R0, R5
libmplayer.so:5EB5AC2C MOV             R1, R6
libmplayer.so:5EB5AC30 MOV             R2, R6
libmplayer.so:5EB5AC34 BL              fseek
libmplayer.so:5EB5AC38 MOV             R3, R5
libmplayer.so:5EB5AC3C MOV             R1, #1
libmplayer.so:5EB5AC40 LDR             R2, [SP,#0xDF0+var_D20]
libmplayer.so:5EB5AC44 LDR             R0, [SP,#0xDF0+var_D84]
libmplayer.so:5EB5AC48 BL              fread
libmplayer.so:5EB5AC4C MOV             R0, R5
libmplayer.so:5EB5AC50 BL              fclose
libmplayer.so:5EB5AC54 ADD             R2, PC, R7              ; "harrydebug807.


第7步:获取加密视频头文件中的两个base64码并在V3.lic查找是否存在。
<KID>yJ3pPh4RItrcgckEtqjS+Q==</KID>与<CID>nZjpa0hCd9vfh5oAt6nf9A==</CID>
libmplayer.so:5EB5ACDC ADD             R1, PC, R1 ; unk_5F5AAFA4
libmplayer.so:5EB5ACE0 BL              sprintf
libmplayer.so:5EB5ACE4 MOV             R1, R4
libmplayer.so:5EB5ACE8 LDR             R0, [SP,#0xDF0+var_D84]
libmplayer.so:5EB5ACEC BL              strstr                  ; 查找<KID>yJ3pPh4RItrcgckEtqjS+Q==</KID>
libmplayer.so:5EB5ACF0 LDR             R2, =(aHarrydebug808_ - 0x5EB5AD00)
libmplayer.so:5EB5ACF4 MOV             R1, R6
libmplayer.so:5EB5ACF8 ADD             R2, PC, R2              ; "harrydebug808.\n"
libmplayer.so:5EB5ACFC STR             R0, [SP,#0xDF0+var_D1C]
libmplayer.so:5EB5AD00 MOV             R0, #1
libmplayer.so:5EB5AD04 BL              mp_msg
libmplayer.so:5EB5AD08 MOV             R1, R5
libmplayer.so:5EB5AD0C LDR             R0, [SP,#0xDF0+var_D84]
libmplayer.so:5EB5AD10 BL              strstr                  ; 查找<CID>nZjpa0hCd9vfh5oAt6nf9A==</CID>
libmplayer.so:5EB5AD14 MOV             R7, R0
libmplayer.so:5EB5AD18 MOV             R0, R4
libmplayer.so:5EB5AD1C LDR             R4, =(aHarrydebug809_ - 0x5EB5AD38)
libmplayer.so:5EB5AD20 BL              free
libmplayer.so:5EB5AD24 MOV             R0, R5
libmplayer.so:5EB5AD28 BL              free


第8步:继续查找V3.lic中的<CONTENT>与</CONTENT>并获得<CONTENT>与</CONTENT>中间的base64字符。
在V3.lic获得的base64字符如下:
2F 6F 52 32 5A 42 56 43  66 78 69 72 74 6F 41 4B  /oR2ZBVCfxirtoAK
30 75 5A 38 78 36 4B 34  76 5A 32 6E 37 47 57 4D  0uZ8x6K4vZ2n7GWM
77 68 70 57 65 75 61 31  31 4B 65 4D 6C 62 62 79  whpWeua11KeMlbby
55 61 50 6A 4C 76 39 7A  5A 35 7A 48 67 35 57 55  UaPjLv9zZ5zHg5WU
59 48 46 46 45 75 4D 78  72 51 79 64 49 74 58 47  YHFFEuMxrQydItXG
33 53 7A 52 73 43 45 6E  62 61 30 79 47 4B 51 48  3SzRsCEnba0yGKQH
4D 71 36 50 6D 6A 36 6E  2B 49 75 56 7A 45 58 63  Mq6Pmj6n+IuVzEXc
45 37 38 76 32 6D 67 7A  71 6D 71 79 59 39 38 75  E78v2mgzqmqyY98u
6C 69 7A 73 73 53 67 51  30 4A 37 74 4C 4A 36 4C  lizssSgQ0J7tLJ6L
6E 53 61 73 54 4F 36 48  62 41 72 6D 69 4A 41 57  nSasTO6HbArmiJAW
6F 79 56 59 43 2F 4C 6C  63 75 6D 68 73 4D 30 2F  oyVYC/LlcumhsM0/
37 4F 48 32 79 2B 41 57  5A 62 66 76 66 45 43 53  7OH2y+AWZbfvfECS
37 62 31 34 6A 4E 36 58  6D 78 56 66 65 68 58 44  7b14jN6XmxVfehXD
68 67 52 6F 77 41 44 43  74 54 46 6B 42 6A 32 51  hgRowADCtTFkBj2Q
67 76 37 71 43 6C 46 7A  6B 34 71 4C 6C 72 77 38  gv7qClFzk4qLlrw8
37 52 46 55 2F 6E 74 30  39 31 79 5A 50 49 78 61  7RFU/nt091yZPIxa
64 64 42 4E 62 2F 6B 4C  69 4B 79 51 5A 2B 50 35  ddBNb/kLiKyQZ+P5
74 77 64 78 64 70 47 46  4C 4C 77 54 73 46 35 59  twdxdpGFLLwTsF5Y
4B 58 63 39 51 73 71 45  35 62 75 52 35 51 39 71  KXc9QsqE5buR5Q9q
69 5A 55 6B 69 68 31 30  34 6B 2B 30 39 33 7A 59  iZUkih104k+093zY
30 32 65 6B 41 77 72 6C  6A 6D 32 64 54 30 38 61  02ekAwrljm2dT08a
43 48 47 54 31 78 35 72  76 34 74 6D 50 4C 77 6D  CHGT1x5rv4tmPLwm
65 4B 38 75 56 43 75 75  6C 72 56 4D 57 45 4E 68  eK8uVCuulrVMWENh
39 75 4F 6F 62 63 75 41  2F 6C 73 67 47 53 48 30  9uOobcuA/lsgGSH0
58 42 78 58 4E 6C 35 72  31 79 52 44 71 79 4E 49  XBxXNl5r1yRDqyNI
38 78 51 37 6C 57 32 6A  79 35 2B 54 5A 32 66 36  8xQ7lW2jy5+TZ2f6
32 52 6E 6B 67 52 43 72  37 41 75 43 78 70 75 63  2RnkgRCr7AuCxpuc
58 75 5A 6D 6C 39 33 74  6A 55 4A 62 4C 76 48 63  XuZml93tjUJbLvHc
35 45 73 78 6B 5A 30 6B  4A 79 2B 6F 5A 69 35 6F  5EsxkZ0kJy+oZi5o
33 2B 53 6D 77 69 38 47  2F 6D 6C 55 6D 51 56 70  3+Smwi8G/mlUmQVp
46 35 76 2F 57 56 71 59  56 47 33 69 76 75 51 4E  F5v/WVqYVG3ivuQN
52 41 71 70 57 4C 63 74  6B 68 53 36 31 54 65 79  RAqpWLctkhS61Tey
42 6C 38 33 50 50 74 62  68 2F 74 33 32 50 5A 73  Bl83PPtbh/t32PZs
54 47 6F 75 35 6A 63 6A  6F 6B 54 2B 43 4A 65 52  TGou5jcjokT+CJeR
50 38 4C 2F 70 51 6A 57  36 46 42 44 31 6B 33 6E  P8L/pQjW6FBD1k3n
56 39 43 38 45 36 53 4E  43 33 38 6D 45 4D 65 4E  V9C8E6SNC38mEMeN
41 4A 52 55 72 4B 4F 5A  53 77 63 38 77 45 6A 38  AJRUrKOZSwc8wEj8
56 48 4A 44 46 66 47 54  57 48 48 54 6F 2F 47 41  VHJDFfGTWHHTo/GA
5A 68 73 76 35 2F 31 42  71 51 36 51 7A 68 4C 79  Zhsv5/1BqQ6QzhLy
6B 56 72 68 33 76 54 37  4F 45 59 36 30 47 4B 75  kVrh3vT7OEY60GKu
54 41 64 71 6A 38 71 49  75 62 72 39 4A 4E 35 71  TAdqj8qIubr9JN5q
64 4E 73 34 4E 37 44 67  41 34 66 39 4C 49 55 4E  dNs4N7DgA4f9LIUN
6E 54 36 74 59 66 37 71  44 69 41 7A 36 66 53 45  nT6tYf7qDiAz6fSE
50 74 65 44 62 78 35 75  34 50 72 66 66 63 67 75  PteDbx5u4Prffcgu
71 68 72 4C 4D 4F 4C 4D  61 6F 76 56 63 65 7A 48  qhrLMOLMaovVcezH
67 32 4F 73 30 67 6C 61  55 37 53 44 77 37 48 69  g2Os0glaU7SDw7Hi
66 73 6E 46 44 74 48 52  6B 2B 44 46 2B 6E 79 6F  fsnFDtHRk+DF+nyo
54 6A 43 51 51 2B 4E 74  43 2B 6F 56 36 36 49 5A  TjCQQ+NtC+oV66IZ
43 4B 72 42 39 7A 6F 35  37 54 73 6D 37 4C 4A 41  CKrB9zo57Tsm7LJA
4B 38 56 75 63 4B 7A 36  31 35 6E 4C 79 36 6B 5A  K8VucKz615nLy6kZ
6D 65 69 4E 64 42 4F 37  4F 52 50 66 56 33 70 58  meiNdBO7ORPfV3pX
4A 6F 4E 39 47 73 69 50  72 54 36 67 4F 30 6E 6C  JoN9GsiPrT6gO0nl
50 56 35 70 63 59 39 55  33 62 6A 63 39 64 79 75  PV5pcY9U3bjc9dyu
53 37 4E 7A 58 31 48 42  38 38 38 42 37 53 55 36  S7NzX1HB888B7SU6
38 70 56 47 36 6B 45 34  37 41 2B 53 79 65 46 64  8pVG6kE47A+SyeFd
4E 38 30 4C 33 31 38 6E  55 71 41 4A 6F 77 47 44  N80L318nUqAJowGD
4C 4A 46 6A 5A 6F 51 41  77 39 6C 31 53 45 2B 57  LJFjZoQAw9l1SE+W
75 6F 37 5A 4A 6E 50 30  4A 54 4C 6D 2B 68 75 51  uo7ZJnP0JTLm+huQ
4D 4B 59 4C 63 6F 56 56  6B 32 41 47 39 2F 4E 5A  MKYLcoVVk2AG9/NZ
51 4C 42 48 54 57 6F 63  55 79 41 32 67 45 43 73  QLBHTWocUyA2gECs
38 30 63 6E 62 38 34 30  38 41 53 34 56 4E 57 4A  80cnb8408AS4VNWJ
6C 6D 34 79 68 31 62 72  4A 34 35 62 37 64 53 4E  lm4yh1brJ45b7dSN
51 42 33 2F 68 67 48 45  47 64 43 71 71 6A 30 4A  QB3/hgHEGdCqqj0J
58 6B 48 67 64 7A 63 72  6B 39 4F 77 6C 44 58 53  XkHgdzcrk9OwlDXS
70 31 38 35 64 68 75 79  50 68 44 7A 61 6F 63 4B  p185dhuyPhDzaocK
41 5A 4C 72 75 6C 62 34  36 74 69 51 32 49 69 36  AZLrulb46tiQ2Ii6
53 33 70 32 6E 50 39 55  59 52 37 53 34 76 6E 36  S3p2nP9UYR7S4vn6
57 5A 2F 7A 36 71 6E 55  41 53 34 30 45 66 33 67  WZ/z6qnUAS40Ef3g
4F 56 61 44 77 43 5A 64  57 43 32 36 36 4B 33 33  OVaDwCZdWC266K33
2F 6E 6C 65 73 35 58 72  42 49 7A 34 4D 34 55 71  /nles5XrBIz4M4Uq
6A 6C 6D 48 38 57 48 31  47 47 70 64 72 31 7A 70  jlmH8WH1GGpdr1zp
39 41 30 55 64 49 66 44  58 4A 55 52 4C 67 65 32  9A0UdIfDXJURLge2
6D 33 66 2B 52 43 52 76  37 42 6F 68 4A 6C 77 2F  m3f+RCRv7BohJlw/
31 69 61 59 61 6E 73 48  47 7A 41 4F 6C 54 34 76  1iaYansHGzAOlT4v
33 62 70 4D 39 51 47 79  55 46 5A 63 68 39 64 78  3bpM9QGyUFZch9dx
34 52 32 6E 65 38 57 54  43 6E 79 49 77 58 78 2F  4R2ne8WTCnyIwXx/
74 4B 46 41 45 5A 66 57  39 61 79 78 6B 61 66 58  tKFAEZfW9ayxkafX
52 64 4B 50 7A 74 6A 63  78 64 2B 6A 51 34 38 6C  RdKPztjcxd+jQ48l
45 75 48 38 4E 68 46 6A  7A 39 59 79 34 38 5A 66  EuH8NhFjz9Yy48Zf
77 53 45 6C 53 36 70 4E  51 5A 30 4E 31 35 50 45  wSElS6pNQZ0N15PE
68 33 53 72 55 55 63 44  35 39 6A 77 52 75 4C 4F  h3SrUUcD59jwRuLO
35 6E 4B 6F 6B 72 54 38  48 2B 61 53 4F 71 56 6D  5nKokrT8H+aSOqVm
39 47 2B 6C 5A 67 4E 7A  73 65 2F 30 75 4F 4C 42  9G+lZgNzse/0uOLB
74 4F 59 37 61 30 35 5A  69 4F 70 59 65 4D 55 47  tOY7a05ZiOpYeMUG
66 64 64 79 66 73 47 65  47 4C 63 6E 59 79 64 34  fddyfsGeGLcnYyd4
34 69 77 65 78 5A 69 50  63 43 72 34 2B 68 2B 36  4iwexZiPcCr4+h+6
32 6E 74 36 54 7A 58 73  61 35 62 67 34 2B 6D 71  2nt6TzXsa5bg4+mq
2F 62 54 64 55 72 72 33  37 74 6F 79 6E 41 68 78  /bTdUrr37toynAhx
44 48 35 64 44 47 63 5A  33 6E 47 6E 50 4A 68 63  DH5dDGcZ3nGnPJhc
4E 46 58 4F 67 61 46 4B  54 43 72 65 68 37 78 30  NFXOgaFKTCreh7x0
43 32 4F 62 6A 2B 43 32  53 33 52 73 47 68 55 67  C2Obj+C2S3RsGhUg
48 6A 64 4E 33 7A 4D 44  4B 63 68 50 62 36 6F 49  HjdN3zMDKchPb6oI
57 6C 38 47 58 44 2B 71  6B 39 6D 62 6C 58 33 43  Wl8GXD+qk9mblX3C
30 6C 59 38 7A 50 54 6E  66 4E 4A 54 5A 4B 52 75  0lY8zPTnfNJTZKRu
74 70 47 57 7A 79 48 50  73 68 2F 37 6D 63 4E 44  tpGWzyHPsh/7mcND
55 53 74 45 4D 4A 6F 58  2F 52 66 75 58 5A 63 75  UStEMJoX/RfuXZcu
36 65 5A 65 57 4A 71 70  2F 32 4A 6F 33 4A 6F 79  6eZeWJqp/2Jo3Joy
79 6B 66 47 39 4E 42 75  77 50 42 68 36 66 4D 72  ykfG9NBuwPBh6fMr
31 43 30 79 58 30 59 34  50 6B 47 43 30 50 72 72  1C0yX0Y4PkGC0Prr
78 2B 66 30 63 4F 42 41  58 67 61 72 34 2B 76 51  x+f0cOBAXgar4+vQ
5A 5A 2B 75 52 65 39 75  66 73 37 43 4A 5A 72 36  ZZ+uRe9ufs7CJZr6
6F 6E 4D 50 43 57 57 62  5A 47 78 35 78 42 53 47  onMPCWWbZGx5xBSG
76 73 51 4F 65 55 52 6F  75 4C 6B 78 30 57 4F 55  vsQOeURouLkx0WOU
4B 7A 62 47 64 32 65 72  74 61 37 79 4B 4A 6E 6D  KzbGd2erta7yKJnm
6F 33 54 77 4B 57 6B 58  41 4C 52 6D 78 70 46 78  o3TwKWkXALRmxpFx
73 6A 76 76 65 47 6F 32  36 37 59 2F 61 47 4C 44  sjvveGo267Y/aGLD
35 38 4D 6F 63 5A 2B 42  4A 50 78 75 34 6C 56 36  58MocZ+BJPxu4lV6
71 4A 6F 5A 59 65 78 5A  51 50 34 51 2B 6B 2B 51  qJoZYexZQP4Q+k+Q
4B 77 68 67 58 36 47 42  6D 51 38 78 62 33 58 63  KwhgX6GBmQ8xb3Xc
65 61 53 70 38 50 42 4A  32 6A 6C 2F 35 4E 63 46  eaSp8PBJ2jl/5NcF
36 39 4E 6E 43 66 58 6C  37 57 66 54 78 45 5A 6F  69NnCfXl7WfTxEZo
78 78 52 39 61 76 64 52  75 50 44 56 6F 68 61 49  xxR9avdRuPDVohaI
62 30 67 58 67 2F 4E 52  38 6D 66 35 61 6D 71 4B  b0gXg/NR8mf5amqK
52 46 43 53 63 74 54 42  33 4C 54 56 6C 75 7A 36  RFCSctTB3LTVluz6
57 70 53 4F 73 51 35 77  30 72 45 47 32 37 39 50  WpSOsQ5w0rEG279P
62 45 62 4E 41 7A 4D 49  33 63 4A 62 58 69 65 76  bEbNAzMI3cJbXiev
2B 44 68 6E 2B 58 63 6D  77 69 38 4F 36 4E 68 37  +Dhn+Xcmwi8O6Nh7
72 2B 7A 6D 39 34 53 35  4A 4A 74 47 78 47 6A 6C  r+zm94S5JJtGxGjl
2B 30 69 7A 53 5A 54 57  43 71 72 46 6E 70 47 66  +0izSZTWCqrFnpGf
55 50 4F 45 4B 65 31 59  58 46 34 2F 70 65 62 54  UPOEKe1YXF4/pebT
35 66 37 6A 36 6E 46 6D  4A 56 51 77 55 53 70 77  5f7j6nFmJVQwUSpw
35 57 36 4A 64 2F 6E 71  65 73 48 46 6C 4F 31 6D  5W6Jd/nqesHFlO1m
61 49 70 37 74 55 37 51  46 74 59 47 2B 56 6C 6D  aIp7tU7QFtYG+Vlm
4F 79 54 5A 7A 4B 47 76  58 78 74 62 4F 50 2F 4E  OyTZzKGvXxtbOP/N
43 6E 6D 47 6E 6D 51 56  35 34 4F 32 70 37 69 78  CnmGnmQV54O2p7ix
72 42 2B 59 6C 2F 73 62  4E 36 32 6B 7A 68 5A 6C  rB+Yl/sbN62kzhZl
39 53 30 4D 63 33 42 4B  51 6F 51 38 36 37 46 71  9S0Mc3BKQoQ867Fq
42 51 71 74 6C 51 62 53  6C 52 45 5A 46 70 43 72  BQqtlQbSlREZFpCr
6B 6D 6A 49 61 68 53 4F  6F 48 70 75 36 70 49 6F  kmjIahSOoHpu6pIo
77 6D 4A 4C 43 4B 44 4B  62 51 66 65 71 6A 54 59  wmJLCKDKbQfeqjTY
6B 52 78 2F 6E 71 4D 62  6E 2F 58 61 64 42 50 43  kRx/nqMbn/XadBPC
4D 6D 72 6C 38 6F 33 35  38 4F 4E 75 7A 56 2B 47  Mmrl8o358ONuzV+G
43 47 58 37 50 34 31 47  45 31 6B 73 2B 48 32 6D  CGX7P41GE1ks+H2m
73 34 41 6C 71 78 54 39  45 6E 76 43 79 2B 6A 50  s4AlqxT9EnvCy+jP
32 7A 58 6D 44 46 71 76  42 36 39 74 42 75 74 32  2zXmDFqvB69tBut2
57 46 44 6A 61 39 59 63  79 58 49 4D 49 38 4F 64  WFDja9YcyXIMI8Od
77 4F 56 33 4D 30 74 76  73 30 2F 35 77 68 35 78  wOV3M0tvs0/5wh5x
64 67 55 75 4A 78 4E 76  74 7A 7A 35 6A 38 46 64  dgUuJxNvtzz5j8Fd
6D 4C 6D 37 41 53 54 75  48 69 52 49 41 47 68 36  mLm7ASTuHiRIAGh6
36 7A 4C 46 47 41 76 69  5A 48 53 4F 79 52 58 64  6zLFGAviZHSOyRXd
62 68 6A 47 4E 35 65 49  4D 36 6E 62 71 6D 72 38  bhjGN5eIM6nbqmr8
56 4E 32 37 61 33 58 49  61 2B 43 7A 32 59 48 35  VN27a3XIa+Cz2YH5
5A 6F 67 36 78 69 43 61  74 4C 4D 63 6B 30 68 68  Zog6xiCatLMck0hh
75 73 41 6C 4F 66 6B 30  46 54 69 64 48 69 37 4B  usAlOfk0FTidHi7K
51 75 51 50 41 74 4B 55  46 4B 63 4A 2B 30 38 70  QuQPAtKUFKcJ+08p
36 64 6F 7A 41 72 69 38  54 4F 6F 76 78 30 34 53  6dozAri8TOovx04S
2F 36 69 50 63 4F 72 48  53 68 58 6A 77 67 5A 32  /6iPcOrHShXjwgZ2
69 55 50 5A 4A 30 47 7A  32 45 7A 57 78 39 43 51  iUPZJ0Gz2EzWx9CQ
7A 4B 46 6A 4E 46 46 4F  33 6A 35 36 6C 4D 6E 7A  zKFjNFFO3j56lMnz
42 59 6F 67 73 4E 61 4E  64 69 51 4C 6B 57 74 44  BYogsNaNdiQLkWtD
44 4D 35 73 6B 6F 78 57  4A 53 6B 3D 00 00 00 00  DM5skoxWJSk=


第9步:解码“第8步”中获取的base64字符,长度为0x710。
libmplayer.so:5EB5AE54 BL              av_base64_decode

解码后:
FE 84 76 64 15 42 7F 18  AB B6 80 0A D2 E6 7C C7
A2 B8 BD 9D A7 EC 65 8C  C2 1A 56 7A E6 B5 D4 A7
8C 95 B6 F2 51 A3 E3 2E  FF 73 67 9C C7 83 95 94
60 71 45 12 E3 31 AD 0C  9D 22 D5 C6 DD 2C D1 B0
21 27 6D AD 32 18 A4 07  32 AE 8F 9A 3E A7 F8 8B
95 CC 45 DC 13 BF 2F DA  68 33 AA 6A B2 63 DF 2E
96 2C EC B1 28 10 D0 9E  ED 2C 9E 8B 9D 26 AC 4C
EE 87 6C 0A E6 88 90 16  A3 25 58 0B F2 E5 72 E9
A1 B0 CD 3F EC E1 F6 CB  E0 16 65 B7 EF 7C 40 92
ED BD 78 8C DE 97 9B 15  5F 7A 15 C3 86 04 68 C0
00 C2 B5 31 64 06 3D 90  82 FE EA 0A 51 73 93 8A
8B 96 BC 3C ED 11 54 FE  7B 74 F7 5C 99 3C 8C 5A
75 D0 4D 6F F9 0B 88 AC  90 67 E3 F9 B7 07 71 76
91 85 2C BC 13 B0 5E 58  29 77 3D 42 CA 84 E5 BB
91 E5 0F 6A 89 95 24 8A  1D 74 E2 4F B4 F7 7C D8
D3 67 A4 03 0A E5 8E 6D  9D 4F 4F 1A 08 71 93 D7
1E 6B BF 8B 66 3C BC 26  78 AF 2E 54 2B AE 96 B5
4C 58 43 61 F6 E3 A8 6D  CB 80 FE 5B 20 19 21 F4
5C 1C 57 36 5E 6B D7 24  43 AB 23 48 F3 14 3B 95
6D A3 CB 9F 93 67 67 FA  D9 19 E4 81 10 AB EC 0B
82 C6 9B 9C 5E E6 66 97  DD ED 8D 42 5B 2E F1 DC
E4 4B 31 91 9D 24 27 2F  A8 66 2E 68 DF E4 A6 C2
2F 06 FE 69 54 99 05 69  17 9B FF 59 5A 98 54 6D
E2 BE E4 0D 44 0A A9 58  B7 2D 92 14 BA D5 37 B2
06 5F 37 3C FB 5B 87 FB  77 D8 F6 6C 4C 6A 2E E6
37 23 A2 44 FE 08 97 91  3F C2 FF A5 08 D6 E8 50
43 D6 4D E7 57 D0 BC 13  A4 8D 0B 7F 26 10 C7 8D
00 94 54 AC A3 99 4B 07  3C C0 48 FC 54 72 43 15
F1 93 58 71 D3 A3 F1 80  66 1B 2F E7 FD 41 A9 0E
90 CE 12 F2 91 5A E1 DE  F4 FB 38 46 3A D0 62 AE
4C 07 6A 8F CA 88 B9 BA  FD 24 DE 6A 74 DB 38 37
B0 E0 03 87 FD 2C 85 0D  9D 3E AD 61 FE EA 0E 20
33 E9 F4 84 3E D7 83 6F  1E 6E E0 FA DF 7D C8 2E
AA 1A CB 30 E2 CC 6A 8B  D5 71 EC C7 83 63 AC D2
09 5A 53 B4 83 C3 B1 E2  7E C9 C5 0E D1 D1 93 E0
C5 FA 7C A8 4E 30 90 43  E3 6D 0B EA 15 EB A2 19
08 AA C1 F7 3A 39 ED 3B  26 EC B2 40 2B C5 6E 70
AC FA D7 99 CB CB A9 19  99 E8 8D 74 13 BB 39 13
DF 57 7A 57 26 83 7D 1A  C8 8F AD 3E A0 3B 49 E5
3D 5E 69 71 8F 54 DD B8  DC F5 DC AE 4B B3 73 5F
51 C1 F3 CF 01 ED 25 3A  F2 95 46 EA 41 38 EC 0F
92 C9 E1 5D 37 CD 0B DF  5F 27 52 A0 09 A3 01 83
2C 91 63 66 84 00 C3 D9  75 48 4F 96 BA 8E D9 26
73 F4 25 32 E6 FA 1B 90  30 A6 0B 72 85 55 93 60
06 F7 F3 59 40 B0 47 4D  6A 1C 53 20 36 80 40 AC
F3 47 27 6F CE 34 F0 04  B8 54 D5 89 96 6E 32 87
56 EB 27 8E 5B ED D4 8D  40 1D FF 86 01 C4 19 D0
AA AA 3D 09 5E 41 E0 77  37 2B 93 D3 B0 94 35 D2
A7 5F 39 76 1B B2 3E 10  F3 6A 87 0A 01 92 EB BA
56 F8 EA D8 90 D8 88 BA  4B 7A 76 9C FF 54 61 1E
D2 E2 F9 FA 59 9F F3 EA  A9 D4 01 2E 34 11 FD E0
39 56 83 C0 26 5D 58 2D  BA E8 AD F7 FE 79 5E B3
95 EB 04 8C F8 33 85 2A  8E 59 87 F1 61 F5 18 6A
5D AF 5C E9 F4 0D 14 74  87 C3 5C 95 11 2E 07 B6
9B 77 FE 44 24 6F EC 1A  21 26 5C 3F D6 26 98 6A
7B 07 1B 30 0E 95 3E 2F  DD BA 4C F5 01 B2 50 56
5C 87 D7 71 E1 1D A7 7B  C5 93 0A 7C 88 C1 7C 7F
B4 A1 40 11 97 D6 F5 AC  B1 91 A7 D7 45 D2 8F CE
D8 DC C5 DF A3 43 8F 25  12 E1 FC 36 11 63 CF D6
32 E3 C6 5F C1 21 25 4B  AA 4D 41 9D 0D D7 93 C4
87 74 AB 51 47 03 E7 D8  F0 46 E2 CE E6 72 A8 92
B4 FC 1F E6 92 3A A5 66  F4 6F A5 66 03 73 B1 EF
F4 B8 E2 C1 B4 E6 3B 6B  4E 59 88 EA 58 78 C5 06
7D D7 72 7E C1 9E 18 B7  27 63 27 78 E2 2C 1E C5
98 8F 70 2A F8 FA 1F BA  DA 7B 7A 4F 35 EC 6B 96
E0 E3 E9 AA FD B4 DD 52  BA F7 EE DA 32 9C 08 71
0C 7E 5D 0C 67 19 DE 71  A7 3C 98 5C 34 55 CE 81
A1 4A 4C 2A DE 87 BC 74  0B 63 9B 8F E0 B6 4B 74
6C 1A 15 20 1E 37 4D DF  33 03 29 C8 4F 6F AA 08
5A 5F 06 5C 3F AA 93 D9  9B 95 7D C2 D2 56 3C CC
F4 E7 7C D2 53 64 A4 6E  B6 91 96 CF 21 CF B2 1F
FB 99 C3 43 51 2B 44 30  9A 17 FD 17 EE 5D 97 2E
E9 E6 5E 58 9A A9 FF 62  68 DC 9A 32 CA 47 C6 F4
D0 6E C0 F0 61 E9 F3 2B  D4 2D 32 5F 46 38 3E 41
82 D0 FA EB C7 E7 F4 70  E0 40 5E 06 AB E3 EB D0
65 9F AE 45 EF 6E 7E CE  C2 25 9A FA A2 73 0F 09
65 9B 64 6C 79 C4 14 86  BE C4 0E 79 44 68 B8 B9
31 D1 63 94 2B 36 C6 77  67 AB B5 AE F2 28 99 E6


第10步:对“第4步”中rc4解密的值(e50efce136c54188)进行sha1(256)计算。
libmplayer.so:5EB5AE80 MOV             R1, #0x100
libmplayer.so:5EB5AE84 MOV             R7, R0
libmplayer.so:5EB5AE88 BL              av_sha_init
libmplayer.so:5EB5AE8C MOV             R2, #0x10
libmplayer.so:5EB5AE90 MOV             R0, R7
libmplayer.so:5EB5AE94 ADD             R1, SP, #0xDF0+var_D04
libmplayer.so:5EB5AE98 BL             av_sha_update           ; e50efce136c54188
libmplayer.so:5EB5AE9C ADD             R1, SP, #0xDF0+var_C74
libmplayer.so:5EB5AEA0 MOV             R0, R7
libmplayer.so:5EB5AEA4 BL              av_sha_final
libmplayer.so:5EB5AEA8 MOV             R0, R7
libmplayer.so:5EB5AEAC BL              free
结果为:
D0 CA B2 55 C4 DA CC DA  00 2C 20 F2 7C 55 02 FF
BD 15 AF 45 A9 81 DD A3  2C F8 3D 85 9E BB D7 27

第11步:打开并读取/data/data/com.huplayer.neon/files/indiv3.key
libmplayer.so:5EB5AF28 BL              fopen                   ; /data/data/com.huplayer.neon/files/indiv3.key
libmplayer.so:5EB5AF2C SUBS            R6, R0, #0
libmplayer.so:5EB5AF30 BEQ             loc_5EB5B860
libmplayer.so:5EB5AF34 MOV             R0, R7
libmplayer.so:5EB5AF38 MOV             R7, #1
libmplayer.so:5EB5AF3C BL              free
libmplayer.so:5EB5AF40 MOV             R1, R5
libmplayer.so:5EB5AF44 MOV             R2, #2
libmplayer.so:5EB5AF48 MOV             R0, R6
libmplayer.so:5EB5AF4C BL              fseek
libmplayer.so:5EB5AF50 MOV             R0, R6
libmplayer.so:5EB5AF54 BL              ftell
libmplayer.so:5EB5AF58 MOV             R10, #0x8000
libmplayer.so:5EB5AF5C MOV             R11, #0xB1DE
libmplayer.so:5EB5AF60 MOVT            R10, #0xD53E
libmplayer.so:5EB5AF64 MOVT            R11, #0x19D
libmplayer.so:5EB5AF68 MOV             R4, R0
libmplayer.so:5EB5AF6C BL              malloc
libmplayer.so:5EB5AF70 MOV             R1, R5
libmplayer.so:5EB5AF74 MOV             R2, R5
libmplayer.so:5EB5AF78 STR             R0, [SP,#0xDF0+var_DA4]
libmplayer.so:5EB5AF7C MOV             R0, R6
libmplayer.so:5EB5AF80 BL              fseek
libmplayer.so:5EB5AF84 MOV             R3, R6
libmplayer.so:5EB5AF88 MOV             R2, R4
libmplayer.so:5EB5AF8C MOV             R1, R7
libmplayer.so:5EB5AF90 LDR             R0, [SP,#0xDF0+var_DA4]
libmplayer.so:5EB5AF94 STRD            R10, [SP,#0xDF0+var_D80]
libmplayer.so:5EB5AF98 BL              fread
libmplayer.so:5EB5AF9C MOV             R0, R6
libmplayer.so:5EB5AFA0 ADD             R10, SP, #0xDF0+var_C68
libmplayer.so:5EB5AFA4 BL              fclose


读取的内容为
34 31 46 43 44 30 41 42  39 33 35 37 38 39 43 35  41FCD0AB935789C5
39 31 39 33 41 32 39 44  37 45 31 38 34 42 38 45  9193A29D7E184B8E


第12步:对“第11步”中读取的内容前16字节进行sha1计算 (41FCD0AB935789C5)
结果为
34 3D 53 68 C8 BC 93 D7  E2 B1 95 12 47 BA 55 11
4A 67 DB 41 FE 77 A6 AE  88 B5 99 0E 54 06 69 B9


第13步:rc4解密 “第9步”base64字符解码后的值,长度0x710,密钥为“第12步”中sha1值第12字节开始的后16字节12 47 BA 55 11 4A 67 DB  41 FE 77 A6 AE 88 B5 99。
解密后
71 C3 8C 1F 0A 18 21 EC  B3 22 D8 05 95 75 A3 8C
2C CF 0D 8D 7C 1B 95 E0  65 A5 99 49 58 8B 8A 41
5C 2D 27 C3 85 1A 7A 53  E8 81 EE 6B D0 B0 EB AD
14 CE F2 5E 16 FD 17 67  6B 98 9C 50 AA B8 DC D2
67 67 21 28 EF 3D 8D A4  00 27 85 C8 AA B7 11 33
2A ED 43 C4 3F 96 87 ED  62 52 72 80 05 6E A4 08
71 35 7D 59 D8 A9 EA DA  E5 71 9B 79 38 C6 80 B8
ED 80 9E 2A 3F 2A 84 BA  27 47 07 F7 6E 7F F1 03
3E F8 34 78 34 47 94 B2  16 3C 2C 33 15 10 84 C7
8C 88 B0 0A 40 C0 F5 F7  7E 95 E5 BE B5 66 A0 8A
33 0A 6E 07 74 66 00 8D  C3 2E D4 5B 3F BD 7A D9
A3 56 15 EB 6F BC 5F 28  1E 43 76 36 6B 2E 69 A3
41 3E DE C0 00 41 D8 6A  2E 03 F2 48 35 BD C5 AE
22 59 6E 6C DA 79 96 10  48 08 4B 72 C9 88 AB 0E
B4 1E 04 E3 BF 46 FE 41  BD F1 A7 18 92 94 7C 33
6E A6 D7 8F 46 EC 84 01  08 9A 0D 72 4D B1 0F A9
34 58 0A 94 03 BC 2E 01  56 69 5F B9 B6 9F F8 4C
FD BE 78 E9 EC 77 AA 6F  A8 56 9C CA EB 4D 10 8C
18 6A 24 AF B6 49 40 24  DF AF 74 C0 52 C4 E3 5F
65 C5 F7 B7 40 79 A7 AC  3C 14 9A 1E A1 45 A4 B1
75 76 80 BA 83 C0 2F 4D  BE B9 D0 D9 F8 C3 5A 57
4F 96 C4 BE C8 6E A9 71  00 5A AF 78 A3 15 D0 EA
65 45 AF 9C C0 2E D0 91  A3 16 65 3D 74 C6 2E AB
C5 8A CC D1 46 F4 F4 62  98 54 DB FE 9B C4 06 53
09 32 57 EA 6C 88 9B 7D  18 4B 30 2D 44 D7 5D 9D
EA 44 26 0F 0C 6E 0F DB  EA 98 66 07 21 5D 2E DE
D6 0C C2 5B 47 DF CF E9  0D C6 35 9F 40 00 CF 09
F9 73 A9 39 EE 91 F0 75  26 3E 14 17 08 58 15 8E
40 4C 3D 8C 9E 3A F4 9C  C5 02 50 1D 7A 45 E2 B6
30 A3 4B 8F A9 DF BF 6D  DE B7 3C 85 FA 4A 05 15
4A 0F BC 00 1C 73 76 2A  AD F8 32 1B F7 C6 82 E9
75 C4 75 BB C9 5A 45 A5  E5 44 71 9C 7F 56 B2 76
21 B9 32 2B C6 04 76 D3  2C 86 B9 C0 EF 7A 76 BA
D9 91 5B B6 8F 9A 12 AF  CC E4 28 62 3E 7C C4 BE
80 64 D7 4B 86 BE 1E 6D  66 E0 2B 62 48 71 58 5B
23 1D CF 61 5E 8F 97 FE  F9 7B 51 7F C2 32 D9 99
C7 03 64 D0 C5 71 BD A5  99 C7 D1 01 5F 7F A8 21
74 2A BD 8E 9D AB 79 D5  0A 7E 5D 77 00 17 38 4B
22 E9 CB 6E CD 78 3D 2D  F1 CE AC B2 2F 70 A4 BC
DE AD 0E A0 3B 58 DC AB  80 00 29 E7 35 E1 8C E2
71 66 C2 40 F0 46 40 AA  97 B1 49 85 2E 49 DE 3A
59 1A 35 19 79 93 36 07  10 09 32 AC CC 3B 86 8B
BD 4C E2 E0 73 C5 42 15  AD 90 48 CE FB C6 CA D4
24 5F 17 42 1B 71 EC 48  06 6F 51 0D 9A 51 8F 48
D0 51 45 AD E1 FD 55 45  9B 9F EE F4 45 FE 7B 8F
A5 DC 97 3E B1 9B 01 09  81 33 2E 20 80 FB 1D 40
DC 36 9F 66 89 6E 7F 6E  9C 6A 5F E5 1A F0 C3 10
23 10 7E AF FA 9C AE E5  F2 60 FD E9 57 AB CB 2A
F3 5B 28 A4 A8 45 7A 21  34 F1 28 D2 86 B7 06 CC
FC 4F 1D 43 20 6A 4B 29  0D 97 4E 4D 97 D3 DF 20
FE 8B 15 2E 5E 33 24 39  9B 5A 47 2C 51 1C 40 3B
21 76 41 C8 F5 EE 2C 3B  90 CB 97 57 94 3B 4F 15
AD 74 F0 57 9A AB C1 80  AD 53 19 FB 2C 7E 06 A6
7B F2 AC 0A 26 8A 26 7C  BB 7B 29 75 CF 55 69 3D
87 64 75 E2 EA 2D 9B B0  2D A6 C3 57 95 7B 3C 15
84 77 08 37 89 88 52 78  76 C2 6D B9 B4 E6 44 15
18 81 A0 71 4F 66 4C 5B  51 98 E3 59 C0 CA 2F 5D
F5 14 70 D1 F2 5C 0F FC  24 2C A9 54 7F F2 09 EF
A1 14 AA 03 96 F6 B0 57  A3 AB CD 6C A6 18 FF 94
2A 31 CD 32 65 C4 50 2E  37 27 E6 7D DF 94 87 1B
C2 F3 3F 4F 34 99 87 6A  8F 79 61 1E DE 83 D4 EF
B3 85 B7 BB F4 9C 2E 91  12 D2 C6 7E 41 9A 40 98
77 A6 6E 86 30 6E 83 88  40 0A F4 96 96 F9 80 41
FD 6D 3C 76 48 18 25 1F  63 F0 D2 04 30 8F F9 39
9D 86 2F 91 13 04 45 3C  D3 65 A1 C2 6D 76 4A E2
FE 4E 8A A8 96 E2 90 80  AC 7C FC EF E3 E9 8A C8
08 B1 45 4F BC 4E 77 86  71 9A 04 B6 4A E4 03 00
0F 48 39 67 81 9D 95 F8  0B 75 E1 3E 74 EC A9 00
44 EC 13 31 B8 16 26 72  64 66 8C 8D 11 A0 5E F2
EC B1 D4 0D 24 4F 0A 7D  7D 0B 68 0A 94 8E D7 82
39 28 09 97 DE ED 94 7E  B8 D9 B6 FA 69 86 DB 8A
AF BB 4C E6 02 2D 93 58  DA 7F 8B 82 D5 17 CB 80
6A 86 E2 70 73 30 3C A5  53 90 6F 39 CB D6 3A 0C
86 11 B6 E1 AD A7 E6 5D  B8 5D 62 20 0D 84 F9 90


第14步:再次用aes解密“第13步“中rc4解密后的结果,密钥为“第10步”sha1计算得到的值第8位开始后16字节:DA 00 2C 20 F2 7C 55 02  FF BD 15 AF 45 A9 81 DD
解密后
3C 43 4C 49 45 4E 54 3E  34 31 46 43 44 30 41 42  <CLIENT>41FCD0AB
39 33 35 37 38 39 43 35  39 31 39 33 41 32 39 44  935789C59193A29D
37 45 31 38 34 42 38 45  3C 2F 43 4C 49 45 4E 54  7E184B8E</CLIENT
3E 3C 50 43 3E 31 3C 2F  50 43 3E 3C 4C 44 3E 31  ><PC>1</PC><LD>1
33 30 36 35 37 35 37 32  37 35 30 30 30 30 30 30  3065757275000000
30 3C 2F 4C 44 3E 3C 44  49 3E 30 3C 2F 44 49 3E  0</LD><DI>0</DI>
3C 44 45 3E 31 3C 2F 44  45 3E 3C 4E 4F 3E 2D 31  <DE>1</DE><NO>-1
30 3C 2F 4E 4F 3E 3C 49  44 3E 31 33 30 34 31 35  0</NO><ID>130415
31 36 37 38 35 30 30 30  30 30 30 30 3C 2F 49 44  167850000000</ID
3E 3C 42 44 3E 31 32 39  34 36 39 37 31 36 30 30  ><BD>12946971600
30 30 30 30 30 30 30 3C  2F 42 44 3E 3C 45 58 3E  0000000</BD><EX>
31 33 34 31 31 36 33 34  34 30 30 30 30 30 30 30  1341163440000000
30 30 3C 2F 45 58 3E 3C  48 52 3E 36 31 32 30 30  00</EX><HR>61200
30 3C 2F 48 52 3E 3C 42  4C 4F 43 4B 3E 77 6D 65  0</HR><BLOCK>wme
6E 63 2E 65 78 65 2C 63  61 6D 72 65 63 6F 72 64  nc.exe,camrecord
65 72 2E 65 78 65 2C 57  4D 45 6E 63 2E 65 78 65  er.exe,WMEnc.exe
2C 53 43 2E 65 78 65 2C  48 79 43 61 6D 32 2E 65  ,SC.exe,HyCam2.e
78 65 2C 53 4E 41 47 49  54 33 32 2E 45 58 45 2C  xe,SNAGIT32.EXE,
46 53 43 61 70 74 75 72  65 2E 65 78 65 2C 63 61  FSCapture.exe,ca
70 74 75 72 65 2D 70 72  6F 2E 65 78 65 2C 45 61  pture-pro.exe,Ea
73 79 43 61 70 74 75 72  65 2E 45 58 45 2C 47 72  syCapture.EXE,Gr
61 62 2D 49 54 2E 65 78  65 2C 47 72 61 62 53 63  ab-IT.exe,GrabSc
72 65 65 6E 2E 65 78 65  2C 43 61 6D 52 65 63 6F  reen.exe,CamReco
72 64 65 72 2E 65 78 65  2C 57 69 6E 53 6E 61 70  rder.exe,WinSnap
2E 65 78 65 2C 77 69 6E  67 72 61 62 2E 65 78 65  .exe,wingrab.exe
2C 53 6E 61 70 53 68 6F  74 2E 65 78 65 2C 65 73  ,SnapShot.exe,es
63 72 2E 65 78 65 2C 4E  6F 31 53 63 72 65 65 6E  cr.exe,No1Screen
43 61 70 74 75 72 65 2E  65 78 65 2C 43 61 70 74  Capture.exe,Capt
75 72 65 2E 65 78 65 2C  31 30 31 53 53 2E 65 78  ure.exe,101SS.ex
65 2C 35 43 6C 69 63 6B  73 2E 65 78 65 2C 55 6C  e,5Clicks.exe,Ul
74 72 61 43 61 70 74 75  72 65 2E 45 58 45 2C 41  traCapture.EXE,A
43 41 20 43 61 70 74 75  72 65 2C 41 6E 79 43 61  CA Capture,AnyCa
70 74 75 72 65 2E 45 58  45 2C 57 65 62 52 65 70  pture.EXE,WebRep
6C 61 79 2E 65 78 65 2C  41 75 74 6F 53 63 72 65  lay.exe,AutoScre
65 6E 43 61 70 74 75 72  65 32 2E 65 78 65 2C 43  enCapture2.exe,C
61 70 49 54 2E 45 58 45  2C 43 6F 6F 6C 53 63 72  apIT.EXE,CoolScr
65 65 6E 43 61 70 74 75  72 65 2E 65 78 65 2C 43  eenCapture.exe,C
72 6F 70 70 65 72 2E 65  78 65 2C 43 53 63 72 65  ropper.exe,CScre
65 6E 69 65 2E 65 78 65  2C 44 75 63 6B 43 61 70  enie.exe,DuckCap
74 75 72 65 2E 65 78 65  2C 45 61 73 79 43 61 70  ture.exe,EasyCap
74 75 72 65 2E 45 58 45  2C 65 73 63 72 2E 65 78  ture.EXE,escr.ex
65 2C 46 6C 61 73 68 33  32 2E 65 78 65 2C 46 6F  e,Flash32.exe,Fo
78 41 72 63 4D 6F 76 69  65 45 64 69 74 6F 72 2E  xArcMovieEditor.
45 58 45 2C 46 75 6C 6C  53 68 6F 74 2E 65 78 65  EXE,FullShot.exe
2C 47 72 65 65 6E 73 68  6F 74 2E 65 78 65 2C 47  ,Greenshot.exe,G
6F 6C 65 74 61 73 2E 53  63 72 65 65 6E 43 61 70  oletas.ScreenCap
74 75 72 65 2E 65 78 65  2C 66 6F 78 63 61 70 2E  ture.exe,foxcap.
65 78 65 2C 66 72 61 70  73 2E 65 78 65 2C 48 61  exe,fraps.exe,Ha
6E 64 79 53 6E 61 70 2E  65 78 65 2C 48 6F 76 65  ndySnap.exe,Hove
72 53 6E 61 70 2E 65 78  65 2C 48 6F 72 69 7A 6F  rSnap.exe,Horizo
6E 33 33 2E 65 78 65 2C  6A 65 74 53 63 72 65 65  n33.exe,jetScree
6E 73 68 6F 74 2E 65 78  65 2C 4B 69 6E 67 4B 6F  nshot.exe,KingKo
6E 67 43 61 70 74 75 72  65 2E 65 78 65 2C 6C 69  ngCapture.exe,li
67 68 74 73 63 72 65 65  6E 2E 65 78 65 2C 4C 69  ghtscreen.exe,Li
67 68 74 53 68 6F 74 2E  65 78 65 2C 4D 61 67 69  ghtShot.exe,Magi
63 20 53 63 72 65 65 6E  73 68 6F 74 2E 65 78 65  c Screenshot.exe
2C 70 69 63 70 69 63 6B  2E 65 78 65 2C 50 69 78  ,picpick.exe,Pix
43 6C 69 70 2E 65 78 65  2C 50 72 69 6E 74 53 63  Clip.exe,PrintSc
72 65 65 6E 44 65 6C 75  78 65 2E 65 78 65 2C 50  reenDeluxe.exe,P
72 74 53 63 72 2E 65 78  65 2C 53 63 72 65 65 6E  rtScr.exe,Screen
43 61 70 74 75 72 65 2E  65 78 65 2C 53 63 72 65  Capture.exe,Scre
65 6E 43 61 70 74 75 72  65 50 72 69 6E 74 2E 65  enCapturePrint.e
78 65 2C 53 63 72 65 65  6E 47 72 61 62 2E 45 58  xe,ScreenGrab.EX
45 2C 41 75 74 6F 53 63  72 65 65 6E 52 65 63 6F  E,AutoScreenReco
72 64 65 72 2E 65 78 65  2C 73 63 72 70 72 74 33  rder.exe,scrprt3
30 2E 65 78 65 2C 53 52  69 70 33 32 2E 65 78 65  0.exe,SRip32.exe
2C 73 63 72 65 65 6E 73  68 6F 6F 74 65 72 2E 65  ,screenshooter.e
78 65 2C 53 63 72 65 65  6E 73 68 6F 74 43 61 70  xe,ScreenshotCap
74 6F 72 2E 65 78 65 2C  53 63 72 65 65 6E 79 2E  tor.exe,Screeny.
65 78 65 2C 53 63 72 65  65 6E 20 43 61 70 74 61  exe,Screen Capta
69 6E 2E 65 78 65 2C 53  63 72 65 65 6E 43 61 70  in.exe,ScreenCap
74 75 72 65 72 2E 65 78  65 2C 53 63 72 65 65 6E  turer.exe,Screen
53 68 6F 74 2E 65 78 65  2C 53 6C 69 51 53 63 72  Shot.exe,SliQScr
43 61 70 2E 65 78 65 2C  53 74 65 70 53 68 6F 74  Cap.exe,StepShot
2E 65 78 65 2C 53 74 72  69 6B 65 53 63 72 65 65  .exe,StrikeScree
6E 2E 65 78 65 2C 53 53  43 61 70 74 75 72 65 2E  n.exe,SSCapture.
65 78 65 2C 57 69 6E 53  68 6F 74 2E 65 78 65 2C  exe,WinShot.exe,
57 73 6E 61 70 2E 65 78  65 2C 78 53 68 6F 74 73  Wsnap.exe,xShots
2E 65 78 65 2C 53 6F 63  69 61 6C 53 63 72 65 65  .exe,SocialScree
6E 43 61 70 74 75 72 65  2E 65 78 65 2C 4D 79 53  nCapture.exe,MyS
63 72 65 65 6E 43 61 70  74 75 72 65 44 65 6D 6F  creenCaptureDemo
2E 65 78 65 2C 49 73 6F  74 6F 70 65 53 63 72 65  .exe,IsotopeScre
65 6E 43 61 70 74 75 72  65 2E 65 78 65 2C 32 43  enCapture.exe,2C
61 70 74 75 72 65 45 61  73 79 2E 45 58 45 2C 41  aptureEasy.EXE,A
6E 67 72 79 43 61 70 74  75 72 65 2E 65 78 65 2C  ngryCapture.exe,
73 63 72 65 65 6E 74 68  69 65 66 2E 65 78 65 2C  screenthief.exe,
43 61 70 74 75 72 65 4D  79 53 63 72 65 65 6E 2E  CaptureMyScreen.
65 78 65 2C 43 61 70 74  75 72 65 2D 41 2D 53 63  exe,Capture-A-Sc
72 65 65 6E 53 68 6F 74  2E 65 78 65 2C 63 6C 69  reenShot.exe,cli
70 70 65 72 2E 65 78 65  2C 43 61 70 74 75 72 65  pper.exe,Capture
2E 45 58 45 2C 45 61 73  79 53 63 72 65 65 6E 53  .EXE,EasyScreenS
68 6F 74 2E 65 78 65 2C  53 63 72 65 65 6E 73 68  hot.exe,Screensh
6F 74 2E 65 78 65 2C 4D  52 47 65 74 53 63 72 65  ot.exe,MRGetScre
65 6E 2E 65 78 65 2C 4E  75 47 65 6E 53 63 72 65  en.exe,NuGenScre
65 6E 43 41 50 2E 65 78  65 2C 51 75 69 63 6B 20  enCAP.exe,Quick
53 63 72 65 65 6E 65 72  2E 65 78 65 2C 53 61 76  Screener.exe,Sav
65 53 6E 61 70 2E 65 78  65 2C 53 63 72 65 65 6E  eSnap.exe,Screen
53 68 6F 6F 74 65 72 2E  65 78 65 2C 53 63 72 65  Shooter.exe,Scre
65 6E 20 53 68 6F 74 20  50 72 6F 2E 65 78 65 2C  en Shot Pro.exe,
53 63 72 65 65 6E 47 72  61 62 62 65 72 2E 65 78  ScreenGrabber.ex
65 2C 76 69 64 65 6F 63  61 70 74 75 72 65 2E 65  e,videocapture.e
78 65 2C 53 63 72 65 65  6E 50 72 6F 6A 65 63 74  xe,ScreenProject
2E 45 58 45 2C 76 73 63  61 70 2E 45 58 45 2C 49  .EXE,vscap.EXE,I
44 4D 61 6E 2E 65 78 65  2C 49 45 4D 6F 6E 69 74  DMan.exe,IEMonit
6F 72 2E 45 58 45 2C 6C  79 2E 65 78 65 2C 46 6C  or.EXE,ly.exe,Fl
61 73 68 42 61 63 6B 20  52 65 63 6F 72 64 65 72  ashBack Recorder
2E 65 78 65 2C 54 65 61  6D 56 69 65 77 65 72 2E  .exe,TeamViewer.
65 78 65 3C 2F 42 4C 4F  43 4B 3E 3C 42 4C 4F 43  exe</BLOCK><BLOC
4B 32 3E 4E 2F 41 3C 2F  42 4C 4F 43 4B 32 3E 3C  K2>N/A</BLOCK2><
4B 3E 6C 45 52 63 6F 6E  51 31 53 46 6D 35 6E 4A  K>lERconQ1SFm5nJ
75 6C 36 45 54 5A 45 77  3D 3D 3C 2F 4B 3E 3C 50  ul6ETZEw==</K><P
4B 3E 6B 59 41 4A 68 51  67 37 59 7A 37 59 56 2B  K>kYAJhQg7Yz7YV+
61 57 75 39 6C 46 5A 77  3D 3D 3C 2F 50 4B 3E 00  aWu9lFZw==</PK>


第15步:查找“第14步”aes解密结果中<CLIENT>与</CLIENT>中间的字符与/data/data/com.huplayer.neon/files/indiv3.key中的字符比较是否相同,(应当是机器指纹)
如果不相等提示 client info is not correct
字符串为:41FCD0AB935789C59193A29D7E184B8E
libmplayer.so:5EB5B0A4 STRD            R8, [SP,#0xDF0+var_D80]
libmplayer.so:5EB5B0A8 BL              strstr                  ; <CLIENT>
libmplayer.so:5EB5B0AC LDR             R1, =(unk_5F5AB074 - 0x5EB5B0B8)
libmplayer.so:5EB5B0B0 ADD             R1, PC, R1 ; unk_5F5AB074
libmplayer.so:5EB5B0B4 ADD             R0, R0, #8
libmplayer.so:5EB5B0B8 STR             R0, [SP,#0xDF0+var_D3C]
libmplayer.so:5EB5B0BC BL              strstr                  ; </CLIENT>
libmplayer.so:5EB5B0C0 STRB            R5, [R0]
libmplayer.so:5EB5B0C4 MOV             R4, R0
libmplayer.so:5EB5B0C8 LDR             R0, [SP,#0xDF0+var_D3C]
libmplayer.so:5EB5B0CC BL              strlen_0
libmplayer.so:5EB5B0D0 LDR             R1, [SP,#0xDF0+var_DA4]
libmplayer.so:5EB5B0D4 MOV             R2, R0
libmplayer.so:5EB5B0D8 LDR             R0, [SP,#0xDF0+var_D3C]
libmplayer.so:5EB5B0DC BL              memcmp_0                ; 比较是否相等
libmplayer.so:5EB5B0E0 SUBS            R6, R0, #0
libmplayer.so:5EB5B0E4 BEQ             loc_5EB5B534


第16步:查找“第14步”aes解密结果中</BLOCK2><K></K>中的base64(lERconQ1SFm5nJul6ETZEw==)字符,并解码。
libmplayer.so:5EB5C3AC BL              strstr
libmplayer.so:5EB5C3B0 ADD             R1, PC, R11 ; unk_5F5AB3B4
libmplayer.so:5EB5C3B4 ADD             R11, R0, #3
libmplayer.so:5EB5C3B8 MOV             R0, R11
libmplayer.so:5EB5C3BC BL              strstr
libmplayer.so:5EB5C3C0 MOV             R2, #0x10
libmplayer.so:5EB5C3C4 MOV             R1, R11
libmplayer.so:5EB5C3C8 MOV             R4, R0
libmplayer.so:5EB5C3CC ADD             R0, SP, #0xDF0+var_CE4
libmplayer.so:5EB5C3D0 STRB            R6, [R4],#1
libmplayer.so:5EB5C3D4 BL              av_base64_decode
libmplayer.so:5EB5C3D8 LDR             R2, =(unk_5F5AB3BC - 0x5EB5C


解码后
[COLOR="red"]94 44 5C A2 74 35 48 59  B9 9C 9B A5 E8 44 D9 13 (这是做解密视频数据用的密钥)[/COLOR]

第17步:查找“第14步”aes解密结果中<PK>与</PK>中的base64(kYAJhQg7Yz7YV+aWu9lFZw==)字符并解码。
libmplayer.so:5EB5C3D8 LDR             R2, =(unk_5F5AB3BC - 0x5EB5C3E8)
libmplayer.so:5EB5C3DC MOV             R0, R4
libmplayer.so:5EB5C3E0 ADD             R1, PC, R2 ; unk_5F5AB3BC
libmplayer.so:5EB5C3E4 BL              strstr                  ; <PK>
libmplayer.so:5EB5C3E8 ADD             R1, PC, R5 ; unk_5F5AB3C4
libmplayer.so:5EB5C3EC ADD             R5, R0, #4
libmplayer.so:5EB5C3F0 MOV             R0, R5
libmplayer.so:5EB5C3F4 BL              strstr                  ; </PK>
libmplayer.so:5EB5C3F8 MOV             R1, R5
libmplayer.so:5EB5C3FC MOV             R2, #0x10
libmplayer.so:5EB5C400 STRB            R6, [R0]
libmplayer.so:5EB5C404 ADD             R0, SP, #0xDF0+var_CD4
libmplayer.so:5EB5C408 BL              av_base64_decode

解码后
91 80 09 85 08 3B 63 3E  D8 57 E6 96 BB D9 45 67

第18步:aes解密“第17步”中base64解码后的值,密钥为“第10步”sha1计算得到的值第14位开始后16字节55 02 FF BD 15 AF 45 A9  81 DD A3 2C F8 3D 85 9E
libmplayer.so:5EB5C424 MOV             R4, R0
libmplayer.so:5EB5C428 BL              av_aes_init
libmplayer.so:5EB5C42C LDR             R12, [SP,#0xDF0+var_DB4]
libmplayer.so:5EB5C430 ADD             R2, SP, #0xDF0+var_CD4
libmplayer.so:5EB5C434 ADD             R1, SP, #0xDF0+var_CC4
libmplayer.so:5EB5C438 MOV             R0, R4
libmplayer.so:5EB5C43C MOV             R3, R12
libmplayer.so:5EB5C440 STMEA           SP, {R6,R12}
libmplayer.so:5EB5C444 BL              av_aes_crypt
libmplayer.so:5EB5C448 MOV             R0, R4


解密后
35 37 61 66 63 66 62 39  38 31 62 36 34 61 30 37  (字符57afcfb981b64a07)

第18步:计算视频检验值,分别计算加密视频头0Xc2字节、”第18步”aes解密的结果、字符串"SIGN"。
libmplayer.so:5EB5C458 MOV             R1, #0x100
libmplayer.so:5EB5C45C MOV             R4, R0
libmplayer.so:5EB5C460 BL              av_sha_init
libmplayer.so:5EB5C464 LDR             R12, [SP,#0xDF0+var_D14]
libmplayer.so:5EB5C468 ADD             R1, SP, #0xDF0+var_430
libmplayer.so:5EB5C46C MOV             R0, R4
libmplayer.so:5EB5C470 ADD             R1, R1, #4
libmplayer.so:5EB5C474 SUB             R2, R12, #0xF
libmplayer.so:5EB5C478 BL              av_sha_update           ; 加密视频头0xC2字节
libmplayer.so:5EB5C47C MOV             R0, R4
libmplayer.so:5EB5C480 ADD             R1, SP, #0xDF0+var_CC4
libmplayer.so:5EB5C484 MOV             R2, #0x10
libmplayer.so:5EB5C488 BL              av_sha_update           ; 35 37 61 66 63 66 62 39  38 31 62 36 34 61 30 37  (字符57afcfb981b64a07)
libmplayer.so:5EB5C48C LDR             R3, =(aSign - 0x5EB5C4A0)
libmplayer.so:5EB5C490 MOV             R2, #4
libmplayer.so:5EB5C494 MOV             R0, R4
libmplayer.so:5EB5C498 ADD             R1, PC, R3              ; "SIGN"
libmplayer.so:5EB5C49C BL              av_sha_update           ; SIGN
libmplayer.so:5EB5C4A0 MOV             R0, R4
libmplayer.so:5EB5C4A4 ADD             R1, SP, #0xDF0+var_C94
libmplayer.so:5EB5C4A8 BL              av_sha_final
libmplayer.so:5EB5C4AC MOV             R0, R4

结果为:
39 34 53 B6 DE B8 AF B9  D7 2B 14 25 85 1C B9 D2
D2 79 B3 B2 28 B7 BA 82  F0 49 07 9E 71 6A 5E BF


第19步:比较sha1值,检验视频是否有被篡改,比较“第5步”与“第18步”计算的值是否相等,不相等提示 sign is not correc。

第20步:上面操作完成后再将解密后的v3.lic数据加密写入文件。

第21步:rc4解密视频数据,密钥为“第16步”计算得到的值94 44 5C A2 74 35 48 59 B9 9C 9B A5 E8 44 D9 13。
ibmplayer.so:5EB60A38 ADD             R0, SP, #0xA4
libmplayer.so:5EB60A3C BL              av_rc4_init
libmplayer.so:5EB60A40 LDR             R1, [R10,#0x20]
libmplayer.so:5EB60A44 LDR             R3, [R10,#0x30]
libmplayer.so:5EB60A48 ADD             R0, SP, #0xA4
libmplayer.so:5EB60A4C MOV             R5, #0
libmplayer.so:5EB60A50 MOV             R12, #1
libmplayer.so:5EB60A54 MOV             R2, R1
libmplayer.so:5EB60A58 STR             R5, [SP]
libmplayer.so:5EB60A5C STR             R12, [SP,#4]
libmplayer.so:5EB60A60 BL              av_rc4_crypt


四:总结与写程序解密视频。
解密过程中读取头部密钥标识和许可证的内容的,这些内容通个base64与其它算法多层加密,通过sha1进行检验,防止头部信息被非法修改。
内容解密过程可以简单描述为,首先使用base64解码视频加密头中的密钥,然后使用rc4解密该密钥,再使用SHA-1散列算法计算得到32位值,这个散列值的第n字节开始后16字节将用作解密过程中使用的密钥。这16个字节将作为一个密钥,通过base64、RC4、sha1、aes等算法解密indiv3.key与V3.lic中的内容,最终得到一个16字节解密视频的密钥。

程序流程分析清楚,可以写解密程序了:
现在可以写一个解密程序解密视频了,首先定位到要解密的数据,
根据WMA结构,WMA文件它的头16个字节是固定的,为十六进制的“30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C”,用来标识这个是否为WMA文件,接下来的8个字节为一个整
数,表示整个WMA文件头部的大小, 分析发现加密头的大小(261)加上WMA文件头的大小加上50字节到须要解密的数据。
程序代码如下:
#include <stdio.h>
#include <malloc.h>
#include <Windows.h>
#include "rc4.h"


//-传入文件名柄判断是否为DRM保护的视频
bool isDrmVideo(FILE* fp)
{
	int ret = 0;
	unsigned char DrmTag[4] = {0x58, 0x44, 0x52, 0x4D}; //"XDRM";
	unsigned char buffer[4] = {0x00};
	if (NULL == fp)
	{
		return false;
	}
	ret = fread(buffer, sizeof(unsigned char), 4, fp);
	if (ret != 4)
	{
		printf("读取文件出错!\n");
		return false;
	}
	if ( 0 == memcmp(buffer, DrmTag, 4) )
	{
		return true;
	}

	return false;
}

//传入视频buffer与大小返回wma文件头地址
unsigned long getwmaHead(unsigned char* buffer, unsigned char* tag, unsigned long size)
{

	if (NULL == buffer || 0 == size)
	{
		return 0;
	}
	for (int i=0; i<= size; i++)
	{
		if ( 0 == memcmp(buffer+i, tag, 16) )
		{
			return (unsigned long)buffer+i;
		}
	}
	return 0;
}

//返回整个WMA文件头部的大小
unsigned long getwmaHeadSize(unsigned char* buffer)
{

	if (NULL == buffer)
	{
		return 0;
	}

	buffer += 16;//wma头标志长度为
	return *(unsigned long*)buffer;
}

int main(int argc, char* argv[])
{
	FILE* fpVideo = NULL;
	FILE* fpDecVideo = NULL;
	unsigned char* wmaBuffer = NULL;
	int ret = 0;

	struct rc4_state rc4;
	
	//--软件调试key
	unsigned char rc4_key[16] = {0x94, 0x44, 0x5C, 0xA2, 0x74, 0x35, 0x48, 0x59, 0xB9, 0x9C, 0x9B, 0xA5, 0xE8, 0x44, 0xD9, 0x13};

	//test key
	//unsigned char rc4_key[16] = {0XAE, 0X78, 0XFC, 0XF4, 0X99, 0XA8, 0XAF, 0X0E, 0XFE, 0XB1, 0X6E, 0X4B, 0XE4, 0XE9, 0XF9, 0X41};

	unsigned long fileSize = 0;
	unsigned long wmaStartAddress = 0;

	//-以MB为单位
	unsigned long fileSize_mb = 0;
	//WMA文件头部的大小8个字节
	unsigned long wmaHeadSize = 0;
	//用来标识是否为WMA文件
	unsigned char wmaTag[16] = {0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9, 0x00, 0xAA, 0x00, 0x62, 0xCE, 0x6C};

	if (argc <= 1)
	{  
		printf("请输入要解密的文件!\n");
		return -1;
	} 

	fpVideo = fopen(argv[1], "rb");
	if (NULL == fpVideo)
	{
		printf("File open error\n");
		return -1;
	}

	//--判断是否为加密的视频
	if (!isDrmVideo(fpVideo))
	{
		printf("您要解密的不是DRM保护的文件!\n");
		goto err_exit;
	}

	//--求文件大小
	fseek(fpVideo, 0, SEEK_END);  
	fileSize = ftell(fpVideo); 
	fseek(fpVideo, 0, SEEK_SET);

	wmaBuffer = (unsigned char*)malloc(fileSize);
	if (NULL == wmaBuffer)
	{
		goto err_exit;
	}
	memset(wmaBuffer, 0, fileSize);
	//-转换成MB为单位
	fileSize_mb = fileSize / 1024*1024;

	//如果大于G的就分块读取
	/*if (fileSize_mb > 1024)
	{
		//每一次读MB
	}*/

	ret = fread(wmaBuffer, sizeof(unsigned char), fileSize, fpVideo);
	if (ret == 0)
	{
		printf("读取文件出错!\n");
		goto err_exit;
	}

	//--定位到wma文件头
	wmaStartAddress = getwmaHead(wmaBuffer, wmaTag, fileSize);
	if (0 == wmaStartAddress)
	{
		printf("获取wma文件头出错!\n");
		goto err_exit;
	}

	wmaHeadSize = getwmaHeadSize((unsigned char*)wmaStartAddress);
	if (0 == wmaHeadSize || wmaHeadSize > fileSize)
	{
		printf("获取wma文件头大小出错!\n");
		goto err_exit;
	}

	//--写入wma头文件

	char decFileName[256] = "dec_";
	strcat(decFileName,argv[1]);
	fpDecVideo = fopen(decFileName,"wb");
	if (NULL == fpDecVideo)
	{
		printf("创建解密文件出错!\n");
		return -1;
	}
	ret = fwrite((unsigned char*)wmaStartAddress, sizeof(unsigned char), wmaHeadSize+50, fpDecVideo);
	if (ret != wmaHeadSize+50)
	{
		printf("写入解密文件出错\n");
		goto err_exit;
	}

	//--定位到要解密的数据处
	wmaStartAddress += wmaHeadSize+50;


	//--将指针移到加密数据处(加密头+离加密数据大小偏移)
	fseek(fpVideo,wmaHeadSize+50+261,SEEK_SET);
	
	const int NUM  = fileSize/8000;//解密任务完成总量
	int i = 0;

	while(true)
	{

	    //-解密数据rc4
		memset(&rc4,0,sizeof(rc4));
		rc4_init(&rc4,rc4_key,sizeof(rc4_key));
		memset(wmaBuffer, 0, fileSize);
		ret = fread(wmaBuffer, sizeof(unsigned char), 8000, fpVideo);
		if (0 == ret || NULL == wmaBuffer)
		{
			printf("\n解密完成(^_^) \n");
			break;
		}
		rc4_crypt(&rc4,(unsigned char*)wmaBuffer,ret);
		ret = fwrite((unsigned char*)wmaBuffer, sizeof(unsigned char), ret, fpDecVideo);
		if (ret == 0)
		{
			printf("写入解密文件出错\n");
			goto err_exit;
		}

		fflush(fpDecVideo);

		//输出百分比
		printf("正在解密-> %.2lf%%\r", i * 100.0/ NUM);
		i++;
	}


err_exit:
	if (NULL != fpVideo)
	{
		fclose(fpVideo);
		fpVideo = NULL;
	}
	if (NULL != fpDecVideo)
	{
		fclose(fpDecVideo);
		fpDecVideo = NULL;
	}
	if (NULL != wmaBuffer)
	{
		free(wmaBuffer);
		wmaBuffer = NULL;
	}
	return 0;
}


五:测试解密程序
1.        测试解密一个视频,如下图

2.        解密成功完成后生成一个dec开头的文件,打开播放,如下图:

成功播放


完成

解密程序及样本
bin.zip
src.zip
测试视频样本.zip
文档.zip

播放器
播放器.part1.rar
播放器.part2.rar
播放器.part3.rar
播放器.part4.rar
播放器.part5.rar

某教学视频解密前后
http://yunpan.cn/lk/cyTUFaLqYxAgY (提取码:df99)

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞3
打赏
分享
最新回复 (28)
雪    币: 227
活跃值: (1245)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
炎黄一脉 2015-1-20 14:51
2
0
膜拜加密视频提取牛~V5。
雪    币: 7474
活跃值: (2689)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
netwind 13 2015-1-20 15:17
3
0
感谢楼主分享!
雪    币: 218
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
逍遥枷锁 2015-1-20 15:23
4
0
非常给力的分析解密,终于看到这个网络验证的加密也搞掉了,谢谢。
雪    币: 62
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
publickey 2015-1-20 15:26
5
0
貌似是WMDRM
雪    币: 178
活跃值: (317)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jiych 2015-1-20 15:42
6
0
先顶后看
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JackJoker 2015-1-20 15:59
7
0
楼主厉害,该帖貌似要火。
雪    币: 62
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
publickey 2015-1-20 16:24
8
0
仔细看,应该不是WMDRM。
加解密算法上,看上去确实很像WMDRM,但是架构和流程还是很不一样。
WMDRM的license被设备收到后,会存储于hds数据库,不会作为文件单独存储,更不可能还会有一个key文件。
WMDRM的内容密钥仅存储于license,是使用设备证书中的公钥用ECES加密的,设备证书及其匹配私钥是由微软签发。
使用内容密钥解密内容的流程也大不一样。内容的每一个payload都是用不同的rc4密钥,每个rc4密钥都是使用内容密钥做种子,综合使用sha1/aes等算法生成。

用DRM保护流媒体确实是没法做到安全。
雪    币: 114
活跃值: (155)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qqlinhai 2015-1-20 18:03
9
0
谢谢分享
雪    币: 341
活跃值: (133)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
地狱怪客 2 2015-1-20 18:42
10
0
牛叉。。。。
雪    币: 250
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
OnlyEnd 2015-1-20 19:11
11
0
三哥威武啊!
雪    币: 370
活跃值: (1181)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
ThomasKing 6 2015-1-20 19:32
12
0
前排支持楼主!
雪    币: 60
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
white、、 2015-1-20 20:31
13
0
感谢,每次都是新的元素,
雪    币: 1714
活跃值: (555)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
蓝枫 2015-1-21 10:04
14
0
不错不错,学习了。。。
雪    币: 55
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tonydebug 2015-1-21 11:46
15
0
三哥呀,在吾爱看到你的申请ID贴
雪    币: 3902
活跃值: (5545)
能力值: ( LV13,RANK:550 )
在线值:
发帖
回帖
粉丝
我是小三 11 2015-1-21 18:40
16
0
多谢各位支持与鼓励。
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
Ericky 6 2015-1-22 13:58
17
0
前排支持三爷!
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zjomin 2015-5-11 10:42
18
0
经典,测试不错

可以用于提取加密视频,前提是需要有密钥
雪    币: 18
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
六卖神剑 2015-5-14 14:13
19
0
请教楼主用什么工具解密rc4和aes呢?我13、14步的rc4和aes解密都是乱码,另外这两个解码的密钥和密文都是用十六进制的代码吗?
雪    币: 21
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhangdadan 2015-6-25 22:13
20
0
您好,感谢和膜拜先~
门外汉求教,要提取huplayer才能播放的mp4视频,已有key和lic,用您提供的程序提示:获取wma文件头出错。请问把您写的程序中getwmahead等命令改成getmp4head等能行吗?不然怎么提
(发现每个mp4视频32字节检验码后面的16个字节头部和8字节头部大小都一样)
雪    币: 10
活跃值: (109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
youyinkai 2015-9-9 10:54
21
0
除了膜拜还是膜拜啊!!!!!!!!!!!
雪    币: 90
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
龙啸风尘 2015-10-1 23:54
22
0
这个要好好读读,膜拜~~~~~~~
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
延枫Alvin 2016-7-4 13:42
23
0
貌似这种方法不具有通用性啊,我用楼主的方法就是破解不了
雪    币: 106
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
haiyazzff 2017-5-25 14:21
24
0
感谢楼主分享!
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
onlyxuyang 2017-6-3 10:37
25
0
有几点疑惑:
1.userload的android一般是没有权限运行调试器的,楼主是如何做到的?
2.这种纯sw的drm保护是最低等级的,严格的drm保护是会结合ARM的trustzone实作drm部分和SVP(secure  video  path),除非找到漏洞,不然是没办法破解的
游客
登录 | 注册 方可回帖
返回