来个大揭秘,有趣的ZIP压缩文件伪加密(附自制演示工具)

网管小贾 / sysadm.cc

"太公......太......哎哟......"

员外刚一个转身,与家仆高才撞了个满怀。

员外用手点指:"你你你......你这小厮,跌跌撞撞,成何体统!"

高才坐在地上喘气笑脸道:"恭......恭喜......太......太公......法......法师......找到了!"

那一日,我闲来无事,一路游山玩水,无意间来到这个不大的镇甸。

正在路上走着,不期与这高才打了个照面。

没想到这小厮属社牛的,上前招呼都不打拽着我的胳膊就走。

这还了得,这有砖有瓦有王法的地方,竟敢光天化日之下强抢民男,是何居心,哪方道理?

这小厮将我拖了半里地,见我正欲发作,便直言道我就是他要找的法师。

什么法师?

我像法师?

他说我眉分八彩、目若朗星,相貌甚伟、仪表堂堂,不是法师,难道是道士?

合着这叫法师啊,虽然你说的都是事实,但是我不会法术啊!

高才却指天赌誓,说家中正请法师,如若得力,员外爷必有重谢!

真新鲜哈,正好我也没啥事,且随他前去观看观看。

由此才有了开头一幕。

来到庄上,与员外寒暄两句,便将我请入厅中,各自分宾主落坐。

仆人献茶退下后,老员外突然失声抽泣,热泪两行、口打嗐声,诉说前情。

我这才知道,原来这户人家老夫妇二人,虽衬金衬银,却家中无子,唯有一个宝贝千金。

本想家中颇有些财产,便安排上门招赘,好将女儿留在身边。

半年前,来一男子,口称二十多里外福崚镇人,父母皆已往生,现单身一人,愿意入赘。

员外夫妇自然欢喜,可时间一久,人品素肠暴露,平日里好吃懒做打骂下人也就罢了,如今吃了些酒就爱撒泼耍疯,连员外老夫妇俩都要打骂。

前几日他居然擅自将小姐单独关在后院,还将大门上锁。

后来趁他不在,才从小姐口中得知,这锁的密码可能就放在家中电脑的一个压缩文件里。

可当找到了这个文件时,却发现它需要输入密码才能打开。

然而众人不知密码,猜测尝试无论多少次都不行。

之前也请过几个法师来看过,烧香的烧香,祷告的祷告,作法的作法,听说连暴力破解啥的黑客工具都用上了,还不是个个败下阵来,毫无办法。

员外看我毛发稀疏、镜片深厚,五官貌相与众不同必是大材,因此对我抱有一线希望。

怎么听这味儿,这法师是专业搞计算机的?

我还在纳闷,只见员外屏退左右,将电脑从一墙壁暗盒中取出......

打开电脑,找到那个 ZIP 压缩文件,双击它就管你要密码,否则啥都看不见。

操作都没问题,不过你说这叫什么事,连黑客都搞不定的事,我能有什么办法呢,我又不黑!

员外看出我有些为难,便吩咐道:"来啊!先给法师拿二百两银子!"

哎哟......我......这不就见外了嘛!

就冲我的专业,我不能再怠慢了......

我口送法号,念念有词,结果研究了半天,毫无起色。

正在一筹莫展之际,我突然灵光乍现,想到了一种可能的情况。

会不会是......?

于是我用立马用16进制文件编辑器打开这个压缩文件,用眼睛扫了扫,果然验证了我的猜测!

哈哈,我紧锁的双眉舒展了开来,原来如此......

先来简单说说关于 ZIP 文件的小姿势,真的是简单地说说。

ZIP 是一种我们常见的压缩格式,一个 ZIP 文件通常由三大部分组成:

  • 压缩源文件数据区 ,以 50 4B 03 04 开头。
  • 压缩源文件目录区 ,以 50 4B 01 02 开头。
  • 压缩源文件目录结束标志 ,以 50 4B 05 06 开头。

这里我截了三幅图,各位可以对照参看。

压缩源文件数据区,就是一个或多个文件被压缩后它们的数据部分。

注意哈,这个标记不仅仅是在文件开头,只要压缩包里有多个文件,那么其他地方也存在对应的多个文件数据区。

压缩文件目录区,可以简单地理解为存放的是压缩源文件的索引记录。

其标记大概像这样。

压缩文件目录结束标志,与前者压缩文件目录区对应,形成一个目录的完美闭环。

光这么说,各位肯定得糊涂,还是画图为妙。

以下就是一个普通 ZIP 文件里面的样子,应该可以看到一些规律吧。

数据区1
数据区2
数据区N
......
目录区1
目录区结束标志1
目录区2
目录区结束标志2
目录区N
目录区结束标志N
......

对于压缩文件1,在 ZIP 文件里就是先放数据区1,再放目录区1和目录区结束标志1。

剩下的以此类推,好理解了吧?

好,接下来揭秘。

我们只要知道有这么两个神秘的地方......

第一个,数据区加密位置,偏移量为 6 ,也就是在数据区开头后面的第 7 位(开头都是从 0 开始的)。

这个偏移为 6 的位置,叫做全局方式位标记

