ronin-support 0.5.1 → 1.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.editorconfig +11 -0
- data/.github/workflows/ruby.yml +27 -0
- data/.gitignore +7 -6
- data/.mailmap +1 -0
- data/.ruby-version +1 -0
- data/.yardopts +1 -2
- data/ChangeLog.md +533 -137
- data/Gemfile +20 -20
- data/README.md +137 -61
- data/Rakefile +29 -10
- data/data/text/homoglyphs/ascii.txt +8 -0
- data/data/text/homoglyphs/cyrillic.txt +33 -0
- data/data/text/homoglyphs/full_width.txt +81 -0
- data/data/text/homoglyphs/greek.txt +21 -0
- data/data/text/homoglyphs/latin_numbers.txt +14 -0
- data/data/text/homoglyphs/punctuation.txt +7 -0
- data/data/text/patterns/network/public_suffix.rb.erb +44 -0
- data/examples/ssl_proxy.rb +38 -0
- data/examples/tcp_proxy.rb +41 -0
- data/gemspec.yml +25 -15
- data/lib/ronin/support/archive/core_ext/file.rb +118 -0
- data/lib/ronin/{formatting/sql.rb → support/archive/core_ext.rb} +6 -7
- data/lib/ronin/support/archive/mixin.rb +213 -0
- data/lib/ronin/support/archive/tar/reader.rb +135 -0
- data/lib/ronin/support/archive/tar/writer.rb +197 -0
- data/lib/ronin/support/archive/tar.rb +155 -0
- data/lib/ronin/support/archive/zip/reader/entry.rb +134 -0
- data/lib/ronin/support/archive/zip/reader/statistics.rb +76 -0
- data/lib/ronin/support/archive/zip/reader.rb +273 -0
- data/lib/ronin/support/archive/zip/writer.rb +175 -0
- data/lib/ronin/support/archive/zip.rb +105 -0
- data/lib/ronin/support/archive.rb +211 -0
- data/lib/ronin/support/binary/array.rb +255 -0
- data/lib/ronin/support/binary/bit_flip.rb +147 -0
- data/lib/ronin/support/binary/buffer.rb +2027 -0
- data/lib/ronin/support/binary/byte_slice.rb +324 -0
- data/lib/ronin/support/binary/core_ext/array.rb +75 -0
- data/lib/ronin/support/binary/core_ext/float.rb +80 -0
- data/lib/ronin/support/binary/core_ext/integer.rb +305 -0
- data/lib/ronin/support/binary/core_ext/io.rb +38 -0
- data/lib/ronin/support/binary/core_ext/string.rb +115 -0
- data/lib/ronin/{formatting/extensions/text.rb → support/binary/core_ext.rb} +9 -9
- data/lib/ronin/support/binary/cstring.rb +259 -0
- data/lib/ronin/support/binary/ctypes/aggregate_type.rb +98 -0
- data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/arm.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/arm64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/mips.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/mips64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/ppc.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/x86.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch.rb +30 -0
- data/lib/ronin/support/binary/ctypes/array_object_type.rb +164 -0
- data/lib/ronin/support/binary/ctypes/array_type.rb +232 -0
- data/lib/ronin/support/binary/ctypes/big_endian.rb +195 -0
- data/lib/ronin/support/binary/ctypes/char_type.rb +59 -0
- data/lib/ronin/support/binary/ctypes/char_types.rb +39 -0
- data/lib/ronin/support/binary/ctypes/enum_type.rb +181 -0
- data/lib/ronin/support/binary/ctypes/float32_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/float64_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/float_type.rb +62 -0
- data/lib/ronin/support/binary/ctypes/int16_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/int32_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/int64_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/int8_type.rb +41 -0
- data/lib/ronin/support/binary/ctypes/int_type.rb +62 -0
- data/lib/ronin/support/binary/ctypes/little_endian.rb +195 -0
- data/lib/ronin/support/binary/ctypes/mixin.rb +135 -0
- data/lib/ronin/support/binary/ctypes/native.rb +205 -0
- data/lib/ronin/support/binary/ctypes/network.rb +29 -0
- data/lib/ronin/support/binary/ctypes/object_type.rb +55 -0
- data/lib/ronin/support/binary/ctypes/os/bsd.rb +65 -0
- data/lib/ronin/support/binary/ctypes/os/freebsd.rb +215 -0
- data/lib/ronin/support/binary/ctypes/os/linux.rb +193 -0
- data/lib/ronin/support/binary/ctypes/os/macos.rb +151 -0
- data/lib/ronin/support/binary/ctypes/os/netbsd.rb +147 -0
- data/lib/ronin/support/binary/ctypes/os/openbsd.rb +168 -0
- data/lib/ronin/support/binary/ctypes/os/unix.rb +78 -0
- data/lib/ronin/support/binary/ctypes/os/windows.rb +125 -0
- data/lib/ronin/support/binary/ctypes/os.rb +125 -0
- data/lib/ronin/support/binary/ctypes/scalar_type.rb +200 -0
- data/lib/ronin/support/binary/ctypes/string_type.rb +143 -0
- data/lib/ronin/support/binary/ctypes/struct_object_type.rb +173 -0
- data/lib/ronin/support/binary/ctypes/struct_type.rb +359 -0
- data/lib/ronin/support/binary/ctypes/type.rb +193 -0
- data/lib/ronin/support/binary/ctypes/type_resolver.rb +206 -0
- data/lib/ronin/support/binary/ctypes/uint16_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/uint32_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/uint64_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/uint8_type.rb +41 -0
- data/lib/ronin/support/binary/ctypes/uint_type.rb +59 -0
- data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +258 -0
- data/lib/ronin/support/binary/ctypes/union_object_type.rb +173 -0
- data/lib/ronin/support/binary/ctypes/union_type.rb +261 -0
- data/lib/ronin/support/binary/ctypes.rb +462 -0
- data/lib/ronin/support/binary/hexdump/core_ext/file.rb +118 -0
- data/lib/ronin/support/binary/hexdump/core_ext/string.rb +115 -0
- data/lib/ronin/support/binary/hexdump/core_ext.rb +20 -0
- data/lib/ronin/support/binary/hexdump/parser.rb +492 -0
- data/lib/ronin/support/binary/hexdump.rb +20 -0
- data/lib/ronin/support/binary/memory.rb +268 -0
- data/lib/ronin/support/binary/packet.rb +33 -0
- data/lib/ronin/support/binary/stack.rb +256 -0
- data/lib/ronin/support/binary/stream/methods.rb +1755 -0
- data/lib/ronin/support/binary/stream.rb +151 -0
- data/lib/ronin/support/binary/struct/member.rb +86 -0
- data/lib/ronin/support/binary/struct.rb +830 -0
- data/lib/ronin/support/binary/template.rb +284 -0
- data/lib/ronin/support/binary/union.rb +162 -0
- data/lib/ronin/support/binary.rb +26 -0
- data/lib/ronin/support/cli/ansi.rb +330 -0
- data/lib/ronin/support/cli/io_shell/core_ext/io.rb +67 -0
- data/lib/ronin/{fuzzing/extensions.rb → support/cli/io_shell/core_ext.rb} +6 -7
- data/lib/ronin/support/cli/io_shell.rb +161 -0
- data/lib/ronin/support/cli/printing.rb +216 -0
- data/lib/ronin/support/cli.rb +20 -0
- data/lib/ronin/support/compression/core_ext/file.rb +70 -0
- data/lib/ronin/support/compression/core_ext/string.rb +101 -0
- data/lib/ronin/{formatting/html.rb → support/compression/core_ext.rb} +6 -7
- data/lib/ronin/support/compression/gzip/reader.rb +70 -0
- data/lib/ronin/support/compression/gzip/writer.rb +74 -0
- data/lib/ronin/support/compression/gzip.rb +105 -0
- data/lib/ronin/support/compression/mixin.rb +180 -0
- data/lib/ronin/{network/extensions/esmtp/net.rb → support/compression/zlib.rb} +9 -10
- data/lib/ronin/support/compression.rb +174 -0
- data/lib/ronin/{extensions → support/core_ext}/enumerable.rb +5 -6
- data/lib/ronin/{extensions → support/core_ext}/file.rb +11 -34
- data/lib/ronin/support/core_ext/integer.rb +37 -0
- data/lib/ronin/support/core_ext/ipaddr.rb +65 -0
- data/lib/ronin/{extensions → support/core_ext}/kernel.rb +10 -9
- data/lib/ronin/{extensions → support/core_ext}/resolv.rb +5 -28
- data/lib/ronin/{extensions → support/core_ext}/string.rb +117 -57
- data/lib/ronin/support/core_ext.rb +33 -0
- data/lib/ronin/support/crypto/cert.rb +522 -0
- data/lib/ronin/support/crypto/cert_chain.rb +204 -0
- data/lib/ronin/support/crypto/cipher/aes.rb +71 -0
- data/lib/ronin/support/crypto/cipher/aes128.rb +54 -0
- data/lib/ronin/support/crypto/cipher/aes256.rb +54 -0
- data/lib/ronin/support/crypto/cipher.rb +194 -0
- data/lib/ronin/support/crypto/core_ext/file.rb +660 -0
- data/lib/ronin/support/crypto/core_ext/string.rb +548 -0
- data/lib/ronin/{binary.rb → support/crypto/core_ext.rb} +7 -8
- data/lib/ronin/support/crypto/hmac.rb +48 -0
- data/lib/ronin/support/crypto/key/dh.rb +122 -0
- data/lib/ronin/support/crypto/key/dsa.rb +103 -0
- data/lib/ronin/support/crypto/key/ec.rb +99 -0
- data/lib/ronin/support/crypto/key/methods.rb +163 -0
- data/lib/ronin/support/crypto/key/rsa.rb +169 -0
- data/lib/ronin/support/crypto/key.rb +105 -0
- data/lib/ronin/support/crypto/mixin.rb +620 -0
- data/lib/ronin/{network/extensions/http/net.rb → support/crypto/openssl.rb} +9 -10
- data/lib/ronin/support/crypto.rb +779 -0
- data/lib/ronin/support/encoding/base16/core_ext/string.rb +63 -0
- data/lib/ronin/support/encoding/base16/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/base16.rb +82 -0
- data/lib/ronin/support/encoding/base32/core_ext/string.rb +63 -0
- data/lib/ronin/support/encoding/base32/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/base32.rb +164 -0
- data/lib/ronin/support/encoding/base64/core_ext/string.rb +76 -0
- data/lib/ronin/support/encoding/base64/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/base64.rb +78 -0
- data/lib/ronin/support/encoding/c/core_ext/integer.rb +82 -0
- data/lib/ronin/support/encoding/c/core_ext/string.rb +125 -0
- data/lib/ronin/support/encoding/c/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/c.rb +277 -0
- data/lib/ronin/support/encoding/core_ext/string.rb +107 -0
- data/lib/ronin/support/encoding/core_ext.rb +33 -0
- data/lib/ronin/support/encoding/hex/core_ext/integer.rb +82 -0
- data/lib/ronin/support/encoding/hex/core_ext/string.rb +133 -0
- data/lib/ronin/support/encoding/hex/core_ext.rb +22 -0
- data/lib/ronin/support/encoding/hex.rb +248 -0
- data/lib/ronin/support/encoding/html/core_ext/integer.rb +106 -0
- data/lib/ronin/support/encoding/html/core_ext/string.rb +130 -0
- data/lib/ronin/support/encoding/html/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/html.rb +233 -0
- data/lib/ronin/support/encoding/http/core_ext/integer.rb +95 -0
- data/lib/ronin/support/encoding/http/core_ext/string.rb +129 -0
- data/lib/ronin/support/encoding/http/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/http.rb +241 -0
- data/lib/ronin/support/encoding/js/core_ext/integer.rb +67 -0
- data/lib/ronin/support/encoding/js/core_ext/string.rb +125 -0
- data/lib/ronin/support/encoding/js/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/js.rb +279 -0
- data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +87 -0
- data/lib/ronin/support/encoding/powershell/core_ext/string.rb +145 -0
- data/lib/ronin/support/encoding/powershell/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/powershell.rb +297 -0
- data/lib/ronin/support/encoding/punycode/core_ext/string.rb +63 -0
- data/lib/ronin/support/encoding/punycode/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/punycode.rb +76 -0
- data/lib/ronin/support/encoding/quoted_printable/core_ext/string.rb +75 -0
- data/lib/ronin/support/encoding/quoted_printable/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/quoted_printable.rb +102 -0
- data/lib/ronin/support/encoding/ruby/core_ext/string.rb +129 -0
- data/lib/ronin/{formatting/binary.rb → support/encoding/ruby/core_ext.rb} +6 -7
- data/lib/ronin/support/encoding/ruby.rb +235 -0
- data/lib/ronin/support/encoding/shell/core_ext/integer.rb +89 -0
- data/lib/ronin/support/encoding/shell/core_ext/string.rb +134 -0
- data/lib/ronin/support/encoding/shell/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/shell.rb +293 -0
- data/lib/ronin/{network/extensions → support/encoding}/smtp.rb +7 -7
- data/lib/ronin/support/encoding/sql/core_ext/string.rb +114 -0
- data/lib/ronin/{formatting/http.rb → support/encoding/sql/core_ext.rb} +6 -7
- data/lib/ronin/support/encoding/sql.rb +124 -0
- data/lib/ronin/support/encoding/uri/core_ext/integer.rb +149 -0
- data/lib/ronin/support/encoding/uri/core_ext/string.rb +195 -0
- data/lib/ronin/support/encoding/uri/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/uri.rb +424 -0
- data/lib/ronin/support/encoding/uuencoding/core_ext/string.rb +73 -0
- data/lib/ronin/support/encoding/uuencoding/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/uuencoding.rb +70 -0
- data/lib/ronin/support/encoding/xml/core_ext/integer.rb +100 -0
- data/lib/ronin/support/encoding/xml/core_ext/string.rb +124 -0
- data/lib/ronin/support/encoding/xml/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/xml.rb +328 -0
- data/lib/ronin/support/encoding.rb +46 -0
- data/lib/ronin/support/home.rb +88 -0
- data/lib/ronin/support/mixin.rb +42 -0
- data/lib/ronin/support/network/asn/dns_record.rb +112 -0
- data/lib/ronin/support/network/asn/list.rb +269 -0
- data/lib/ronin/support/network/asn/record.rb +164 -0
- data/lib/ronin/support/network/asn/record_set.rb +226 -0
- data/lib/ronin/support/network/asn.rb +88 -0
- data/lib/ronin/{binary/hexdump.rb → support/network/core_ext.rb} +6 -7
- data/lib/ronin/support/network/dns/idn.rb +38 -0
- data/lib/ronin/support/network/dns/mixin.rb +941 -0
- data/lib/ronin/support/network/dns/resolver.rb +707 -0
- data/lib/ronin/support/network/dns.rb +1109 -0
- data/lib/ronin/support/network/domain.rb +70 -0
- data/lib/ronin/support/network/email_address.rb +574 -0
- data/lib/ronin/support/network/esmtp/mixin.rb +115 -0
- data/lib/ronin/support/network/exceptions.rb +43 -0
- data/lib/ronin/support/network/ftp/mixin.rb +106 -0
- data/lib/ronin/support/network/host.rb +1473 -0
- data/lib/ronin/support/network/http/cookie.rb +245 -0
- data/lib/ronin/support/network/http/core_ext/uri/http.rb +63 -0
- data/lib/ronin/support/network/http/core_ext.rb +19 -0
- data/lib/ronin/support/network/http/mixin.rb +890 -0
- data/lib/ronin/support/network/http/request.rb +215 -0
- data/lib/ronin/support/network/http/set_cookie.rb +210 -0
- data/lib/ronin/support/network/http/user_agents.rb +115 -0
- data/lib/ronin/support/network/http.rb +2582 -0
- data/lib/ronin/support/network/imap/mixin.rb +133 -0
- data/lib/ronin/support/network/ip/mixin.rb +114 -0
- data/lib/ronin/support/network/ip.rb +540 -0
- data/lib/ronin/support/network/ip_range/cidr.rb +252 -0
- data/lib/ronin/support/network/ip_range/glob.rb +309 -0
- data/lib/ronin/support/network/ip_range/range.rb +249 -0
- data/lib/ronin/support/network/ip_range.rb +284 -0
- data/lib/ronin/support/network/mixin.rb +58 -0
- data/lib/ronin/support/network/packet.rb +27 -0
- data/lib/ronin/support/network/pop3/mixin.rb +113 -0
- data/lib/ronin/support/network/proxy.rb +602 -0
- data/lib/ronin/support/network/public_suffix/list.rb +339 -0
- data/lib/ronin/support/network/public_suffix/suffix.rb +118 -0
- data/lib/ronin/support/network/public_suffix/suffix_set.rb +150 -0
- data/lib/ronin/support/network/public_suffix.rb +41 -0
- data/lib/ronin/support/network/smtp/email.rb +190 -0
- data/lib/ronin/support/network/smtp/mixin.rb +290 -0
- data/lib/ronin/{extensions/meta.rb → support/network/smtp.rb} +6 -7
- data/lib/ronin/support/network/ssl/local_cert.rb +114 -0
- data/lib/ronin/support/network/ssl/local_key.rb +84 -0
- data/lib/ronin/support/network/ssl/mixin.rb +740 -0
- data/lib/ronin/{network/extensions/imap/net.rb → support/network/ssl/openssl.rb} +9 -10
- data/lib/ronin/support/network/ssl/proxy.rb +296 -0
- data/lib/ronin/support/network/ssl.rb +173 -0
- data/lib/ronin/support/network/tcp/mixin.rb +400 -0
- data/lib/ronin/support/network/tcp/proxy.rb +435 -0
- data/lib/ronin/support/network/tcp.rb +443 -0
- data/lib/ronin/support/network/telnet/mixin.rb +150 -0
- data/lib/ronin/support/network/telnet.rb +90 -0
- data/lib/ronin/support/network/tld/list.rb +266 -0
- data/lib/ronin/support/network/tld.rb +41 -0
- data/lib/ronin/support/network/tls/mixin.rb +670 -0
- data/lib/ronin/support/network/tls/proxy.rb +135 -0
- data/lib/ronin/support/network/tls.rb +53 -0
- data/lib/ronin/support/network/udp/mixin.rb +389 -0
- data/lib/ronin/support/network/udp/proxy.rb +192 -0
- data/lib/ronin/support/network/udp.rb +435 -0
- data/lib/ronin/support/network/unix/mixin.rb +273 -0
- data/lib/ronin/support/network.rb +37 -0
- data/lib/ronin/support/path.rb +136 -0
- data/lib/ronin/{network/extensions/dns/net.rb → support/text/core_ext/regexp.rb} +8 -9
- data/lib/ronin/support/text/core_ext/string.rb +46 -0
- data/lib/ronin/support/text/core_ext.rb +23 -0
- data/lib/ronin/support/text/entropy/core_ext/string.rb +45 -0
- data/lib/ronin/support/text/entropy/core_ext.rb +19 -0
- data/lib/ronin/support/text/entropy.rb +66 -0
- data/lib/ronin/support/text/erb/mixin.rb +44 -0
- data/lib/ronin/support/text/erb.rb +19 -0
- data/lib/ronin/support/text/homoglyph/core_ext/string.rb +108 -0
- data/lib/ronin/{formatting/digest.rb → support/text/homoglyph/core_ext.rb} +6 -7
- data/lib/ronin/{network/http/exceptions/unknown_request.rb → support/text/homoglyph/exceptions.rb} +10 -9
- data/lib/ronin/support/text/homoglyph/table.rb +228 -0
- data/lib/ronin/support/text/homoglyph.rb +142 -0
- data/lib/ronin/support/text/mixin.rb +31 -0
- data/lib/ronin/support/text/patterns/credentials.rb +75 -0
- data/lib/ronin/support/text/patterns/crypto.rb +67 -0
- data/lib/ronin/support/text/patterns/file_system.rb +93 -0
- data/lib/ronin/support/text/patterns/language.rb +37 -0
- data/lib/ronin/support/text/patterns/network/public_suffix.rb +44 -0
- data/lib/ronin/support/text/patterns/network.rb +140 -0
- data/lib/ronin/support/text/patterns/numeric.rb +52 -0
- data/lib/ronin/support/text/patterns/pii.rb +105 -0
- data/lib/ronin/support/text/patterns/source_code.rb +148 -0
- data/lib/ronin/support/text/patterns.rb +25 -0
- data/lib/ronin/support/text/random/mixin.rb +437 -0
- data/lib/ronin/support/text/random.rb +419 -0
- data/lib/ronin/support/text/typo/core_ext/string.rb +123 -0
- data/lib/ronin/support/text/typo/core_ext.rb +19 -0
- data/lib/ronin/support/text/typo/exceptions.rb +28 -0
- data/lib/ronin/support/text/typo/generator.rb +161 -0
- data/lib/ronin/support/text/typo.rb +260 -0
- data/lib/ronin/support/text.rb +26 -0
- data/lib/ronin/support/version.rb +6 -7
- data/lib/ronin/support.rb +20 -15
- data/ronin-support.gemspec +3 -1
- metadata +462 -369
- data/.gemtest +0 -0
- data/lib/ronin/binary/hexdump/parser.rb +0 -403
- data/lib/ronin/binary/struct.rb +0 -567
- data/lib/ronin/binary/template.rb +0 -454
- data/lib/ronin/extensions/ip_addr.rb +0 -217
- data/lib/ronin/extensions/meta/object.rb +0 -24
- data/lib/ronin/extensions/regexp.rb +0 -157
- data/lib/ronin/extensions.rb +0 -29
- data/lib/ronin/formatting/extensions/binary/array.rb +0 -61
- data/lib/ronin/formatting/extensions/binary/base64.rb +0 -106
- data/lib/ronin/formatting/extensions/binary/file.rb +0 -77
- data/lib/ronin/formatting/extensions/binary/float.rb +0 -65
- data/lib/ronin/formatting/extensions/binary/integer.rb +0 -180
- data/lib/ronin/formatting/extensions/binary/string.rb +0 -345
- data/lib/ronin/formatting/extensions/binary.rb +0 -26
- data/lib/ronin/formatting/extensions/digest/file.rb +0 -129
- data/lib/ronin/formatting/extensions/digest/string.rb +0 -86
- data/lib/ronin/formatting/extensions/digest.rb +0 -21
- data/lib/ronin/formatting/extensions/html/integer.rb +0 -142
- data/lib/ronin/formatting/extensions/html/string.rb +0 -194
- data/lib/ronin/formatting/extensions/html.rb +0 -21
- data/lib/ronin/formatting/extensions/http/integer.rb +0 -69
- data/lib/ronin/formatting/extensions/http/string.rb +0 -110
- data/lib/ronin/formatting/extensions/http.rb +0 -21
- data/lib/ronin/formatting/extensions/sql/string.rb +0 -128
- data/lib/ronin/formatting/extensions/sql.rb +0 -20
- data/lib/ronin/formatting/extensions/text/array.rb +0 -137
- data/lib/ronin/formatting/extensions/text/string.rb +0 -297
- data/lib/ronin/formatting/extensions.rb +0 -24
- data/lib/ronin/formatting/text.rb +0 -20
- data/lib/ronin/formatting.rb +0 -25
- data/lib/ronin/fuzzing/extensions/string.rb +0 -209
- data/lib/ronin/fuzzing/fuzzer.rb +0 -110
- data/lib/ronin/fuzzing/fuzzing.rb +0 -360
- data/lib/ronin/fuzzing/mutator.rb +0 -161
- data/lib/ronin/fuzzing/repeater.rb +0 -81
- data/lib/ronin/fuzzing/template.rb +0 -133
- data/lib/ronin/fuzzing.rb +0 -21
- data/lib/ronin/mixin.rb +0 -89
- data/lib/ronin/network/dns.rb +0 -201
- data/lib/ronin/network/esmtp.rb +0 -113
- data/lib/ronin/network/extensions/dns.rb +0 -20
- data/lib/ronin/network/extensions/esmtp.rb +0 -20
- data/lib/ronin/network/extensions/http/uri/http.rb +0 -228
- data/lib/ronin/network/extensions/http.rb +0 -21
- data/lib/ronin/network/extensions/imap.rb +0 -20
- data/lib/ronin/network/extensions/pop3/net.rb +0 -24
- data/lib/ronin/network/extensions/pop3.rb +0 -20
- data/lib/ronin/network/extensions/smtp/net.rb +0 -24
- data/lib/ronin/network/extensions/ssl/net.rb +0 -24
- data/lib/ronin/network/extensions/ssl.rb +0 -20
- data/lib/ronin/network/extensions/tcp/net.rb +0 -24
- data/lib/ronin/network/extensions/tcp.rb +0 -20
- data/lib/ronin/network/extensions/telnet/net.rb +0 -24
- data/lib/ronin/network/extensions/telnet.rb +0 -20
- data/lib/ronin/network/extensions/udp/net.rb +0 -24
- data/lib/ronin/network/extensions/udp.rb +0 -20
- data/lib/ronin/network/extensions.rb +0 -29
- data/lib/ronin/network/ftp.rb +0 -149
- data/lib/ronin/network/http/exceptions.rb +0 -20
- data/lib/ronin/network/http/http.rb +0 -1127
- data/lib/ronin/network/http/proxy.rb +0 -330
- data/lib/ronin/network/http.rb +0 -22
- data/lib/ronin/network/imap.rb +0 -158
- data/lib/ronin/network/mixins/dns.rb +0 -55
- data/lib/ronin/network/mixins/esmtp.rb +0 -164
- data/lib/ronin/network/mixins/ftp.rb +0 -155
- data/lib/ronin/network/mixins/http.rb +0 -227
- data/lib/ronin/network/mixins/imap.rb +0 -156
- data/lib/ronin/network/mixins/mixin.rb +0 -58
- data/lib/ronin/network/mixins/pop3.rb +0 -149
- data/lib/ronin/network/mixins/smtp.rb +0 -159
- data/lib/ronin/network/mixins/ssl.rb +0 -148
- data/lib/ronin/network/mixins/tcp.rb +0 -368
- data/lib/ronin/network/mixins/telnet.rb +0 -208
- data/lib/ronin/network/mixins/udp.rb +0 -381
- data/lib/ronin/network/mixins/unix.rb +0 -279
- data/lib/ronin/network/mixins.rb +0 -29
- data/lib/ronin/network/network.rb +0 -45
- data/lib/ronin/network/pop3.rb +0 -124
- data/lib/ronin/network/proxy.rb +0 -578
- data/lib/ronin/network/smtp/email.rb +0 -174
- data/lib/ronin/network/smtp/smtp.rb +0 -230
- data/lib/ronin/network/smtp.rb +0 -22
- data/lib/ronin/network/ssl.rb +0 -186
- data/lib/ronin/network/tcp/proxy.rb +0 -417
- data/lib/ronin/network/tcp/tcp.rb +0 -443
- data/lib/ronin/network/tcp.rb +0 -21
- data/lib/ronin/network/telnet.rb +0 -264
- data/lib/ronin/network/udp/proxy.rb +0 -191
- data/lib/ronin/network/udp/udp.rb +0 -450
- data/lib/ronin/network/udp.rb +0 -21
- data/lib/ronin/network/unix.rb +0 -286
- data/lib/ronin/network.rb +0 -31
- data/lib/ronin/path.rb +0 -137
- data/lib/ronin/spec/ui/output.rb +0 -22
- data/lib/ronin/support/inflector.rb +0 -92
- data/lib/ronin/support/support.rb +0 -42
- data/lib/ronin/templates/erb.rb +0 -78
- data/lib/ronin/templates/template.rb +0 -169
- data/lib/ronin/templates.rb +0 -21
- data/lib/ronin/ui/output/helpers.rb +0 -296
- data/lib/ronin/ui/output/output.rb +0 -146
- data/lib/ronin/ui/output/terminal/color.rb +0 -124
- data/lib/ronin/ui/output/terminal/raw.rb +0 -103
- data/lib/ronin/ui/output/terminal.rb +0 -21
- data/lib/ronin/ui/output.rb +0 -21
- data/lib/ronin/ui/shell.rb +0 -286
- data/lib/ronin/wordlist.rb +0 -287
- data/spec/binary/hexdump/helpers/hexdumps/ascii.bin +0 -0
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_decimal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_repeated.txt +0 -6
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_ints.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_quads.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_doubles.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_floats.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_ints.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_quads.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_named_chars.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_ints.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_quads.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_repeated.txt +0 -6
- data/spec/binary/hexdump/helpers/hexdumps/repeated.bin +0 -1
- data/spec/binary/hexdump/helpers/hexdumps.rb +0 -13
- data/spec/binary/hexdump/parser_spec.rb +0 -302
- data/spec/binary/struct_spec.rb +0 -496
- data/spec/binary/template_spec.rb +0 -414
- data/spec/extensions/enumerable_spec.rb +0 -24
- data/spec/extensions/file_spec.rb +0 -63
- data/spec/extensions/ip_addr_spec.rb +0 -203
- data/spec/extensions/kernel_spec.rb +0 -30
- data/spec/extensions/regexp_spec.rb +0 -482
- data/spec/extensions/resolv_spec.rb +0 -18
- data/spec/extensions/string_spec.rb +0 -179
- data/spec/formatting/binary/array_spec.rb +0 -26
- data/spec/formatting/binary/base64_spec.rb +0 -50
- data/spec/formatting/binary/float_spec.rb +0 -34
- data/spec/formatting/binary/integer_spec.rb +0 -166
- data/spec/formatting/binary/string_spec.rb +0 -197
- data/spec/formatting/digest/string_spec.rb +0 -82
- data/spec/formatting/html/integer_spec.rb +0 -66
- data/spec/formatting/html/string_spec.rb +0 -103
- data/spec/formatting/http/integer_spec.rb +0 -42
- data/spec/formatting/http/string_spec.rb +0 -76
- data/spec/formatting/sql/string_spec.rb +0 -75
- data/spec/formatting/text/array_spec.rb +0 -105
- data/spec/formatting/text/string_spec.rb +0 -162
- data/spec/fuzzing/extensions/string_spec.rb +0 -87
- data/spec/fuzzing/fuzzer_spec.rb +0 -109
- data/spec/fuzzing/fuzzing_spec.rb +0 -24
- data/spec/fuzzing/mutator_spec.rb +0 -112
- data/spec/fuzzing/repeater_spec.rb +0 -57
- data/spec/fuzzing/template_spec.rb +0 -54
- data/spec/mixin_spec.rb +0 -53
- data/spec/network/dns_spec.rb +0 -201
- data/spec/network/ftp_spec.rb +0 -81
- data/spec/network/http/http_spec.rb +0 -466
- data/spec/network/http/proxy_spec.rb +0 -148
- data/spec/network/network_spec.rb +0 -8
- data/spec/network/proxy_spec.rb +0 -121
- data/spec/network/shared/unix_server.rb +0 -31
- data/spec/network/smtp/email_spec.rb +0 -100
- data/spec/network/ssl_spec.rb +0 -70
- data/spec/network/tcp/proxy_spec.rb +0 -116
- data/spec/network/tcp/tcp_spec.rb +0 -273
- data/spec/network/telnet_spec.rb +0 -67
- data/spec/network/udp/udp_spec.rb +0 -271
- data/spec/network/unix_spec.rb +0 -183
- data/spec/path_spec.rb +0 -86
- data/spec/spec_helper.rb +0 -9
- data/spec/support/inflector_spec.rb +0 -22
- data/spec/support_spec.rb +0 -8
- data/spec/templates/classes/example_erb.rb +0 -11
- data/spec/templates/classes/example_template.rb +0 -35
- data/spec/templates/erb_spec.rb +0 -21
- data/spec/templates/helpers/data/includes/_relative.erb +0 -1
- data/spec/templates/helpers/data/templates/example.erb +0 -1
- data/spec/templates/helpers/data.rb +0 -9
- data/spec/templates/template_spec.rb +0 -54
- data/spec/ui/classes/test_shell.rb +0 -22
- data/spec/ui/output_spec.rb +0 -32
- data/spec/ui/shell_spec.rb +0 -83
- data/spec/wordlist_spec.rb +0 -151
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/archive/zip/reader/entry'
|
|
20
|
+
require 'ronin/support/archive/zip/reader/statistics'
|
|
21
|
+
|
|
22
|
+
require 'time'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
module Support
|
|
26
|
+
module Archive
|
|
27
|
+
module Zip
|
|
28
|
+
#
|
|
29
|
+
# Handles reading zip archives.
|
|
30
|
+
#
|
|
31
|
+
# @note
|
|
32
|
+
# This provides a simple interface for reading zip archives using
|
|
33
|
+
# the `unzip` command. If you need something more powerful, use the
|
|
34
|
+
# [archive-zip] gem instead.
|
|
35
|
+
#
|
|
36
|
+
# [archive-zip]: https://github.com/javanthropus/archive-zip
|
|
37
|
+
#
|
|
38
|
+
# @api public
|
|
39
|
+
#
|
|
40
|
+
# @since 1.0.0
|
|
41
|
+
#
|
|
42
|
+
class Reader
|
|
43
|
+
|
|
44
|
+
include Enumerable
|
|
45
|
+
|
|
46
|
+
# The path to the zip archive that will be read.
|
|
47
|
+
#
|
|
48
|
+
# @return [String]
|
|
49
|
+
attr_reader :path
|
|
50
|
+
|
|
51
|
+
# The optional password to use when reading the zip archive.
|
|
52
|
+
#
|
|
53
|
+
# @return [String, nil]
|
|
54
|
+
attr_reader :password
|
|
55
|
+
|
|
56
|
+
#
|
|
57
|
+
# Initializes the zip archive reader.
|
|
58
|
+
#
|
|
59
|
+
# @param [String] path
|
|
60
|
+
# The path to the zip archive file.
|
|
61
|
+
#
|
|
62
|
+
# @param [String, nil] password
|
|
63
|
+
# Optional password to use when reading the zip archive.
|
|
64
|
+
#
|
|
65
|
+
# @yield [zip]
|
|
66
|
+
# If a block is given, it will be yielded the new zip reader.
|
|
67
|
+
#
|
|
68
|
+
# @yieldparam [Reader] zip
|
|
69
|
+
# The new zip reacher.
|
|
70
|
+
#
|
|
71
|
+
def initialize(path, password: nil)
|
|
72
|
+
@path = File.expand_path(path)
|
|
73
|
+
@password = password
|
|
74
|
+
|
|
75
|
+
yield self if block_given?
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
#
|
|
79
|
+
# Alias to {#initialize new}.
|
|
80
|
+
#
|
|
81
|
+
# @param [String] path
|
|
82
|
+
# The path to the zip archive file.
|
|
83
|
+
#
|
|
84
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
85
|
+
# Additional keyword arguments for {#initialize new}.
|
|
86
|
+
#
|
|
87
|
+
# @option kwargs [String, nil] :password
|
|
88
|
+
# Optional password to use when reading the zip archive.
|
|
89
|
+
#
|
|
90
|
+
# @yield [zip]
|
|
91
|
+
# If a block is given, it will be yielded the new zip reader.
|
|
92
|
+
#
|
|
93
|
+
# @yieldparam [Reader] zip
|
|
94
|
+
# The new zip reacher.
|
|
95
|
+
#
|
|
96
|
+
# @see #initialize
|
|
97
|
+
#
|
|
98
|
+
def self.open(path,**kwargs,&block)
|
|
99
|
+
new(path,**kwargs,&block)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
#
|
|
103
|
+
# Lists the contents of the zip archive.
|
|
104
|
+
#
|
|
105
|
+
# @yield [entry]
|
|
106
|
+
# If a block is given it will be passed each parsed entry in the
|
|
107
|
+
# zip archive.
|
|
108
|
+
#
|
|
109
|
+
# @yieldparam [Entry] entry
|
|
110
|
+
# An entry in the zip archive.
|
|
111
|
+
#
|
|
112
|
+
# @return [Enumerator, Statistics]
|
|
113
|
+
# If no block is given an enumerator will be returned.
|
|
114
|
+
# If a block was given, then a statistics object will be returned.
|
|
115
|
+
#
|
|
116
|
+
# @note
|
|
117
|
+
# This method actually executes the `unzip -v -l ZIP` command
|
|
118
|
+
# and parses it's output.
|
|
119
|
+
#
|
|
120
|
+
def each
|
|
121
|
+
return enum_for(__method__) unless block_given?
|
|
122
|
+
|
|
123
|
+
io = IO.popen(command_argv('-v','-l',@path))
|
|
124
|
+
|
|
125
|
+
# skip lines until the "--------- ---------- ----- ----" line
|
|
126
|
+
until io.eof?
|
|
127
|
+
break if io.readline.start_with?('-')
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
until io.eof?
|
|
131
|
+
line = io.readline(chomp: true)
|
|
132
|
+
|
|
133
|
+
unless line.start_with?('-')
|
|
134
|
+
yield parse_entry_line(line)
|
|
135
|
+
else
|
|
136
|
+
# reached the "--------- -------" line
|
|
137
|
+
break
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
last_line = io.readline(chomp: true)
|
|
142
|
+
return parse_statistics_line(last_line)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
alias list each
|
|
146
|
+
alias entries to_a
|
|
147
|
+
|
|
148
|
+
#
|
|
149
|
+
# Finds the entry with the given name.
|
|
150
|
+
#
|
|
151
|
+
# @param [String] name
|
|
152
|
+
# The file name to search for.
|
|
153
|
+
#
|
|
154
|
+
# @return [Entry, nil]
|
|
155
|
+
# The matching entry or `nil` if no entry could be found.
|
|
156
|
+
#
|
|
157
|
+
def [](name)
|
|
158
|
+
find { |entry| entry.name == name }
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
#
|
|
162
|
+
# Reads the contents of an entry from the zip archive.
|
|
163
|
+
#
|
|
164
|
+
# @param [String] name
|
|
165
|
+
# The name of the entry to read.
|
|
166
|
+
#
|
|
167
|
+
# @param [Integer, nil] length
|
|
168
|
+
# Optional number of bytes to read.
|
|
169
|
+
#
|
|
170
|
+
# @return [String]
|
|
171
|
+
# The read data.
|
|
172
|
+
#
|
|
173
|
+
# @note
|
|
174
|
+
# This method actually executes the `unzip -p ZIP FILE` command
|
|
175
|
+
# and reads it's output.
|
|
176
|
+
#
|
|
177
|
+
def read(name, length: nil)
|
|
178
|
+
io = IO.popen(command_argv('-p', @path, name))
|
|
179
|
+
|
|
180
|
+
if length then io.read(length)
|
|
181
|
+
else io.read
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
private
|
|
186
|
+
|
|
187
|
+
#
|
|
188
|
+
# Creates an `unzip` command with the additional arguments.
|
|
189
|
+
#
|
|
190
|
+
# @param [Array<String>] arguments
|
|
191
|
+
# Additional arguments for the `unzip` command.
|
|
192
|
+
#
|
|
193
|
+
# @return [Array<String>]
|
|
194
|
+
# The `unzip` command argv.
|
|
195
|
+
#
|
|
196
|
+
def command_argv(*arguments)
|
|
197
|
+
argv = ['unzip']
|
|
198
|
+
|
|
199
|
+
if @password
|
|
200
|
+
argv << '-P' << @password
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
argv.concat(arguments)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# Translates the Method column in `unzip -v -l` output to Symbols.
|
|
207
|
+
METHODS = {
|
|
208
|
+
'Stored' => :stored,
|
|
209
|
+
'Defl:N' => :deflate
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
#
|
|
213
|
+
# Parses a entry line from the output of `unzip -v -l ZIP`.
|
|
214
|
+
#
|
|
215
|
+
# @param [String] line
|
|
216
|
+
# The line to parse.
|
|
217
|
+
#
|
|
218
|
+
# @return [Entry]
|
|
219
|
+
# The parsed entry.
|
|
220
|
+
#
|
|
221
|
+
def parse_entry_line(line)
|
|
222
|
+
length, method, size, compression, date, time, crc32, name =
|
|
223
|
+
line.lstrip.split(/\s+/,8)
|
|
224
|
+
|
|
225
|
+
time_fmt = case date
|
|
226
|
+
when /\A\d{2}-\d{2}-\d{4}\z/ then "%m-%d-%Y %H:%M"
|
|
227
|
+
when /\A\d{4}-\d{2}-\d{2}\z/ then "%Y-%m-%d %H:%M"
|
|
228
|
+
else
|
|
229
|
+
raise(NotImplementedError,"unrecognized date format: #{date.inspect}")
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
length = length.to_i
|
|
233
|
+
method = METHODS.fetch(method)
|
|
234
|
+
size = size.to_i
|
|
235
|
+
compression = compression.chomp('%').to_i
|
|
236
|
+
time = Time.strptime("#{date} #{time}",time_fmt)
|
|
237
|
+
date = time.to_date
|
|
238
|
+
|
|
239
|
+
return Entry.new(self, length: length,
|
|
240
|
+
method: method,
|
|
241
|
+
size: size,
|
|
242
|
+
compression: compression,
|
|
243
|
+
date: date,
|
|
244
|
+
time: time,
|
|
245
|
+
crc32: crc32,
|
|
246
|
+
name: name)
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
#
|
|
250
|
+
# Parses the last line from the output of `unzip -v -l ZIP`.
|
|
251
|
+
#
|
|
252
|
+
# @param [String] line
|
|
253
|
+
# The line to parse.
|
|
254
|
+
#
|
|
255
|
+
# @return [Statistics]
|
|
256
|
+
# The parsed statistics.
|
|
257
|
+
#
|
|
258
|
+
def parse_statistics_line(line)
|
|
259
|
+
length, size, compression, files, _ = line.lstrip.split(/\s+/,5)
|
|
260
|
+
|
|
261
|
+
return Statistics.new(
|
|
262
|
+
length: length.to_i,
|
|
263
|
+
size: size.to_i,
|
|
264
|
+
compression: compression.chomp('%').to_i,
|
|
265
|
+
files: files.to_i
|
|
266
|
+
)
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
end
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'tmpdir'
|
|
20
|
+
require 'fileutils'
|
|
21
|
+
|
|
22
|
+
module Ronin
|
|
23
|
+
module Support
|
|
24
|
+
module Archive
|
|
25
|
+
module Zip
|
|
26
|
+
#
|
|
27
|
+
# Handles creating zip archives.
|
|
28
|
+
#
|
|
29
|
+
# @note
|
|
30
|
+
# This provides a simple interface for creating zip archives using
|
|
31
|
+
# the `zip` command. If you need something more powerful, use the
|
|
32
|
+
# [archive-zip] gem instead.
|
|
33
|
+
#
|
|
34
|
+
# [archive-zip]: https://github.com/javanthropus/archive-zip
|
|
35
|
+
#
|
|
36
|
+
# @api public
|
|
37
|
+
#
|
|
38
|
+
# @since 1.0.0
|
|
39
|
+
#
|
|
40
|
+
class Writer
|
|
41
|
+
|
|
42
|
+
# The path to the zip archive.
|
|
43
|
+
#
|
|
44
|
+
# @return [String]
|
|
45
|
+
attr_reader :path
|
|
46
|
+
|
|
47
|
+
# The optional password for the zip archive.
|
|
48
|
+
#
|
|
49
|
+
# @return [String, nil]
|
|
50
|
+
attr_reader :password
|
|
51
|
+
|
|
52
|
+
# The temp directory where the contents of the zip archive will be
|
|
53
|
+
# written into before zipping.
|
|
54
|
+
#
|
|
55
|
+
# @return [String]
|
|
56
|
+
#
|
|
57
|
+
# @api private
|
|
58
|
+
attr_reader :tempdir
|
|
59
|
+
|
|
60
|
+
#
|
|
61
|
+
# Initializes the zip writer.
|
|
62
|
+
#
|
|
63
|
+
# @param [String] path
|
|
64
|
+
# The path to the zip archive.
|
|
65
|
+
#
|
|
66
|
+
# @param [String, nil] password
|
|
67
|
+
# The optional password for the zip archive.
|
|
68
|
+
#
|
|
69
|
+
# @yield [self]
|
|
70
|
+
# If a block is given it will be passed the zip archive writer.
|
|
71
|
+
#
|
|
72
|
+
def initialize(path, password: nil)
|
|
73
|
+
@path = File.expand_path(path)
|
|
74
|
+
@password = password
|
|
75
|
+
|
|
76
|
+
@tempdir = Dir.mktmpdir('ronin-support')
|
|
77
|
+
|
|
78
|
+
if block_given?
|
|
79
|
+
yield self
|
|
80
|
+
close
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
#
|
|
85
|
+
# Alias for {new}.
|
|
86
|
+
#
|
|
87
|
+
# @param [String] path
|
|
88
|
+
# The path to the zip archive.
|
|
89
|
+
#
|
|
90
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
91
|
+
# Additional keyword arguments for {new}.
|
|
92
|
+
#
|
|
93
|
+
# @option kwargs [String, nil] :password
|
|
94
|
+
# The optional password for the zip archive.
|
|
95
|
+
#
|
|
96
|
+
# @yield [zip]
|
|
97
|
+
# If a block is given it will be passed the zip archive writer.
|
|
98
|
+
#
|
|
99
|
+
# @yieldparam [Writer] zip
|
|
100
|
+
# The newly created zip archive writer.
|
|
101
|
+
#
|
|
102
|
+
# @return [Writer]
|
|
103
|
+
# The newly created zip archive writer.
|
|
104
|
+
#
|
|
105
|
+
# @see new
|
|
106
|
+
#
|
|
107
|
+
def self.open(path,**kwargs,&block)
|
|
108
|
+
new(path,**kwargs,&block)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
#
|
|
112
|
+
# Adds a file to the zip archive.
|
|
113
|
+
#
|
|
114
|
+
# @param [String] name
|
|
115
|
+
# The relative path to the file.
|
|
116
|
+
#
|
|
117
|
+
# @param [String, nil] contents
|
|
118
|
+
# The optional contents for the file.
|
|
119
|
+
#
|
|
120
|
+
# @yield [file]
|
|
121
|
+
# If a block is given, it will be passed the opened file for
|
|
122
|
+
# writing.
|
|
123
|
+
#
|
|
124
|
+
# @yieldparam [File] file
|
|
125
|
+
# The opened file for writing.
|
|
126
|
+
#
|
|
127
|
+
def add_file(name,contents=nil,&block)
|
|
128
|
+
file_path = File.join(@tempdir,name)
|
|
129
|
+
|
|
130
|
+
if contents
|
|
131
|
+
File.write(file_path,contents)
|
|
132
|
+
else
|
|
133
|
+
File.open(file_path,'w',&block)
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
#
|
|
138
|
+
# Saves the contents of the zip archive to {#path}.
|
|
139
|
+
#
|
|
140
|
+
# @api private
|
|
141
|
+
#
|
|
142
|
+
def save
|
|
143
|
+
Dir.chdir(@tempdir) do
|
|
144
|
+
args = ['-q']
|
|
145
|
+
|
|
146
|
+
if @password
|
|
147
|
+
args << '-P' << @password
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
system('zip',*args,'-r',@path,'.')
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
#
|
|
155
|
+
# Cleanup the zip archive's {#tempdir}.
|
|
156
|
+
#
|
|
157
|
+
# @api private
|
|
158
|
+
#
|
|
159
|
+
def cleanup
|
|
160
|
+
FileUtils.rm_r(@tempdir)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
#
|
|
164
|
+
# Closes the zip archive.
|
|
165
|
+
#
|
|
166
|
+
def close
|
|
167
|
+
save
|
|
168
|
+
cleanup
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/archive/zip/reader'
|
|
20
|
+
require 'ronin/support/archive/zip/writer'
|
|
21
|
+
|
|
22
|
+
module Ronin
|
|
23
|
+
module Support
|
|
24
|
+
module Archive
|
|
25
|
+
#
|
|
26
|
+
# Handles zip archive reading/writing.
|
|
27
|
+
#
|
|
28
|
+
# @api public
|
|
29
|
+
#
|
|
30
|
+
# @since 1.0.0
|
|
31
|
+
#
|
|
32
|
+
module Zip
|
|
33
|
+
#
|
|
34
|
+
# Creates a zip archive reader or writer object.
|
|
35
|
+
#
|
|
36
|
+
# @param [String] path
|
|
37
|
+
# The path of the zip archive.
|
|
38
|
+
#
|
|
39
|
+
# @param [String] mode
|
|
40
|
+
# The mode to open the zip archive in.
|
|
41
|
+
#
|
|
42
|
+
# @yield [zip]
|
|
43
|
+
# If a block is given, it will be passed the zip stream object.
|
|
44
|
+
#
|
|
45
|
+
# @yieldparam [Reader, Writer] zip
|
|
46
|
+
# The zip reader or writer object.
|
|
47
|
+
#
|
|
48
|
+
# @return [Reader, Writer]
|
|
49
|
+
# The zip reader or writer object.
|
|
50
|
+
#
|
|
51
|
+
# @raise [ArgumentError]
|
|
52
|
+
# The mode must include either `r`, `w`, or `a`.
|
|
53
|
+
#
|
|
54
|
+
# @api public
|
|
55
|
+
#
|
|
56
|
+
def self.new(path, mode: 'r', &block)
|
|
57
|
+
zip_class = if mode.include?('w') || mode.include?('a')
|
|
58
|
+
Writer
|
|
59
|
+
elsif mode.include?('r')
|
|
60
|
+
Reader
|
|
61
|
+
else
|
|
62
|
+
raise(ArgumentError,"mode argument must include either 'r', 'w', or 'a': #{mode.inspect}")
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
return zip_class.new(path,&block)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
#
|
|
69
|
+
# Opens a zip file for reading or writing.
|
|
70
|
+
#
|
|
71
|
+
# @param [String] path
|
|
72
|
+
# The path to the zip file.
|
|
73
|
+
#
|
|
74
|
+
# @param [String] mode
|
|
75
|
+
# The mode to open the zip file in.
|
|
76
|
+
#
|
|
77
|
+
# @yield [gz]
|
|
78
|
+
# If a block is given, it will be passed the zip writer object.
|
|
79
|
+
#
|
|
80
|
+
# @yieldparam [Reader, Writer] gz
|
|
81
|
+
# The zip writer object.
|
|
82
|
+
#
|
|
83
|
+
# @return [Reader, Writer]
|
|
84
|
+
# The zip writer object.
|
|
85
|
+
#
|
|
86
|
+
# @raise [ArgumentError]
|
|
87
|
+
# The mode must include either `r`, `w`, or `a`.
|
|
88
|
+
#
|
|
89
|
+
# @api public
|
|
90
|
+
#
|
|
91
|
+
def self.open(path, mode: 'r', &block)
|
|
92
|
+
zip_class = if mode.include?('w') || mode.include?('a')
|
|
93
|
+
Writer
|
|
94
|
+
elsif mode.include?('r')
|
|
95
|
+
Reader
|
|
96
|
+
else
|
|
97
|
+
raise(ArgumentError,"mode argument must include either 'r', 'w', or 'a'")
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
return zip_class.open(path,&block)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|