环境及工具

手机        :小米手机 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查找是否存在。

yJ3pPh4RItrcgckEtqjS+Q==与nZjpa0hCd9vfh5oAt6nf9A==

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 ; 查找yJ3pPh4RItrcgckEtqjS+Q==

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 ; 查找nZjpa0hCd9vfh5oAt6nf9A==

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中的与并获得与中间的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 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

3E 3C 50 43 3E 31 3C 2F 50 43 3E 3C 4C 44 3E 31 >11

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 00

3C 44 45 3E 31 3C 2F 44 45 3E 3C 4E 4F 3E 2D 31 1-1

30 3C 2F 4E 4F 3E 3C 49 44 3E 31 33 30 34 31 35 0130415

31 36 37 38 35 30 30 30 30 30 30 30 3C 2F 49 44 167850000000

3E 3C 42 44 3E 31 32 39 34 36 39 37 31 36 30 30 >12946971600

30 30 30 30 30 30 30 3C 2F 42 44 3E 3C 45 58 3E 0000000

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


61200

30 3C 2F 48 52 3E 3C 42 4C 4F 43 4B 3E 77 6D 65 0wme

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

4B 32 3E 4E 2F 41 3C 2F 42 4C 4F 43 4B 32 3E 3C K2>N/A<

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==

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==

第15步:查找“第14步”aes解密结果中与中间的字符与/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 ;

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 ;

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解密结果中中的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解密结果中与中的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 ;

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 ;

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

#include

#include

#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)

上传的附件:

1.png

(100.37kb,75次下载)

2.png

(94.87kb,63次下载)

结构图.jpg

(153.34kb,109次下载)

解密.jpg

(6.36kb,59次下载)

解密完成.jpg

(18.53kb,43次下载)

播放.jpg

(34.32kb,53次下载)

bin.zip

(4.40kb,632次下载)

src.zip

(10.61kb,452次下载)

测试视频样本.zip

(309.02kb,407次下载)

文档.zip

(1.22MB,558次下载)

播放器.part1.rar

(2.00MB,431次下载)

播放器.part2.rar

(2.00MB,387次下载)

播放器.part3.rar

(2.00MB,390次下载)

播放器.part4.rar

(2.00MB,391次下载)

播放器.part5.rar

(226.45kb,335次下载)

drm android 工作原理,[原创]某DRM解密流程简单分析相关推荐

  1. Microsoft PlayReady DRM及其工作原理

    翻译.编辑:Alex 技术审校:刘姗 本文来自OTTVerse,作者为Krishna Rao Vijayanagar. ▲扫描图中二维码了解音视频技术大会更多信息▲ Easy-Tech #022# M ...

  2. Apple FairPlay DRM及其工作原理

    翻译.编辑:Alex 技术审校:刘姗 本文来自OTTVerse,作者为Krishna Rao Vijayanagar. ▲扫描图中二维码了解音视频技术大会更多信息__▲ Easy-Tech #020# ...

  3. spring boot actuator工作原理之http服务暴露源码分析

    spring boot actuator的官方文档地址:https://docs.spring.io/spring-boot/docs/current/reference/html/productio ...

  4. ISP(图像信号处理)算法概述、工作原理、架构、处理流程

    目录 ISP的主要内部构成:ISP内部包含 CPU.SUP IP(各种功能模块的通称).IF 等设备 ISP的控制结构:1.ISP逻辑    2.运行在其上的firmware ISP上的Firmwar ...

  5. Solr的工作原理(最直白的解释,简单易懂)懂?

    Solr 什么是Solr Solr是一个开源搜索平台,用于构建搜索应用程序. 它建立在Lucene(全文搜索引擎)之上. Solr是企业级的,快速的和高度可扩展的. 使用Solr构建的应用程序非常复杂 ...

  6. USB OTG的工作原理-相互切换和交互流程

    USB OTG的工作原理 OTG补充规范对USB 2.0的最重要的扩展是其更具节能性的电源管理和允许设备以主机和外设两种形式工作.OTG有两种设备类型:两用OTG设备(Dualrole device) ...

  7. linux下nand flash驱动工作原理,Linux下Nand Flash 驱动代码分析

    随着越来越多的平台支持从Nand Flash 中启动,掌握Nand Flash 的驱动编写有着重要的现实意义,由于内核已经完成了大部分的工作,实际工作中大部分工程师对Nand Flash 驱动只是简单 ...

  8. 浏览器工作原理:浅析HTTP请求流程

    一个 TCP 连接过程包括了建立连接.传输数据和断开连接三个阶段. 而 HTTP 协议,正是建立在 TCP 连接基础之上的.HTTP 是一种允许浏览器向服务器获取资源的协议,是 Web 的基础,通常由 ...

  9. Android livedata原理解析之自己实现一个简单的LiveData

    LiveData其实就是通过管理生命周期来实现当视图不可见时不渲染数据,当视图可见时再渲染数据.当在一个Activity发送一个网络请求后,立马切到另一个界面或都按下Home键,使得视图不可见..这个 ...

  10. viper12a引脚功能图_VIPER22A VIPER12A工作原理引脚功能应用电路图纸与分析

    VIPER22A代换:可用AP8022A,DK112直接代换.VIPER22A可以代换功率较小的VIPER12A VIPER12A 与 VIPER22A 两者输出功率不一样. VIPer12A最高输出 ...

最新文章

  1. 到2030年,智能农业或将养活85亿人!但网络安全威胁需要重视
  2. [转]PetShop的系统架构设计
  3. python -pass的用法
  4. 万字详解Lambda、Stream和日期
  5. mysql 四种存储引擎
  6. 第二章 信息的表示和处理
  7. 三星Galaxy Fold 2渲染图曝光:怎么折是个问题
  8. python搭建网页_使用python快速搭建本地网站
  9. java算法题解法_LeetCode算法题-Ugly Number(Java实现-四种解法)
  10. 容器技术Docker K8s 12 容器服务Kubernetes版ACK详解-使用镜像快速创建无状态应用
  11. KBQA-Bert学习记录-CRF模型
  12. 驱动程序安装全攻略1
  13. wsl2教程可以代替linux吗,WSL2安装使用
  14. The Sultan's Successors
  15. 一文读懂超融合与私有云的区别与联系
  16. Android 疑难杂症系列
  17. 学习笔记(5)品牌查询实现
  18. *【CodeForces - 768B】Code For 1 (分治策略,模拟二分思想,模拟线段树思想)
  19. 推算几天后的日期 —— 代码篇
  20. 中国少数民族古籍数字化平台研究进展

热门文章

  1. win7计算机序列号在哪里,win7系统如何查看主板序列号?win7系统查看主板序列号的详细步骤图文教程...
  2. 将心比心,我要有点骨气
  3. This scheduler instance is still active but was recovered by another instanc解决办法
  4. 如何回答面试官“你为什么从上家公司离职”?
  5. Packet Tracer 思科模拟器入门教程 之十一 路由器静态路由配置
  6. Twitter群推王的推特自动发帖功能是如何实现的
  7. mysql cluster部署_mysql cluster部署
  8. 计算机技术在排水领域的应用,计算机软件在排水工程设计上的应用解析
  9. stm32 usb 虚拟串口驱动 - win7 64位安装
  10. MFC release 发送到桌面快捷方式图标问题