循环冗余效验(Cyclic Redundancy Check, CRC)
是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。

原理:

循环冗余校验同其他差错检测方式一样,通过在要传输的k比特数据D后添加(n-k)比特冗余位(又称帧检验序列,Frame Check Sequence,FCS)F形成n比特的传输帧T,再将其发送出去。
校验码格式
特别的,循环冗余校验提供一个预先设定的(n-k+1)比特整数P,并且要求添加的(n-k)比特F满足:
T mod P == 0 ……(1)
T = 2n-kD + F …… (2)
基于上述要求,实际应用时,发送方和接收方按以下方式通信:
1、发送方和接收方在通信前,约定好预设整数P
2.、发送方在发送前通过(1)和(2)式确定并填充F,然后发送。
3、 接收方收到数据,进行 result = T mod P 运算,当且仅当result = 0时接收方认为没有差错。
发送方在发送数据前需要确定填充的(n-k)比特F

——原理摘自百度百科

 
 xman Misc-1
题目:
 
1、特征
  • 一般有很多zip的压缩包,
  • 解压需要密码,且密码复杂,不可爆破
  • 每个包很小,仅几k
 
2、思路
由于文件很小只几个字节,可以对其中的内容进行穷举,穷举后计算crc并与原文件的crc码对比。
 
3、writeup
将压缩包解压发现有很多chunkX.zip文件,并且里面都有data.txt文件。解压需要密码,尝试爆破发现不成功。发现每个文件极小只几k,进行crc碰撞。
脚本:
#coding:utf-8
import zipfile
import string
import binascii
 
def CrackCrc(crc):
    for i in dic :
        for j in dic:
            for p in dic:
                for q in dic:
                    s=i+j+p+q
                    if crc == (binascii.crc32(s) & 0xffffffff):
                        print s   
 
def CrackZip():
    for I in range(54):
        file = 'chunk' + str(I) + '.zip'
        f = zipfile.ZipFile(file, 'r')
        GetCrc = f.getinfo('data.txt')
        crc = GetCrc.CRC
        #以上3行为获取压缩包CRC32值的步骤
        CrackCrc(crc) dic = string.ascii_letters + string.digits + '+/='
CrackZip()
碰撞得出每个文件的内容,如下:
 
UEsDBBQDAQAAAJFy1kgWujyNLwAAACMAAAAIAAAAZmxhZy50eHT/xhoeSnjMRLuArw2FXUAIWn8UQblChs4AF1dAnT4nB5hs2SkR4fTfZZRB56Bp/FBLAQI/AxQDAQAAAJFy1kgWujyNLwAAACMAAAAIAAAAAAAAAAAAIIC0gQAAAABmbGFnLnR4dFBLBQYAAAAAAQABADYAAABVAAAAAAA=
发现是base64解码,但解码出现乱码,勾选结果以16进制显示,并保存为zip格式。
 
解压后还是要密码,用Ziperello爆破,得密码。
 
 

flag{i_z1pp3d_a_zip_w1th_sum_zips}
 
 

