草庐IT

CTF——zip伪加密

xiaozhaidada 2024-04-07 原文

目录

1.前文:

2.原理:   

        1.压缩源文件数据区:

          2.压缩源文件目录区:

          3.压缩源文件目录结束标志:

3.判断是否加密:

        1.无加密:

        2.伪加密:

        3.真加密:

4.修改方法:

5.其他途径:

6.反例:

        (1)用binwalk-e 无视伪加密:

         (2)在kali中打开:

         (3)用ZipCenOp.jar工具:

         (4)用WinRAR的修复功能:

7.总结:


1.前文:

        在做CTF的misc题目时经常会碰到需要密码的zip文件,打开这种需要密码的方法无非就这三种:

       (1)根据提示或其他文件解出密码

       (2)暴力破解

       (3)伪加密修改

        在这里我们讲一下第三个伪加密的原理和修改方法。

2.原理:   

        1.压缩源文件数据区:

          50 4B 03 04:这是头文件标记  (0x04034b50)
          14 00:解压文件所需 pkware 版本
          00 00:全局方式位标记(判断有无加密)
          08 00:压缩方式
          5A 7E:最后修改文件时间
          F7 46:最后修改文件日期

          2.压缩源文件目录区:

         50 4B 01 02:目录中文件文件头标记  (0x02014b50)
         1F 00:压缩使用的 pkware 版本
         14 00:解压文件所需 pkware 版本
         00 00:全局方式位标记(判断是否为伪加密)
         08 00:压缩方式
          5A 7E:最后修改文件时间
          F7 46:最后修改文件日期

          3.压缩源文件目录结束标志:

         50 4B 05 06:目录结束标记
         00 00:当前磁盘编号
         00 00:目录区开始磁盘编号
         01 00:本磁盘上纪录总数
         01 00:目录区中纪录总数
         59 00 00 00:目录区尺寸大小
         3E 00 00 00:目录区对第一张磁盘的偏移量
         00 00:ZIP 文件注释长度

3.判断是否加密:

        注意:

全局方式位标记的四个数字中只有第二个数字对其有影响,其它的不管为何值,都不影响它的加密属性,即:
                                             第二个数字为奇数时 –>加密 
                                             第二个数字为偶数时 –>未加密

        1.无加密:

压缩源文件数据区的全局方式位标记应当为00 00  (50 4B 03 04 14 00 后)
且压缩源文件目录区的全局方式位标记应当为00 00   (50 4B 01 02 14 00 后)

         

        2.伪加密:

压缩源文件数据区的全局方式位标记应当为 00 00  (50 4B 03 04 14 00 后)
且压缩源文件目录区的全局方式位标记应当为 09 00   (50 4B 01 02 14 00 后)

         

        3.真加密:

压缩源文件数据区的全局方式位标记应当为09 00  (50 4B 03 04 14 00 后) 

且压缩源文件目录区的全局方式位标记应当为09 00  (50 4B 01 02 14 00 后) 

           

4.修改方法:

        确定是伪加密后就需要将其修改为无加密,方法很简单,就是将压缩源文件目录区的全局方式位标记从09 00改为00 00。

 

 

5.其他途径:

        (1)用binwalk-e 无视伪加密

        (2)在macOS和kali系统中,可以直接打开伪加密zip文件

        (3)检测伪加密的工具ZipCenOp.jar

        (4)有时用WinRAR的修复功能

        (来自书本《CTF安全竞赛入门》)

6.反例:

        这里是本文的重点所在,用winhex判断zip文件是否为伪加密存在问题,如图所示:

        按照上述的判断方法可以得出这是一个加密的zip文件,但实际上这是一个伪加密的zip文件,所以仅靠这种方法不能100%准确判断。

(题目来源:BUUCTF在线评测)       

        既然这种方法存在问题,那么书本上的其他方法又如何呢,这里我将每个方法试了一试:

        (1)用binwalk-e 无视伪加密:

                   在kali中使用自带的函数binwalk,运行后会出现一个文件夹,里面有一个zip文件和   

             txt文件,但打开txt文件发现没有任何内容。 

 

         (2)在kali中打开:

                     在kali中直接打开还是需要密码

         (3)用ZipCenOp.jar工具:

                     使用ZipCenOp.jar工具,显示是伪加密,但直接还是打不开

 

         (4)用WinRAR的修复功能:

                     添加压缩文件--->选择工具--->点击修复压缩文件,结果不尽人意,还是打不开

 

 

 

 

7.总结:

        zip伪加密的知识点非常简单,一般来说在winhex中修修改改就能解决问题,但在准确度上,还是用工具ZipCenOp.jar这一方法更胜一筹。

