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,129 @@
|
|
|
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 <http://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/encoding/ruby'
|
|
20
|
+
|
|
21
|
+
class String
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Escapes a String for Ruby.
|
|
25
|
+
#
|
|
26
|
+
# @return [String]
|
|
27
|
+
# The Ruby escaped String.
|
|
28
|
+
#
|
|
29
|
+
# @example
|
|
30
|
+
# "hello\nworld\n".ruby_escape
|
|
31
|
+
# # => "hello\\nworld\\n"
|
|
32
|
+
#
|
|
33
|
+
# @see Ronin::Support::Encoding::Ruby.escape
|
|
34
|
+
#
|
|
35
|
+
# @since 1.0.0
|
|
36
|
+
#
|
|
37
|
+
# @api public
|
|
38
|
+
#
|
|
39
|
+
def ruby_escape
|
|
40
|
+
Ronin::Support::Encoding::Ruby.escape(self)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
alias escape ruby_escape
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# Unescapes a Ruby escaped String.
|
|
47
|
+
#
|
|
48
|
+
# @return [String]
|
|
49
|
+
# The unescaped Ruby String.
|
|
50
|
+
#
|
|
51
|
+
# @example
|
|
52
|
+
# "\x68\x65\x6c\x6c\x6f\x20\x77\x6f\x72\x6c\x64".ruby_unescape
|
|
53
|
+
# # => "hello world"
|
|
54
|
+
#
|
|
55
|
+
# @see Ronin::Support::Encoding::Ruby.unescape
|
|
56
|
+
#
|
|
57
|
+
# @since 1.0.0
|
|
58
|
+
#
|
|
59
|
+
# @api public
|
|
60
|
+
#
|
|
61
|
+
def ruby_unescape
|
|
62
|
+
Ronin::Support::Encoding::Ruby.unescape(self)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
alias unescape ruby_unescape
|
|
66
|
+
|
|
67
|
+
#
|
|
68
|
+
# Ruby escapes every character in the String.
|
|
69
|
+
#
|
|
70
|
+
# @return [String]
|
|
71
|
+
# The Ruby escaped String.
|
|
72
|
+
#
|
|
73
|
+
# @example
|
|
74
|
+
# "hello".ruby_encode
|
|
75
|
+
# # => "\\x68\\x65\\x6c\\x6c\\x6f"
|
|
76
|
+
#
|
|
77
|
+
# @see Ronin::Support::Encoding::Ruby.encode
|
|
78
|
+
#
|
|
79
|
+
# @api public
|
|
80
|
+
#
|
|
81
|
+
# @since 1.0.0
|
|
82
|
+
#
|
|
83
|
+
def ruby_encode
|
|
84
|
+
Ronin::Support::Encoding::Ruby.encode(self)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
alias ruby_decode ruby_unescape
|
|
88
|
+
|
|
89
|
+
#
|
|
90
|
+
# Rubyonverts the String into a Ruby string.
|
|
91
|
+
#
|
|
92
|
+
# @return [String]
|
|
93
|
+
#
|
|
94
|
+
# @example
|
|
95
|
+
# "hello\nworld\n".ruby_string
|
|
96
|
+
# # => "\"hello\\nworld\\n\""
|
|
97
|
+
#
|
|
98
|
+
# @see Ronin::Support::Encoding::Ruby.quote
|
|
99
|
+
#
|
|
100
|
+
# @since 1.0.0
|
|
101
|
+
#
|
|
102
|
+
# @api public
|
|
103
|
+
#
|
|
104
|
+
def ruby_string
|
|
105
|
+
Ronin::Support::Encoding::Ruby.quote(self)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
#
|
|
109
|
+
# Removes the quotes an unescapes a Ruby string.
|
|
110
|
+
#
|
|
111
|
+
# @return [String]
|
|
112
|
+
# The un-quoted String if the String begins and ends with quotes, or the
|
|
113
|
+
# same String if it is not quoted.
|
|
114
|
+
#
|
|
115
|
+
# @example
|
|
116
|
+
# "\"hello\\nworld\"".ruby_unquote
|
|
117
|
+
# # => "hello\nworld"
|
|
118
|
+
#
|
|
119
|
+
# @see Ronin::Support::Encoding::Ruby.unquote
|
|
120
|
+
#
|
|
121
|
+
# @since 1.0.0
|
|
122
|
+
#
|
|
123
|
+
# @api public
|
|
124
|
+
#
|
|
125
|
+
def ruby_unquote
|
|
126
|
+
Ronin::Support::Encoding::Ruby.unquote(self)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
end
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
#
|
|
2
|
-
# Copyright (c) 2006-
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
3
4
|
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# Ronin Support is free software: you can redistribute it and/or modify
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
7
6
|
# it under the terms of the GNU Lesser General Public License as published
|
|
8
7
|
# by the Free Software Foundation, either version 3 of the License, or
|
|
9
8
|
# (at your option) any later version.
|
|
10
9
|
#
|
|
11
|
-
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
12
11
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
12
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
13
|
# GNU Lesser General Public License for more details.
|
|
15
14
|
#
|
|
16
15
|
# You should have received a copy of the GNU Lesser General Public License
|
|
17
|
-
# along with
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
18
17
|
#
|
|
19
18
|
|
|
20
|
-
require 'ronin/
|
|
19
|
+
require 'ronin/support/encoding/ruby/core_ext/string'
|
|
@@ -0,0 +1,235 @@
|
|
|
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 'strscan'
|
|
20
|
+
|
|
21
|
+
module Ronin
|
|
22
|
+
module Support
|
|
23
|
+
class Encoding < ::Encoding
|
|
24
|
+
#
|
|
25
|
+
# Contains methods for encoding/decoding escaping/unescaping Ruby strings.
|
|
26
|
+
#
|
|
27
|
+
# @api public
|
|
28
|
+
#
|
|
29
|
+
module Ruby
|
|
30
|
+
#
|
|
31
|
+
# Encodes a byte as a Ruby escaped character.
|
|
32
|
+
#
|
|
33
|
+
# @param [Integer] byte
|
|
34
|
+
# The byte value to encode.
|
|
35
|
+
#
|
|
36
|
+
# @return [String]
|
|
37
|
+
# The escaped Ruby character.
|
|
38
|
+
#
|
|
39
|
+
# @example
|
|
40
|
+
# Encoding::Ruby.encode_byte(0x41)
|
|
41
|
+
# # => "\\x41"
|
|
42
|
+
# Encoding::Ruby.encode_byte(0x100)
|
|
43
|
+
# # => "\\u100"
|
|
44
|
+
# Encoding::Ruby.encode_byte(0x10000)
|
|
45
|
+
# # => "\\u{10000}"
|
|
46
|
+
#
|
|
47
|
+
def self.encode_byte(byte)
|
|
48
|
+
if byte >= 0x00 && byte <= 0xff
|
|
49
|
+
"\\x%.2X" % byte
|
|
50
|
+
elsif byte >= 0x100 && byte <= 0xffff
|
|
51
|
+
"\\u%.4X" % byte
|
|
52
|
+
elsif byte >= 0x10000 && byte <= 0x10ffff
|
|
53
|
+
"\\u{%.X}" % byte
|
|
54
|
+
else
|
|
55
|
+
raise(RangeError,"#{byte.inspect} out of char range")
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
#
|
|
60
|
+
# Escapes a byte as a Ruby character.
|
|
61
|
+
#
|
|
62
|
+
# @param [Integer] byte
|
|
63
|
+
# The byte value to escape.
|
|
64
|
+
#
|
|
65
|
+
# @return [String]
|
|
66
|
+
# The escaped Ruby character.
|
|
67
|
+
#
|
|
68
|
+
# @raise [RangeError]
|
|
69
|
+
# The byte value isn't a valid ASCII or UTF byte.
|
|
70
|
+
#
|
|
71
|
+
def self.escape_byte(byte)
|
|
72
|
+
char = if byte >= 0x00 && byte <= 0xff
|
|
73
|
+
byte.chr
|
|
74
|
+
else
|
|
75
|
+
byte.chr(Encoding::UTF_8)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
return char.dump[1..-2]
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
#
|
|
82
|
+
# Encodes each byte of the given data as a Ruby escaped character.
|
|
83
|
+
#
|
|
84
|
+
# @param [String] data
|
|
85
|
+
# The given data to encode.
|
|
86
|
+
#
|
|
87
|
+
# @return [String]
|
|
88
|
+
# The encoded Ruby String.
|
|
89
|
+
#
|
|
90
|
+
# @example
|
|
91
|
+
# Encoding::Ruby.encode("hello")
|
|
92
|
+
# # => "\\x68\\x65\\x6c\\x6c\\x6f"
|
|
93
|
+
#
|
|
94
|
+
def self.encode(data)
|
|
95
|
+
encoded = String.new
|
|
96
|
+
|
|
97
|
+
if data.valid_encoding?
|
|
98
|
+
data.each_codepoint do |codepoint|
|
|
99
|
+
encoded << encode_byte(codepoint)
|
|
100
|
+
end
|
|
101
|
+
else
|
|
102
|
+
data.each_byte do |byte|
|
|
103
|
+
encoded << encode_byte(byte)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
return encoded
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
#
|
|
111
|
+
# Decodes the Ruby encoded data.
|
|
112
|
+
#
|
|
113
|
+
# @param [String] data
|
|
114
|
+
# The given Ruby data to decode.
|
|
115
|
+
#
|
|
116
|
+
# @return [String]
|
|
117
|
+
# The decoded data.
|
|
118
|
+
#
|
|
119
|
+
# @see unescape
|
|
120
|
+
#
|
|
121
|
+
def self.decode(data)
|
|
122
|
+
unescape(data)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
#
|
|
126
|
+
# Escapes the Ruby string.
|
|
127
|
+
#
|
|
128
|
+
# @param [String] data
|
|
129
|
+
# The data to escape.
|
|
130
|
+
#
|
|
131
|
+
# @return [String]
|
|
132
|
+
# The Ruby escaped String.
|
|
133
|
+
#
|
|
134
|
+
def self.escape(data)
|
|
135
|
+
data.dump[1..-2]
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Common escaped characters.
|
|
139
|
+
UNESCAPE_CHARS = Hash.new do |hash,char|
|
|
140
|
+
if char[0] == '\\' then char[1]
|
|
141
|
+
else char
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
UNESCAPE_CHARS['\0'] = "\0"
|
|
145
|
+
UNESCAPE_CHARS['\a'] = "\a"
|
|
146
|
+
UNESCAPE_CHARS['\b'] = "\b"
|
|
147
|
+
UNESCAPE_CHARS['\t'] = "\t"
|
|
148
|
+
UNESCAPE_CHARS['\n'] = "\n"
|
|
149
|
+
UNESCAPE_CHARS['\v'] = "\v"
|
|
150
|
+
UNESCAPE_CHARS['\f'] = "\f"
|
|
151
|
+
UNESCAPE_CHARS['\r'] = "\r"
|
|
152
|
+
|
|
153
|
+
#
|
|
154
|
+
# Unescapes the escaped String.
|
|
155
|
+
#
|
|
156
|
+
# @param [String] data
|
|
157
|
+
# The given Ruby escaped data.
|
|
158
|
+
#
|
|
159
|
+
# @return [String]
|
|
160
|
+
# The unescaped version of the hex escaped String.
|
|
161
|
+
#
|
|
162
|
+
# @example
|
|
163
|
+
# Encoding::Ruby.unescape("\\x68\\x65\\x6c\\x6c\\x6f")
|
|
164
|
+
# # => "hello"
|
|
165
|
+
#
|
|
166
|
+
def self.unescape(data)
|
|
167
|
+
unescaped = String.new
|
|
168
|
+
scanner = StringScanner.new(data)
|
|
169
|
+
|
|
170
|
+
until scanner.eos?
|
|
171
|
+
unescaped << if (unicode_escape = scanner.scan(/\\(?:[0-7]{1,3}|[0-7])/))
|
|
172
|
+
unicode_escape[1,3].to_i(8).chr
|
|
173
|
+
elsif (hex_escape = scanner.scan(/\\u[0-9a-fA-F]{4,8}/))
|
|
174
|
+
hex_escape[2..-1].to_i(16).chr(Encoding::UTF_8)
|
|
175
|
+
elsif (hex_escape = scanner.scan(/\\x[0-9a-fA-F]{1,2}/))
|
|
176
|
+
hex_escape[2..-1].to_i(16).chr
|
|
177
|
+
elsif (escape = scanner.scan(/\\./))
|
|
178
|
+
UNESCAPE_CHARS[escape]
|
|
179
|
+
else
|
|
180
|
+
scanner.getch
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
return unescaped
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
#
|
|
188
|
+
# Escapes and quotes the given data as a Ruby string.
|
|
189
|
+
#
|
|
190
|
+
# @param [String] data
|
|
191
|
+
# The given data to escape and quote.
|
|
192
|
+
#
|
|
193
|
+
# @return [String]
|
|
194
|
+
# The quoted Ruby string.
|
|
195
|
+
#
|
|
196
|
+
# @example
|
|
197
|
+
# Encoding::Ruby.quote("hello\nworld\n")
|
|
198
|
+
# # => "\"hello\\nworld\\n\""
|
|
199
|
+
#
|
|
200
|
+
def self.quote(data)
|
|
201
|
+
data.dump
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
#
|
|
205
|
+
# Removes the quotes an unescapes a quoted string.
|
|
206
|
+
#
|
|
207
|
+
# @param [String] data
|
|
208
|
+
# The given Ruby string.
|
|
209
|
+
#
|
|
210
|
+
# @return [String]
|
|
211
|
+
# The un-quoted String if the String begins and ends with quotes, or
|
|
212
|
+
# the same String if it is not quoted.
|
|
213
|
+
#
|
|
214
|
+
# @example
|
|
215
|
+
# Encoding::Ruby.unquote("\"hello\\nworld\"")
|
|
216
|
+
# # => "hello\nworld"
|
|
217
|
+
# Encoding::Ruby.unquote("'hello\\'world'")
|
|
218
|
+
# # => "hello'world"
|
|
219
|
+
#
|
|
220
|
+
def self.unquote(data)
|
|
221
|
+
if (data[0] == '"' && data[-1] == '"')
|
|
222
|
+
unescape(data[1..-2])
|
|
223
|
+
elsif (data[0] == "'" && data[-1] == "'")
|
|
224
|
+
data[1..-2].gsub(/\\(['\\])/,'\1')
|
|
225
|
+
else
|
|
226
|
+
data
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
require 'ronin/support/encoding/ruby/core_ext'
|
|
@@ -0,0 +1,89 @@
|
|
|
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/encoding/shell'
|
|
20
|
+
|
|
21
|
+
class Integer
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Encodes the Integer as a shell character.
|
|
25
|
+
#
|
|
26
|
+
# @return [String]
|
|
27
|
+
# The encoded shell character.
|
|
28
|
+
#
|
|
29
|
+
# @raise [RangeError]
|
|
30
|
+
# The integer value is negative.
|
|
31
|
+
#
|
|
32
|
+
# @example
|
|
33
|
+
# 0x41.shell_encode
|
|
34
|
+
# # => "\\x41"
|
|
35
|
+
# 0x0a.shell_encode
|
|
36
|
+
# # => "\\n"
|
|
37
|
+
#
|
|
38
|
+
# @example Encoding unicode characters:
|
|
39
|
+
# 1001.shell_encode
|
|
40
|
+
# # => "\\u1001"
|
|
41
|
+
#
|
|
42
|
+
# @see Ronin::Support::Encoding::Shell.encode_byte
|
|
43
|
+
#
|
|
44
|
+
# @since 1.0.0
|
|
45
|
+
#
|
|
46
|
+
# @api public
|
|
47
|
+
#
|
|
48
|
+
def shell_encode
|
|
49
|
+
Ronin::Support::Encoding::Shell.encode_byte(self)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
alias sh_encode shell_encode
|
|
53
|
+
alias bash_encode shell_encode
|
|
54
|
+
|
|
55
|
+
#
|
|
56
|
+
# Escapes the Integer as a shell character.
|
|
57
|
+
#
|
|
58
|
+
# @return [String]
|
|
59
|
+
# The escaped shell character.
|
|
60
|
+
#
|
|
61
|
+
# @raise [RangeError]
|
|
62
|
+
# The integer value is negative.
|
|
63
|
+
#
|
|
64
|
+
# @example
|
|
65
|
+
# 0x41.shell_escape
|
|
66
|
+
# # => "A"
|
|
67
|
+
# 0x08.shell_escape
|
|
68
|
+
# # => "\b"
|
|
69
|
+
# 0xff.shell_escape
|
|
70
|
+
# # => "\xff"
|
|
71
|
+
#
|
|
72
|
+
# @example Escaping unicode characters:
|
|
73
|
+
# 1001.shell_escape
|
|
74
|
+
# # => "\\u1001"
|
|
75
|
+
#
|
|
76
|
+
# @see Ronin::Support::Encoding::Shell.escape_byte
|
|
77
|
+
#
|
|
78
|
+
# @since 1.0.0
|
|
79
|
+
#
|
|
80
|
+
# @api public
|
|
81
|
+
#
|
|
82
|
+
def shell_escape
|
|
83
|
+
Ronin::Support::Encoding::Shell.escape_byte(self)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
alias sh_escape shell_escape
|
|
87
|
+
alias bash_escape shell_escape
|
|
88
|
+
|
|
89
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
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/encoding/shell'
|
|
20
|
+
|
|
21
|
+
require 'strscan'
|
|
22
|
+
|
|
23
|
+
class String
|
|
24
|
+
|
|
25
|
+
#
|
|
26
|
+
# Shell escapes the characters in the String.
|
|
27
|
+
#
|
|
28
|
+
# @return [String]
|
|
29
|
+
# The shell escaped string.
|
|
30
|
+
#
|
|
31
|
+
# @example
|
|
32
|
+
# "hello\nworld".shell_escape
|
|
33
|
+
# # => "hello\\nworld"
|
|
34
|
+
#
|
|
35
|
+
# @see Ronin::Support::Encoding::Shell.escape
|
|
36
|
+
#
|
|
37
|
+
# @api public
|
|
38
|
+
#
|
|
39
|
+
# @since 1.0.0
|
|
40
|
+
#
|
|
41
|
+
def shell_escape
|
|
42
|
+
Ronin::Support::Encoding::Shell.escape(self)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# Shell unescapes the characters in the String.
|
|
47
|
+
#
|
|
48
|
+
# @return [String]
|
|
49
|
+
# The shell unescaped string.
|
|
50
|
+
#
|
|
51
|
+
# @example
|
|
52
|
+
# "hello\\nworld".shell_unescape
|
|
53
|
+
# # => "hello\nworld"
|
|
54
|
+
#
|
|
55
|
+
# @see Ronin::Support::Encoding::Shell.unescape
|
|
56
|
+
#
|
|
57
|
+
# @api public
|
|
58
|
+
#
|
|
59
|
+
# @since 1.0.0
|
|
60
|
+
#
|
|
61
|
+
def shell_unescape
|
|
62
|
+
Ronin::Support::Encoding::Shell.unescape(self)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#
|
|
66
|
+
# Shell encodes every character in the String.
|
|
67
|
+
#
|
|
68
|
+
# @return [String]
|
|
69
|
+
# The shell encoded String.
|
|
70
|
+
#
|
|
71
|
+
# @example
|
|
72
|
+
# "hello world".shell_encode
|
|
73
|
+
# # => "\\x68\\x65\\x6c\\x6c\\x6f\\x0a\\x77\\x6f\\x72\\x6c\\x64"
|
|
74
|
+
#
|
|
75
|
+
# @see Ronin::Support::Encoding::Shell.encode
|
|
76
|
+
#
|
|
77
|
+
# @api public
|
|
78
|
+
#
|
|
79
|
+
# @since 1.0.0
|
|
80
|
+
#
|
|
81
|
+
def shell_encode
|
|
82
|
+
Ronin::Support::Encoding::Shell.encode(self)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
alias shell_decode shell_unescape
|
|
86
|
+
|
|
87
|
+
#
|
|
88
|
+
# Converts the String into a double-quoted shell escaped String.
|
|
89
|
+
#
|
|
90
|
+
# @return [String]
|
|
91
|
+
# The quoted and escaped shell string.
|
|
92
|
+
#
|
|
93
|
+
# @example
|
|
94
|
+
# "hello world".shell_string
|
|
95
|
+
# # => "\"hello world\""
|
|
96
|
+
# "hello\nworld".shell_string
|
|
97
|
+
# # => "$'hello\\nworld'"
|
|
98
|
+
#
|
|
99
|
+
# @see Ronin::Support::Encoding::Shell.quote
|
|
100
|
+
#
|
|
101
|
+
# @api public
|
|
102
|
+
#
|
|
103
|
+
# @since 1.0.0
|
|
104
|
+
#
|
|
105
|
+
def shell_string
|
|
106
|
+
Ronin::Support::Encoding::Shell.quote(self)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
#
|
|
110
|
+
# Removes the quotes an unescapes a shell string.
|
|
111
|
+
#
|
|
112
|
+
# @return [String]
|
|
113
|
+
# The un-quoted String if the String begins and ends with quotes, or the
|
|
114
|
+
# same String if it is not quoted.
|
|
115
|
+
#
|
|
116
|
+
# @example
|
|
117
|
+
# "\"hello \\\"world\\\"\"".shell_unquote
|
|
118
|
+
# # => "hello \"world\""
|
|
119
|
+
# "'hello\\'world'".shell_unquote
|
|
120
|
+
# # => "hello'world"
|
|
121
|
+
# "$'hello\\nworld'".shell_unquote
|
|
122
|
+
# # => "hello\nworld"
|
|
123
|
+
#
|
|
124
|
+
# @see Ronin::Support::Encoding::Shell.unquote
|
|
125
|
+
#
|
|
126
|
+
# @since 1.0.0
|
|
127
|
+
#
|
|
128
|
+
# @api public
|
|
129
|
+
#
|
|
130
|
+
def shell_unquote
|
|
131
|
+
Ronin::Support::Encoding::Shell.unquote(self)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
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/encoding/shell/core_ext/integer'
|
|
20
|
+
require 'ronin/support/encoding/shell/core_ext/string'
|