Fetching...

-

Just a minute...

关键词:缓存解密,批量自动执行脚本,版权保护相关建议。

img

前段时间,某音乐被爆其缓存文件只使用了简单的异或加密,且容易得到加密密钥为0xa3。原文链接点击这里。以下是我的延伸探讨。

1.对音频缓存的批量解密攻击

抱着好奇的心理,我把手机里面该音乐的缓存转到了电脑上面,如图:

img

据分析这些UC!文件就是加密后的MP3文件。

用010editor打开其中一个文件,发现存在很多0xa3的字符,如果我们断定网易云用的是异或加密,那么极有可能原文就是0x00,那么异或的密钥就是0xa3。还原得到可以被qq音乐播放的mp3文件:

img

通过010editor逐一分析,发现加密密钥的确都是0xa3。既然加密密钥都是同一个,那么用010editor手改上百个文件就太难受了,能否写一个脚本或者程序来跑一下呢?

由于我刚学了java,觉得java文件流很不错,于是我就用java编写以下脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.io.*;

public class Main {
static FileInputStream fis;
static FileOutputStream fos;
public static void main(String[] args) throws IOException {
// write your code here
String path = "*********";
travelfolder(path);
}
public static void travelfolder(String path) throws IOException {
File file = new File(path);
if (file.exists()) {
File[] files = file.listFiles();
if (null != files) {
for (File file2 : files) {
if (file2.isDirectory()) {//文件夹
System.out.println("进入文件夹:" + file2.getAbsolutePath());
travelfolder(file2.getAbsolutePath());//深度优先遍历算法
}
else {
//普通文件
if(file2.getName().substring(file2.getName().length()-3).equals("mp3"))
{
//这些是已经改好的文件,不必修改
System.out.println("MP3文件:" + file2.getAbsolutePath());
}
else if(file2.getName().substring(file2.getName().length()-3).equals("uc!"))
{
//这些文件还没修改
System.out.println("UC!文件:" + file2.getAbsolutePath());
fis = new FileInputStream(file2);
File newfile = new File(file2.getName().substring(0,file2.getName().length()-4));//把uc!文件变为mp3文件
fos = new FileOutputStream(path+"\\"+newfile);
byte[] buf = new byte[1024];//缓冲区
int length = 0;
while((length = fis.read(buf)) != -1){
for(int i=0;i<length;i++)
{
buf[i]^=0xa3;//还原
}
fos.write(buf);
}
fis.close();
fos.close();
}
}
}
}
} else {
System.out.println("文件不存在!");
}
}
}

于是开始运行这段代码:

img

运行后就得到了我们想要的mp3文件啦!

img

2.音频缓存加密过于简单的原因

当然,音频的缓存文件是不可能太过于复杂的,我们听音频的时候,是很讲求时效性的,如果使用太复杂的加密方式,那么可能会导致播放器卡顿。使用异或的加密方式,虽然不太安全,但是还原起来还是很容易的。有时候,安全和性能往往会相互牵制,因此对产品开发者来说,需要把握好安全和性能间的平衡。当然,该音乐应用对安全的把握其实是不太好的,因为解密一首音乐,甚至可以不用写脚本。

3.对音频缓存加密方式的建议

其实该音乐应用可以改进加密算法,提高密钥空间的分析。

市面上目前也有很多音乐应用,使用了比较好的加密算法。

例如qq音乐采用了tea加密。如果tea加密比较复杂的话,我认为用维吉尼亚加密也可以,但是注意密钥要稍微长一些,不然通过对文件头的分析是可以把密钥给重新还原的。

Related post
Comment
Share
  • ACTF2020密码学部分writeup

    编写的项目文件请参考项目链接。同时欢迎大家访问ACTF2020的所有赛题。喜欢的话请多多资瓷一下,给我们实验室的项目加个Star或者Fork,谢谢。 为了保护服务器的同时不给选手带来更多困难,密码学部分的交互题开了pow算力检测,我也...

    ACTF2020密码学部分writeup
  • 通过python脚本自动插入汇编反调试代码

    研究背景在之前OLLVM项目的研究过程中,我们发现反调试技术对反混淆脚本有一定的干扰作用,如果可以在OLLVM的中间代码中自动化插入反调试代码,那么就可以给OLLVM的代码混淆增加一层保障。 方案分析探讨多种方案以后,我认为最适合在汇...

    通过python脚本自动插入汇编反调试代码
  • 基于门限方案的条形码保密及容错技术

    关键词:门限方案,条形码保密,条形码容错,条形码认证与防伪造。 经历过初期两个小项目的探索,我们项目团队积累了一定的项目研究经验,在老师和16级学长的帮助下,我们把研究方向转到了门限方案的实际应用上。结合市面上用9张合并的条形码提高条...

    基于门限方案的条形码保密及容错技术
  • 2020新年原创脚本-其中的小把戏你清楚吗

    关键词:随机数素数生成,新年祝福小程序。 脚本创作这是我在大年三十写的一个程序,当时我正准备去伯克利交流,但由于疫情的缘故,出国变数增大,所以我就打算通过随机数“未卜先知”。以下就是我的脚本: 12345678910111213141...

    2020新年原创脚本-其中的小把戏你清楚吗
  • 基于CRT的物流信息安全处理方案

    关键词:中国剩余定理,密钥分发技术,隐私保护。 引言在2018年11月份的时候,段老师在密码学课上讲到了密钥分发协议,我当时就觉得这个协议很有意思也很有应用前景。后来老师还很主动地分享了一下它的idea,其中一部分就是有关物流单上的信...

    基于CRT的物流信息安全处理方案
  • 基于CRT的新型群文件共享系统

    关键词:隐私保护,权限管理,身份认证,中国剩余定理,密钥分发,密钥更新。 这个项目的是在2019年寒假期间进行的,4月份在中南大学信息安全作品赛答辩,但是由于功能只实现了主体部分,加之我在台上比较胆怯紧张,所以只获得团队三等奖,但是当...

    基于CRT的新型群文件共享系统
  • 安卓反混淆软件探索-deobf

    关键词:代码混淆,代码反混淆及其原理,代码反混淆软件测试与性能对比。 前言我们的大创项目其实是分两方面进行的,一方面,我们从代码混淆的角度比较各种软件对安卓程序的加固能力;另一方面,我们着重针对OLLVM进行反混淆测试。OLLVM集成...

    安卓反混淆软件探索-deobf
  • 记一次安卓代码加固软件的测试过程

    关键词:代码加固,软件测试,原理分析,过程分析。 在大创项目的实践中,我们对市面上的一些安卓代码加固软件进行了采集,经过搜集,发现了几类代码加固方法并分组进行研究。我发现很多代码加固软件都是对java字节码进行混淆与加固,另外一些则选...

    记一次安卓代码加固软件的测试过程
  • 对OLLVM代码加固技术的改进

    1.反静态调试反静态调试可以通过花指令,代码加密,代码加壳等方式实现。 请看图1所示的一段反调试代码: ​ 图1 花指...

    对OLLVM代码加固技术的改进
  • OLLVM代码加固机制分析

    我们通过自己编写测试代码,再用OLLVM的不同指令进行加固,并逆向查看加固效果,加深对代码加固机理的了解。OLLVM目前提供的功能包括控制流平坦化(fla指令),指令替代(sub指令),代码虚拟化(bcf指令)以及虚假控制流(obf指...

    OLLVM代码加固机制分析
Please check the parameter of comment in config.yml of hexo-theme-Annie!