有关CTF——zip伪加密的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 使用 AES 的 Rails 加密,过于复杂 - 2

    我在加密来self正在使用的第三方供应商的值时遇到问题。他们的指令如下:1)Converttheencryptionpasswordtoabytearray.2)Convertthevaluetobeencryptedtoabytearray.3)Theentirelengthofthearrayisinsertedasthefirstfourbytesontothefrontofthefirstblockoftheresultantbytearraybeforeencryption.4)EncryptthevalueusingAESwith:1.256-bitkeysize,2.25

  3. ruby-on-rails - NameError(未初始化常量 Unzipper::Zip)但仅在 Heroku 部署(Rails)上 - 2

    我有一个类unzipper.rb,它使用Rubyzip解压文件。在我的本地环境中,我可以成功解压缩文件,而无需使用require'zip'明确包含依赖项但是在Heroku上,我得到一个NameError(uninitializedconstantUnzipper::Zip)我只能通过使用明确的require来解决问题:为什么这在H​​eroku环境中是必需的,但在本地主机上却不是?我的印象是Rails自动需要所有gem。app/services/unzipper.rbrequire'zip'#OnlyrequiredforHeroku.Workslocallywithout!class

  4. ruby - 如何使用私钥加密完全加密 Ruby 中的数据? - 2

    首先,关于我们系统的一些信息,它基本上是建筑行业的电子招标解决方案。所以:列表项我们的系统有多家公司每个公司都有多个用户每家公司可以创建多个拍卖然后其他公司可以为可用的拍卖提交他们的出价。一个出价包含数百或数千个单独的项目,我们只需要加密这些记录的“价格”部分。我们面临的问题是,我们的大客户不希望我们知道投标价格,至少在投标过程中是这样,这是完全可以理解的。现在,我们只是通过对称加密对价格进行加密,因此即使价格在数据库中有效加密,他们担心的是我们拥有解密价格的key。因此,我们正在研究某种形式的公钥加密系统。以下是我们对解决方案的初步想法:当一家公司注册时,我们会使用OpenSSL为其

  5. ruby-on-rails - 我如何比较 'Bcrypt' Gem解密的密码和加密的密码 - 2

    我正在尝试对某些帖子的评论使用简单的身份验证。用户使用即时ID和密码输入评论我使用“bcrypt”gem将密码存储在数据库中。在comments_controller.rb中像这样@comment=Comment.new(comment_params)bcrypted_pwd=BCrypt::Password.create(@comment.user_pwd)@comment.user_pwd=bcrypted_pwd当用户想要删除他们的评论时,我使用data-confirm-modalgem来确认数据在这部分,我必须解密用户输入的密码以与数据库中的加密密码进行比较我怎样才能解密密码,

  6. ruby - 读取 zip 存档中的文件,无需解压缩存档 - 2

    我有一个包含100多个zip文件的目录,我需要读取zip文件中的文件以进行一些数据处理,而无需解压缩存档。是否有一个Ruby库可以在不解压缩文件的情况下读取zip存档中的文件内容?使用rubyzip报错:require'zip'Zip::File.open('my_zip.zip')do|zip_file|#Handleentriesonebyonezip_file.eachdo|entry|#Extracttofile/directory/symlinkputs"Extracting#{entry.name}"entry.extract('here')#Readintomemoryc

  7. ruby - 如何在Elixir中使用AES CBC 128进行加密和解密 - 2

    我在Rails中有一个具有以下方法的应用程序,该方法可以加密和解密文本并与Java客户端通信。defencrypt(string,key)cipher=OpenSSL::Cipher::AES.new(128,:CBC)cipher.encryptcipher.padding=1cipher.key=hex_to_bin(Digest::SHA1.hexdigest(key)[0..32])cipher_text=cipher.update(string)cipher_textexcenddefhex_to_bin(str)[str].pack"H*"enddefbin_to_hex(

  8. ruby-on-rails - 能够处理 rar/tar/zip/7z 的 Ruby/rubyzip 替代方案? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion我想知道是否有人知道Ruby的ruby​​zip替代品,它可以处理各种格式,特别是zip/rar/7z?我知道libarchive,但它对我的目的来说并不完整(它是一个很好的gem)。(澄清一下,libarchive-对我不起作用-因为

  9. ruby - 如何使用 ruby​​zip 解压缩压缩文件夹 - 2

    我知道如何使用ruby​​zip检索普通zip文件的内容。但是我在解压缩压缩文件夹的内容时遇到了问题,我希望你们中的任何人都能帮助我。这是我用来解压的代码:Zip::ZipFile::open(@file_location)do|zip|zip.eachdo|entry|nextifentry.name=~/__MACOSX/orentry.name=~/\.DS_Store/or!entry.file?logger.debug"#{entry.name}"@data=File.new("#{Rails.root.to_s}/tmp/#{entry.name}")endendentry

  10. ruby-on-rails - 如何生成用于 attr_encrypted 的加密 key - 2

    我正在考虑使用attr_encrypted在Rails应用程序中用于字段级加密的gem。如何生成用于此gem的加密key?更新:Encryptor的文档,它是attr_encrypted使用的底层加密,声明如下(在Usage|Basic下):secret_key=Digest::SHA256.hexdigest('asecretkey')encrypted_value=Encryptor.encrypt('somestringtoencrypt',:key=>secret_key)我猜想key可以是任意长度的随机字符串,而对hexdigest的调用将从中计算出适当的固定长度字符串。这是

随机推荐