来,上图,光靠想象不行的,还得看图。

看到没,从数据区 50 4B 03 04 标记往后边数(从 50 开始数),第 7 个就是全局方式位标记。

先记住它,后面要用。

接下来第二个,目录区加密位置,偏移量为 8 ,也就是目录区开头后面的第 9 位(开头都是从 0 开始的)。

这个偏移为 8 的位置,也叫做全局方式位标记,只是它是目录区的。

接着上图,看到没,从数据区 50 4B 01 02 标记往后边数(从 50 开始数),第 9 个就是全局方式位标记。

其他的这个那个不用管,就这么两个地方,就是我们变戏法的关键所在!

原理非常简单,要看一个 ZIP 文件是否加密,主要就是看**压缩源文件(数据区)的全局方式位标记和压缩源文件(目录区)**的全局方式位标记。

那么这两个地方怎么看,有什么讲究呢?

咳咳......员外,那个饭菜准备得......!

哦哦,虚位以待、随时恭候?

好好好,重点来了,听好!

答案可能简单得让你掉下巴,关键就在这两个标记数值的奇偶上,也就是单双数上,而和其他因素没有关系,并且不影响加密属性。

简单一句话,标记为偶数(如:000204 等)则表示无加密,标记为奇数(如:010307 等)则表示有加密。

当然了,数据区标记和目录区标记要相互配合,不能单蹦,这个网上很多教程都没有说清楚。

有人说了,这能行吗?

是骡子是马拉出来溜溜呗!

我们随便拿个 ZIP 文件来试试不就知道了?

找一个未加密的 ZIP 文件,用 WinHex 或是其他16进制编辑软件打开它。

先找到数据区标志 50 4B 03 04 ,然后将第 7 位改成任意奇数。

接着找到目录区标志 50 4B 01 02 ,然后将第 9 位改成任意奇数。

好了,保存,打完收工!

收什么工,还没测试呢!

测试很简单,打开刚才修改过的 ZIP 文件,你会发现奇迹出现了!

原来不要密码的,现在它......它居然......居然要密码了!

不管是系统自带的解压软件,还是第三方的解压工具,都会提示需要输入密码。


如果想要恢复成原来不需要输入密码的状态,那么只需要将修改的标记位再改为偶数即可。

是不是既简单又魔幻?

这就是传说中的 ZIP 伪加密!

说白了就是假的加密,不是真的加密。

这的确很有趣的对不对,为此我之前还特意做了一个小工具,方便伪加密和伪解密。

毕竟有时压缩包里不止一个文件,挨个查找并修改标记位能把人给干麻了!

网管小贾的ZIP伪加密演示程序

下载链接:https://pan.baidu.com/s/1ocqW2AsqK9UEoWYXtJsRvw

提取码:<关注公众号,发送001102>

知道了伪加密的原理,现在我们也就终于明白了,为啥输入任何密码都没有用,原因就是它根本就没有密码啊喂!

经过一番折腾,压缩文件中的密码文本文件总算是给解出来了!

员外冲着我竖起了两个大拇指,直呼:"真乃神人也!"

我谦虚地擦了擦口水,摸了摸肚子......

席间,我也没客气,吃了个沟满壕平,一边抹嘴一边喊:"服务员......那个......有水果没?"

高才闻声赶来给我满酒,说一会儿水果就到。

之后他恳请我送他一个伪加密演示程序。

我自然慷慨赠与,不过同时告诫他,不可用此做出什么坏事,否则若是我知道定将其化为齑粉。

高才一呲牙,承诺定当铭记在心。

随后仆人送上水果,高才顺手递给我一只大红桃,附耳告诉我今晚小姐想感谢我,顺便一睹法师尊容,可否留宿一夜,明日再走。

我咬了一口桃子,顿觉甘甜可口、满齿留香。

我表面默不作声,实则计上心来......

将技术融入生活,打造有趣之故事

网管小贾 / sysadm.cc

相关推荐
程序员大阳8 天前
CentOS Linux教程(9)--使用zip压缩解压文件、目录
linux·centos·zip·压缩·解压
青云交8 天前
大数据新视界 --大数据大厂之数据压缩算法比较与应用:节省存储空间
大数据·数据库·zip·gzip·无损压缩·数据压缩算法·有损压缩·存储空间
baidu_huihui22 天前
ubuntu打包命令
数据库·postgresql·zip
charlee441 个月前
CMake构建学习笔记12-libzip库的构建
c++·学习·zip·cmake·构建
辞半夏丶北笙1 个月前
word、pdf、excel及zip加密(含示例效果及工具类)
java·pdf·word·excel·zip·poi·加密
WineMonk2 个月前
.NET C# 将文件夹压缩至 zip
c#·.net·zip·压缩
赵丙双3 个月前
spring boot jar 启动报错 Zip64 archives are not supported
spring boot·jar·zip·loader·zip64
小奥超人5 个月前
【ZIP技巧】zip压缩包太大,怎么缩小?
windows·经验分享·zip·压缩包解密·办公技巧
技术探索者6 个月前
Linux:zip命令介绍
linux·zip