CRC碰撞的更多相关文章

  1. 【CTF 攻略】CTF比赛中关于zip的总结

    [CTF 攻略]CTF比赛中关于zip的总结   分享到: --> 本文首发于安全客,建议到原地址阅读,地址:http://bobao.360.cn/ctf/detail/203.html 前言 ...

  2. atitit.安全的签名摘要 算法attilax总结

    atitit.安全的签名 算法attilax总结 1. MD5 (不推荐)结果是128位二进制,只有转为16进制字符串是32位 1 2. 使用sha1算法加密后的密串长度有40位,相对更安全一些.Sh ...

  3. 校验知识:CRC32、MD5、SHA1概念及可靠性现状

    转:http://www.metsky.com/archives/337.html 昨天介绍了Windows 7的版本识别问题,不得不提到常用的CRC32.MD5.SHA1等校验算法可靠性问题,如果只 ...

  4. Google揭露SHA-1碰撞,加速数据重删字节对比

    原创 架构师技术联盟  近期,Google和道荷兰阿姆斯特研究者宣布攻破了世界上第一例公开的SHA-1哈希碰撞实例,业界一片哗然.当两组不同的数据(文件.一段数据)计算出相同的Hash值时,即视为二者 ...

  5. 常用校验算法CRC、MD5、SHA_转

    1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...

  6. 破解压缩包的几种方式(zip伪加密 爆破 CRC32碰撞 已知明文攻击)

    zip伪加密 zip文件是由3部分组成,详见文末 压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志 在压缩源文件数据区有个2字节的 全局方式位标记 ,在压缩源文件目录区也有个2字节的 全局方 ...

  7. nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞

    第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...

  8. CRC、反码求和校验 原理分析

    3月份开始从客户端转后台,算是幸运的进入全栈工程师的修炼阶段.这段时间一边是老项目的客户端加服务器两边的维护和交接,一边是新项目加加加班赶工,期间最长经历了连续工作三天只睡了四五个小时的煎熬,人生也算 ...

  9. js拖拽原理和碰撞原理

    拖拽的原理onmousedown 选择元素onmousemove 移动元素onmouseup 释放元素 1:如果拖拽的时候有文字:被选中,会产生问题原因:当鼠标按下的时如果页面中有文字或者图片被选中的 ...

随机推荐

  1. 写Blog的准备工作Window Live Writer

    以下是博客园的帮助博客: Windows Live Writer配置步骤 感觉里面的几篇推荐文档都可以看一下,至于代码高亮插件,个人选择的还是SyntaxHighlighter. 一. 关于写blog ...

  2. sklearn.metrics中的评估方法

    https://www.cnblogs.com/mindy-snail/p/12445973.html 1.confusion_matrix 利用混淆矩阵进行评估 混淆矩阵说白了就是一张表格- 所有正 ...

  3. 请求 - Fetch(未完)

    概念和用法 可以被使用到更多地应用场景中:无论是service workers.Cache API.又或者是其他处理请求和响应的方式,甚至是任何一种需要你自己在程序中生成响应的方式. Cache 接口 ...

  4. Mysql常见注入

    Mysql显错注入 1.判断注入类型为字符型:http://219.153.49.228:43074/new_list.php?id=tingjigonggao' and 1=1 --+2.判断字段为 ...

  5. php函数的巧妙应用

    直接切入正题: 1.extract();函数从数组中把变量导入到当前的符号表中 对于数组中的每个元素,键名用于变量名,键值用于变量值. 第二个参数 type 用于指定当某个变量已经存在,而数组中又有同 ...

  6. MatchQuotesPastEndOfLine

    MatchQuotesPastEndOfLine:  设定值:Yes/No 作用:当读取平面文件时,是否将双引号括起来部分整体视为单个字段值,比如以下平面文件: ID, Name, City , To ...

  7. css 基础教程学习

    css基础语法 css语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. 选择器通常是您需要改变样式的 HTML 元素. 每条声明由一个属性和一个值组成. 如果要定义不止一个声明,则 ...

  8. ArrayList、LinkedList区别(jdk8)

    /** * jdk8 * ArrayList:底层动态数组实现(未初始化指定数组长度) * add():添加元素时,才初始化数组长度为10.容量不够时,动态扩容策略为: 原容量 + 原容量*0.5 * ...

  9. Pytest学习9-常用插件

    pytest-django:为django应用程序编写测试. pytest-twisted:为twisted应用程序编写测试,启动反应堆并处理测试函数的延迟. pytest-cov:覆盖率报告,与分布 ...

  10. thinkphp5出现mkdir() Permission denied报错解决办法

    如果没有runtime目录,则需要手动创建一个,并且给runtime添加权限: mkdir runtime chmod -R 777 runtime 报错如下: