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,211 @@
|
|
|
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/tar'
|
|
20
|
+
require 'ronin/support/archive/zip'
|
|
21
|
+
require 'ronin/support/archive/core_ext'
|
|
22
|
+
|
|
23
|
+
module Ronin
|
|
24
|
+
module Support
|
|
25
|
+
#
|
|
26
|
+
# @api public
|
|
27
|
+
#
|
|
28
|
+
# @since 1.0.0
|
|
29
|
+
#
|
|
30
|
+
module Archive
|
|
31
|
+
#
|
|
32
|
+
# Creates a tar stream around the IO object.
|
|
33
|
+
#
|
|
34
|
+
# @param [IO, StringIO] io
|
|
35
|
+
# The IO object to read or write data to.
|
|
36
|
+
#
|
|
37
|
+
# @param [String] mode
|
|
38
|
+
# The mode to open the tar stream with.
|
|
39
|
+
#
|
|
40
|
+
# @yield [tar]
|
|
41
|
+
# If a block is given, it will be passed the tar stream object.
|
|
42
|
+
#
|
|
43
|
+
# @yieldparam [Tar::Reader, Tar::Writer] tar
|
|
44
|
+
# The tar reader or writer object.
|
|
45
|
+
#
|
|
46
|
+
# @return [Tar::Reader, Tar::Writer]
|
|
47
|
+
# The tar reader or writer object.
|
|
48
|
+
#
|
|
49
|
+
# @raise [ArgumentError]
|
|
50
|
+
# The mode must include either `r`, `w`, or `a`.
|
|
51
|
+
#
|
|
52
|
+
# @see Tar.new
|
|
53
|
+
#
|
|
54
|
+
# @api public
|
|
55
|
+
#
|
|
56
|
+
def self.tar_stream(io, mode: 'r', &block)
|
|
57
|
+
Tar.new(io, mode: mode, &block)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
#
|
|
61
|
+
# Opens a tar file for reading or writing.
|
|
62
|
+
#
|
|
63
|
+
# @param [String] path
|
|
64
|
+
# The path to the tar file.
|
|
65
|
+
#
|
|
66
|
+
# @param [String] mode
|
|
67
|
+
# The mode to open the file as.
|
|
68
|
+
#
|
|
69
|
+
# @yield [tar]
|
|
70
|
+
# If a block is given, it will be passed the tar writer object.
|
|
71
|
+
#
|
|
72
|
+
# @yieldparam [Tar::Writer] tar
|
|
73
|
+
# The tar writer object.
|
|
74
|
+
#
|
|
75
|
+
# @return [Tar::Writer]
|
|
76
|
+
# The tar writer object.
|
|
77
|
+
#
|
|
78
|
+
# @raise [ArgumentError]
|
|
79
|
+
# The mode must include either `r`, `w`, or `a`.
|
|
80
|
+
#
|
|
81
|
+
# @see Tar.open
|
|
82
|
+
#
|
|
83
|
+
# @api public
|
|
84
|
+
#
|
|
85
|
+
def self.tar_open(path, mode: 'r', &block)
|
|
86
|
+
Tar.open(path, mode: mode, &block)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
#
|
|
90
|
+
# Opens the tarped file for reading.
|
|
91
|
+
#
|
|
92
|
+
# @param [String] path
|
|
93
|
+
# The path to the file to read.
|
|
94
|
+
#
|
|
95
|
+
# @yield [tar]
|
|
96
|
+
# If a block is given, it will be passed the tar reader object.
|
|
97
|
+
#
|
|
98
|
+
# @yieldparam [Tar::Reader] tar
|
|
99
|
+
# The tar reader object.
|
|
100
|
+
#
|
|
101
|
+
# @return [Tar::Reader]
|
|
102
|
+
# The tar reader object.
|
|
103
|
+
#
|
|
104
|
+
# @see tar_open
|
|
105
|
+
#
|
|
106
|
+
# @api public
|
|
107
|
+
#
|
|
108
|
+
def self.untar(path,&block)
|
|
109
|
+
tar_open(path,&block)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
#
|
|
113
|
+
# Opens the tar file for writing.
|
|
114
|
+
#
|
|
115
|
+
# @param [String] path
|
|
116
|
+
# The path to the file to write to.
|
|
117
|
+
#
|
|
118
|
+
# @yield [tar]
|
|
119
|
+
# If a block is given, it will be passed the tar writer object.
|
|
120
|
+
#
|
|
121
|
+
# @yieldparam [Tar::Writer] tar
|
|
122
|
+
# The tar writer object.
|
|
123
|
+
#
|
|
124
|
+
# @return [Tar::Writer]
|
|
125
|
+
# The tar writer object.
|
|
126
|
+
#
|
|
127
|
+
# @see tar_open
|
|
128
|
+
#
|
|
129
|
+
# @api public
|
|
130
|
+
#
|
|
131
|
+
def self.tar(path,&block)
|
|
132
|
+
tar_open(path, mode: 'w', &block)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
#
|
|
136
|
+
# Opens a zip file for reading or writing.
|
|
137
|
+
#
|
|
138
|
+
# @param [String] path
|
|
139
|
+
# The path to the zip file.
|
|
140
|
+
#
|
|
141
|
+
# @param [String] mode
|
|
142
|
+
# The mode to open the file as.
|
|
143
|
+
#
|
|
144
|
+
# @yield [zip]
|
|
145
|
+
# If a block is given, it will be passed the zip writer object.
|
|
146
|
+
#
|
|
147
|
+
# @yieldparam [Zip::Writer] zip
|
|
148
|
+
# The zip writer object.
|
|
149
|
+
#
|
|
150
|
+
# @return [Zip::Writer]
|
|
151
|
+
# The zip writer object.
|
|
152
|
+
#
|
|
153
|
+
# @raise [ArgumentError]
|
|
154
|
+
# The mode must include either `r`, `w`, or `a`.
|
|
155
|
+
#
|
|
156
|
+
# @see Zip.open
|
|
157
|
+
#
|
|
158
|
+
# @api public
|
|
159
|
+
#
|
|
160
|
+
def self.zip_open(path, mode: 'r', &block)
|
|
161
|
+
Zip.open(path, mode: mode, &block)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
#
|
|
165
|
+
# Opens the zipped file for reading.
|
|
166
|
+
#
|
|
167
|
+
# @param [String] path
|
|
168
|
+
# The path to the file to read.
|
|
169
|
+
#
|
|
170
|
+
# @yield [zip]
|
|
171
|
+
# If a block is given, it will be passed the zip reader object.
|
|
172
|
+
#
|
|
173
|
+
# @yieldparam [Zip::Reader] zip
|
|
174
|
+
# The zip reader object.
|
|
175
|
+
#
|
|
176
|
+
# @return [Zip::Reader]
|
|
177
|
+
# The zip reader object.
|
|
178
|
+
#
|
|
179
|
+
# @see zip_open
|
|
180
|
+
#
|
|
181
|
+
# @api public
|
|
182
|
+
#
|
|
183
|
+
def self.unzip(path,&block)
|
|
184
|
+
zip_open(path,&block)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
#
|
|
188
|
+
# Opens the zip file for writing.
|
|
189
|
+
#
|
|
190
|
+
# @param [String] path
|
|
191
|
+
# The path to the file to write to.
|
|
192
|
+
#
|
|
193
|
+
# @yield [zip]
|
|
194
|
+
# If a block is given, it will be passed the zip writer object.
|
|
195
|
+
#
|
|
196
|
+
# @yieldparam [Zip::Writer] zip
|
|
197
|
+
# The zip writer object.
|
|
198
|
+
#
|
|
199
|
+
# @return [Zip::Writer]
|
|
200
|
+
# The zip writer object.
|
|
201
|
+
#
|
|
202
|
+
# @see zip_open
|
|
203
|
+
#
|
|
204
|
+
# @api public
|
|
205
|
+
#
|
|
206
|
+
def self.zip(path,&block)
|
|
207
|
+
zip_open(path, mode: 'w', &block)
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
end
|
|
@@ -0,0 +1,255 @@
|
|
|
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/binary/memory'
|
|
20
|
+
require 'ronin/support/binary/byte_slice'
|
|
21
|
+
require 'ronin/support/binary/ctypes/mixin'
|
|
22
|
+
|
|
23
|
+
module Ronin
|
|
24
|
+
module Support
|
|
25
|
+
module Binary
|
|
26
|
+
#
|
|
27
|
+
# Represents an Array of binary types that can be read from and written
|
|
28
|
+
# to.
|
|
29
|
+
#
|
|
30
|
+
# @note This class provides lazy memory mapped access to an underlying
|
|
31
|
+
# buffer. This means values are decoded/encoded each time they are read
|
|
32
|
+
# or written to.
|
|
33
|
+
#
|
|
34
|
+
# ## Examples
|
|
35
|
+
#
|
|
36
|
+
# Creating an array of `int32`s:
|
|
37
|
+
#
|
|
38
|
+
# array = Binary::Array.new(:int32, 4)
|
|
39
|
+
# # => #<Ronin::Support::Binary::Binary::Array: "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00">
|
|
40
|
+
# array[0] = 0x11111111
|
|
41
|
+
# array[1] = 0x22222222
|
|
42
|
+
# array[2] = 0x33333333
|
|
43
|
+
# array[3] = -1
|
|
44
|
+
# array.to_s
|
|
45
|
+
# # => "\x11\x11\x11\x11\"\"\"\"3333\xFF\xFF\xFF\xFF"
|
|
46
|
+
#
|
|
47
|
+
# Creating an array from an existing String:
|
|
48
|
+
#
|
|
49
|
+
# array = Binary::Array.new(:uint32_le, "\x41\x00\x00\x00\x42\x00\x00\x00")
|
|
50
|
+
# # => #<Ronin::Support::Binary::Binary::Array: "A\u0000\u0000\u0000B\u0000\u0000\u0000">
|
|
51
|
+
# array[0]
|
|
52
|
+
# # => 65
|
|
53
|
+
# array[1]
|
|
54
|
+
# # => 66
|
|
55
|
+
#
|
|
56
|
+
# @api public
|
|
57
|
+
#
|
|
58
|
+
# @since 1.0.0
|
|
59
|
+
#
|
|
60
|
+
class Array < Memory
|
|
61
|
+
|
|
62
|
+
include CTypes::Mixin
|
|
63
|
+
include Enumerable
|
|
64
|
+
|
|
65
|
+
# The underlying type of the data within the array buffer.
|
|
66
|
+
#
|
|
67
|
+
# @return [CTypes::Type]
|
|
68
|
+
attr_reader :type
|
|
69
|
+
|
|
70
|
+
# The number of elements in the array buffer.
|
|
71
|
+
#
|
|
72
|
+
# @return [Integer]
|
|
73
|
+
attr_reader :length
|
|
74
|
+
|
|
75
|
+
#
|
|
76
|
+
# Initializes the array buffer.
|
|
77
|
+
#
|
|
78
|
+
# @param [Symbol] type
|
|
79
|
+
# The type of each element in the array buffer.
|
|
80
|
+
#
|
|
81
|
+
# @param [Integer, String, ByteSlice] length_or_string
|
|
82
|
+
# The length of the buffer or an existing String which will be used
|
|
83
|
+
# as the underlying buffer.
|
|
84
|
+
#
|
|
85
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
86
|
+
# Additional keyword arguments.
|
|
87
|
+
#
|
|
88
|
+
# @option kwargs [:little, :big, :net, nil] :endian
|
|
89
|
+
# The desired endianness of the values within the array buffer.
|
|
90
|
+
#
|
|
91
|
+
# @option kwargs [:x86, :x86_64,
|
|
92
|
+
# :ppc, :ppc64,
|
|
93
|
+
# :mips, :mips_le, :mips_be,
|
|
94
|
+
# :mips64, :mips64_le, :mips64_be,
|
|
95
|
+
# :arm, :arm_le, :arm_be,
|
|
96
|
+
# :arm64, :arm64_le, :arm64_be] :arch
|
|
97
|
+
# The desired architecture for the values within the array buffer.
|
|
98
|
+
#
|
|
99
|
+
# @raise [ArgumentError]
|
|
100
|
+
# Either the `length_or_string` argument was not an Integer or a
|
|
101
|
+
# String.
|
|
102
|
+
#
|
|
103
|
+
# @example Creating a new array buffer:
|
|
104
|
+
# array = Binary::Array.new(:uint32_le, 10)
|
|
105
|
+
# # => #<Ronin::Support::Binary::Binary::Array: "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00">
|
|
106
|
+
#
|
|
107
|
+
# @example Creating a new array buffer from a String:
|
|
108
|
+
# array = Binary::Array.new(:uint32_le, "\x41\x00\x00\x00\x42\x00\x00\x00")
|
|
109
|
+
# # => #<Ronin::Support::Binary::Binary::Array: "A\u0000\u0000\u0000B\u0000\u0000\u0000">
|
|
110
|
+
#
|
|
111
|
+
def initialize(type, length_or_string, **kwargs)
|
|
112
|
+
initialize_type_system(**kwargs)
|
|
113
|
+
|
|
114
|
+
@type = @type_resolver.resolve(type)
|
|
115
|
+
@cache = []
|
|
116
|
+
|
|
117
|
+
case length_or_string
|
|
118
|
+
when String, ByteSlice
|
|
119
|
+
super(length_or_string)
|
|
120
|
+
|
|
121
|
+
@length = size / @type.size
|
|
122
|
+
when Integer
|
|
123
|
+
@length = length_or_string
|
|
124
|
+
|
|
125
|
+
super(@type.size * @length)
|
|
126
|
+
else
|
|
127
|
+
raise(ArgumentError,"first argument must be either a length (Integer) or a buffer (String): #{length_or_string.inspect}")
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
#
|
|
132
|
+
# Reads the struct from the IO stream.
|
|
133
|
+
#
|
|
134
|
+
# @param [IO] io
|
|
135
|
+
# The IO object to read from.
|
|
136
|
+
#
|
|
137
|
+
# @param [Symbol] type
|
|
138
|
+
# The desired type of each element in the array.
|
|
139
|
+
#
|
|
140
|
+
# @param [Integer] length
|
|
141
|
+
# The desired length of the array.
|
|
142
|
+
#
|
|
143
|
+
# @return [Binary::Struct]
|
|
144
|
+
# The read array.
|
|
145
|
+
#
|
|
146
|
+
# @example
|
|
147
|
+
# file = File.new('binary.dat','b')
|
|
148
|
+
# array = Binary::Array.read_from(file,:int32,10)
|
|
149
|
+
#
|
|
150
|
+
# @see #read_from
|
|
151
|
+
#
|
|
152
|
+
def self.read_from(io,type,length)
|
|
153
|
+
new(type,length).read_from(io)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
#
|
|
157
|
+
# Reads a value from the array at the given index.
|
|
158
|
+
#
|
|
159
|
+
# @param [Integer] index
|
|
160
|
+
# The index to read from.
|
|
161
|
+
#
|
|
162
|
+
# @return [Integer, Float, String, Binary::Array, Binary::Struct]
|
|
163
|
+
# The integer, float, or character read from the given index.
|
|
164
|
+
#
|
|
165
|
+
# @example
|
|
166
|
+
# array = Binary::Array.new(:uint32_le, "\x41\x00\x00\x00\x42\x00\x00\x00")
|
|
167
|
+
# array[0]
|
|
168
|
+
# # => 65
|
|
169
|
+
# array[1]
|
|
170
|
+
# # => 66
|
|
171
|
+
#
|
|
172
|
+
def [](index)
|
|
173
|
+
offset = index * @type.size
|
|
174
|
+
|
|
175
|
+
if (index < 0 || offset+@type.size > size)
|
|
176
|
+
raise(IndexError,"index #{index} is out of bounds: 0...#{@length}")
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
case @type
|
|
180
|
+
when CTypes::ObjectType
|
|
181
|
+
@cache[index] ||= (
|
|
182
|
+
slice = byteslice(offset,@type.size)
|
|
183
|
+
@type.unpack(slice)
|
|
184
|
+
)
|
|
185
|
+
else
|
|
186
|
+
data = super(offset,@type.size)
|
|
187
|
+
@type.unpack(data)
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
#
|
|
192
|
+
# Writes a value to the array at the given index.
|
|
193
|
+
#
|
|
194
|
+
# @param [Integer] index
|
|
195
|
+
# The array index to write the value to.
|
|
196
|
+
#
|
|
197
|
+
# @param [Integer, Float, String, Binary::Array, Binary::Struct] value
|
|
198
|
+
# The integer, float, or character value to write to the array.
|
|
199
|
+
#
|
|
200
|
+
# @return [Integer, Float, String, Binary::Array, Binary::Struct]
|
|
201
|
+
# The integer, float, or character value that was written.
|
|
202
|
+
#
|
|
203
|
+
# @example
|
|
204
|
+
# array = Binary::Array.new(:int32, 4)
|
|
205
|
+
# array[0]
|
|
206
|
+
# # => 0
|
|
207
|
+
# array[0] = 0x11111111
|
|
208
|
+
# array[0]
|
|
209
|
+
# # => 286331153
|
|
210
|
+
#
|
|
211
|
+
def []=(index,value)
|
|
212
|
+
offset = index * @type.size
|
|
213
|
+
|
|
214
|
+
if (index < 0 || offset+@type.size > size)
|
|
215
|
+
raise(IndexError,"index #{index} is out of bounds: 0...#{@length}")
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
data = @type.pack(value)
|
|
219
|
+
return super(offset,@type.size,data)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
#
|
|
223
|
+
# Enumerates over every value within the array buffer.
|
|
224
|
+
#
|
|
225
|
+
# @yield [value]
|
|
226
|
+
# The given block will be passed each value at each index within the
|
|
227
|
+
# array buffer.
|
|
228
|
+
#
|
|
229
|
+
# @yieldparam [Integer, Float, String] value
|
|
230
|
+
# The integer, float, or character read from the array buffer.
|
|
231
|
+
#
|
|
232
|
+
# @return [Enumerator]
|
|
233
|
+
# If no block was given, an Enumerator will be returned.
|
|
234
|
+
#
|
|
235
|
+
def each
|
|
236
|
+
return enum_for(__method__) unless block_given?
|
|
237
|
+
|
|
238
|
+
(0...@length).each do |index|
|
|
239
|
+
yield self[index]
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
#
|
|
244
|
+
# Inspects the array buffer.
|
|
245
|
+
#
|
|
246
|
+
# @return [String]
|
|
247
|
+
#
|
|
248
|
+
def inspect
|
|
249
|
+
"#<#{self.class}: #{@string.inspect}>"
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
@@ -0,0 +1,147 @@
|
|
|
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
|
+
module Ronin
|
|
20
|
+
module Support
|
|
21
|
+
module Binary
|
|
22
|
+
#
|
|
23
|
+
# Methods for performing bit-flipping.
|
|
24
|
+
#
|
|
25
|
+
# @api semipublic
|
|
26
|
+
#
|
|
27
|
+
module BitFlip
|
|
28
|
+
module Integer
|
|
29
|
+
#
|
|
30
|
+
# Enumerates over every bit flip in the integer.
|
|
31
|
+
#
|
|
32
|
+
# @param [Integer, Range(Integer)] bits
|
|
33
|
+
# The number of bits to flip or a range of bit indexes to flip.
|
|
34
|
+
#
|
|
35
|
+
# @yield [int]
|
|
36
|
+
# If a block is given, it will be passed each bit-flipped integer.
|
|
37
|
+
#
|
|
38
|
+
# @yieldparam [Integer] int
|
|
39
|
+
# The integer but with one of it's bits flipped.
|
|
40
|
+
#
|
|
41
|
+
# @return [Enumerator]
|
|
42
|
+
# If no block is given, an Enumerator object will be returned.
|
|
43
|
+
#
|
|
44
|
+
# @raise [ArgumentError]
|
|
45
|
+
# The given bits must be either a Range or an Integer.
|
|
46
|
+
#
|
|
47
|
+
# @example bit-flip all eight bits:
|
|
48
|
+
# Binary::BitFlip::Byte.each_bit_flip(0x41,8) { |int| puts "%.8b" % int }
|
|
49
|
+
#
|
|
50
|
+
# @example bit-flip bits 8-16:
|
|
51
|
+
# Binary::BitFlip::Byte.each_bit_flip(0xffff,8...16) { |int| puts "%.16b" % int }
|
|
52
|
+
#
|
|
53
|
+
def self.each_bit_flip(int,bits,&block)
|
|
54
|
+
return enum_for(__method__,int,bits) unless block_given?
|
|
55
|
+
|
|
56
|
+
bits = case bits
|
|
57
|
+
when ::Range then bits
|
|
58
|
+
when ::Integer then (0...bits)
|
|
59
|
+
else
|
|
60
|
+
raise(ArgumentError,"bits must be an Integer or a Range: #{bits.inspect}")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
bits.each do |bit_index|
|
|
64
|
+
mask = 1 << bit_index
|
|
65
|
+
|
|
66
|
+
yield int ^ mask
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
#
|
|
71
|
+
# Returns every bit flip in the integer.
|
|
72
|
+
#
|
|
73
|
+
# @param [Integer, Range(Integer)] bits
|
|
74
|
+
# The number of bits to flip or a range of bit indexes to flip.
|
|
75
|
+
#
|
|
76
|
+
# @return [Array<Integer>]
|
|
77
|
+
# The bit-flipped integers.
|
|
78
|
+
#
|
|
79
|
+
# @raise [ArgumentError]
|
|
80
|
+
# The given bits must be either a Range or an Integer.
|
|
81
|
+
#
|
|
82
|
+
# @example bit-flip all eight bits:
|
|
83
|
+
# 0x41.bit_flips(8)
|
|
84
|
+
#
|
|
85
|
+
# @example bit-flip bits 8-16:
|
|
86
|
+
# 0xffff.bit_flips(8...16)
|
|
87
|
+
#
|
|
88
|
+
def self.bit_flips(int,bits)
|
|
89
|
+
each_bit_flip(int,bits).to_a
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
module String
|
|
94
|
+
#
|
|
95
|
+
# Enumerates over every bit flip of every byte in the string.
|
|
96
|
+
#
|
|
97
|
+
# @param [String] string
|
|
98
|
+
# The string to bit flip.
|
|
99
|
+
#
|
|
100
|
+
# @yield [string]
|
|
101
|
+
# If a block is given, it will be passed each bit-flipped string.
|
|
102
|
+
#
|
|
103
|
+
# @yieldparam [String] string
|
|
104
|
+
# The String, but with one of it's bits flipped.
|
|
105
|
+
#
|
|
106
|
+
# @return [Enumerator]
|
|
107
|
+
# If no block is given, an Enumerator object will be returned.
|
|
108
|
+
#
|
|
109
|
+
# @example bit-flip all bytes in the String:
|
|
110
|
+
# Binary::BitFlip.each_bit_flip("foo") { |string| puts string }
|
|
111
|
+
#
|
|
112
|
+
def self.each_bit_flip(string)
|
|
113
|
+
return enum_for(__method__,string) unless block_given?
|
|
114
|
+
|
|
115
|
+
bits = (0...8)
|
|
116
|
+
|
|
117
|
+
string.each_byte.each_with_index do |byte,index|
|
|
118
|
+
Integer.each_bit_flip(byte,bits) do |flipped_byte|
|
|
119
|
+
new_string = string.dup
|
|
120
|
+
new_string.force_encoding(Encoding::ASCII_8BIT)
|
|
121
|
+
new_string.setbyte(index,flipped_byte)
|
|
122
|
+
yield new_string
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
return nil
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
#
|
|
130
|
+
# Returns every bit flip of every byte in the string.
|
|
131
|
+
#
|
|
132
|
+
# @return [Array<String>]
|
|
133
|
+
# The bit-flipped strings.
|
|
134
|
+
#
|
|
135
|
+
# @example bit-flip all bytes in the String:
|
|
136
|
+
# Binary::BitFlip.bit_flips("foo")
|
|
137
|
+
#
|
|
138
|
+
# @api public
|
|
139
|
+
#
|
|
140
|
+
def self.bit_flips(string)
|
|
141
|
+
each_bit_flip(string).to_a
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|