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,133 @@
|
|
|
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/hex'
|
|
20
|
+
|
|
21
|
+
class String
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Hex-encodes characters in the String.
|
|
25
|
+
#
|
|
26
|
+
# @return [String]
|
|
27
|
+
# The hex encoded version of the String.
|
|
28
|
+
#
|
|
29
|
+
# @example
|
|
30
|
+
# "hello".hex_encode
|
|
31
|
+
# # => "68656C6C6F"
|
|
32
|
+
#
|
|
33
|
+
# @see Ronin::Support::Encoding::Hex.encodde
|
|
34
|
+
#
|
|
35
|
+
# @since 0.6.0
|
|
36
|
+
#
|
|
37
|
+
def hex_encode
|
|
38
|
+
Ronin::Support::Encoding::Hex.encode(self)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
#
|
|
42
|
+
# Hex-decodes the String.
|
|
43
|
+
#
|
|
44
|
+
# @return [String]
|
|
45
|
+
# The hex decoded version of the String.
|
|
46
|
+
#
|
|
47
|
+
# @example
|
|
48
|
+
# "68656C6C6F".hex_decode
|
|
49
|
+
# # => "hello"
|
|
50
|
+
#
|
|
51
|
+
# @see Ronin::Support::Encoding::Hex.decodde
|
|
52
|
+
#
|
|
53
|
+
def hex_decode
|
|
54
|
+
Ronin::Support::Encoding::Hex.decode(self)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
#
|
|
58
|
+
# Hex-escapes the characters within the String.
|
|
59
|
+
#
|
|
60
|
+
# @return [String]
|
|
61
|
+
# The hex escaped version of the String.
|
|
62
|
+
#
|
|
63
|
+
# @example
|
|
64
|
+
# "hello\nworld".hex_escape
|
|
65
|
+
# # => "hello\\nworld"
|
|
66
|
+
#
|
|
67
|
+
# @see Ronin::Support::Encoding::Hex.escape
|
|
68
|
+
#
|
|
69
|
+
# @api public
|
|
70
|
+
#
|
|
71
|
+
def hex_escape
|
|
72
|
+
Ronin::Support::Encoding::Hex.escape(self)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
#
|
|
76
|
+
# Unescapes the characters within the String.
|
|
77
|
+
#
|
|
78
|
+
# @return [String]
|
|
79
|
+
# The hex unescaped version of the String.
|
|
80
|
+
#
|
|
81
|
+
# @example
|
|
82
|
+
# "hello\\nworld".hex_escape
|
|
83
|
+
# # => "hello\nworld"
|
|
84
|
+
#
|
|
85
|
+
# @see Ronin::Support::Encoding::Hex.unescape
|
|
86
|
+
#
|
|
87
|
+
# @api public
|
|
88
|
+
#
|
|
89
|
+
def hex_unescape
|
|
90
|
+
Ronin::Support::Encoding::Hex.unescape(self)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#
|
|
94
|
+
# Converts the String into a double-quoted hex string.
|
|
95
|
+
#
|
|
96
|
+
# @return [String]
|
|
97
|
+
#
|
|
98
|
+
# @example
|
|
99
|
+
# "hello\nworld".hex_string
|
|
100
|
+
# # => "\"hello\\nworld\""
|
|
101
|
+
#
|
|
102
|
+
# @see Ronin::Support::Encoding::Hex.quote
|
|
103
|
+
#
|
|
104
|
+
# @since 1.0.0
|
|
105
|
+
#
|
|
106
|
+
# @api public
|
|
107
|
+
#
|
|
108
|
+
def hex_string
|
|
109
|
+
Ronin::Support::Encoding::Hex.quote(self)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
#
|
|
113
|
+
# Removes the quotes and unescapes a hex string.
|
|
114
|
+
#
|
|
115
|
+
# @return [String]
|
|
116
|
+
# The un-quoted String if the String begins and ends with quotes, or the
|
|
117
|
+
# same String if it is not quoted.
|
|
118
|
+
#
|
|
119
|
+
# @example
|
|
120
|
+
# "\"hello\\nworld\"".hex_unquote
|
|
121
|
+
# # => "hello\nworld"
|
|
122
|
+
#
|
|
123
|
+
# @see Ronin::Support::Encoding::Hex.unquote
|
|
124
|
+
#
|
|
125
|
+
# @since 1.0.0
|
|
126
|
+
#
|
|
127
|
+
# @api public
|
|
128
|
+
#
|
|
129
|
+
def hex_unquote
|
|
130
|
+
Ronin::Support::Encoding::Hex.unquote(self)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
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/hex/core_ext/integer'
|
|
20
|
+
require 'ronin/support/encoding/hex/core_ext/string'
|
|
21
|
+
|
|
22
|
+
require 'hexdump/core_ext'
|
|
@@ -0,0 +1,248 @@
|
|
|
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 hex encoding/decoding and escaping/unescaping data.
|
|
26
|
+
#
|
|
27
|
+
module Hex
|
|
28
|
+
#
|
|
29
|
+
# Hex encodes the given byte.
|
|
30
|
+
#
|
|
31
|
+
# @param [Integer] byte
|
|
32
|
+
# The byte to hex encode.
|
|
33
|
+
#
|
|
34
|
+
# @return [String]
|
|
35
|
+
# The hex encoded version of the byte.
|
|
36
|
+
#
|
|
37
|
+
# @example
|
|
38
|
+
# Encoding::Hex.encode_byte(0x41)
|
|
39
|
+
# # => "41"
|
|
40
|
+
#
|
|
41
|
+
def self.encode_byte(byte)
|
|
42
|
+
"%.2x" % byte
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# Hex escapes the given byte.
|
|
47
|
+
#
|
|
48
|
+
# @param [Integer] byte
|
|
49
|
+
# The byte value to hex escape.
|
|
50
|
+
#
|
|
51
|
+
# @return [String]
|
|
52
|
+
# The hex escaped version of the Integer.
|
|
53
|
+
#
|
|
54
|
+
# @raise [RangeError]
|
|
55
|
+
# The byte value is negative.
|
|
56
|
+
#
|
|
57
|
+
# @example
|
|
58
|
+
# Encoding::Hex.escape_byte(42)
|
|
59
|
+
# # => "\\x2a"
|
|
60
|
+
#
|
|
61
|
+
def self.escape_byte(byte)
|
|
62
|
+
if byte >= 0x00 && byte <= 0xff
|
|
63
|
+
if byte == 0x22
|
|
64
|
+
"\\\""
|
|
65
|
+
elsif byte == 0x5d
|
|
66
|
+
"\\\\"
|
|
67
|
+
elsif byte >= 0x20 && byte <= 0x7e
|
|
68
|
+
byte.chr
|
|
69
|
+
else
|
|
70
|
+
"\\x%.2x" % byte
|
|
71
|
+
end
|
|
72
|
+
elsif byte > 0xff
|
|
73
|
+
"\\x%x" % byte
|
|
74
|
+
else
|
|
75
|
+
raise(RangeError,"#{byte.inspect} out of char range")
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
#
|
|
80
|
+
# Hex encodes the given data.
|
|
81
|
+
#
|
|
82
|
+
# @param [String] data
|
|
83
|
+
# The given data to hex encode.
|
|
84
|
+
#
|
|
85
|
+
# @return [String]
|
|
86
|
+
# The hex encoded version of the String.
|
|
87
|
+
#
|
|
88
|
+
# @example
|
|
89
|
+
# Encoding::Hex.encode("hello")
|
|
90
|
+
# # => "68656C6C6F"
|
|
91
|
+
#
|
|
92
|
+
def self.encode(data)
|
|
93
|
+
encoded = String.new
|
|
94
|
+
|
|
95
|
+
data.each_byte do |byte|
|
|
96
|
+
encoded << encode_byte(byte)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
return encoded
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
#
|
|
103
|
+
# Hex decodes the String.
|
|
104
|
+
#
|
|
105
|
+
# @param [String] data
|
|
106
|
+
# The given data to hex decode.
|
|
107
|
+
#
|
|
108
|
+
# @return [String]
|
|
109
|
+
# The hex decoded version of the String.
|
|
110
|
+
#
|
|
111
|
+
# @example
|
|
112
|
+
# Encoding::Hex.decode("68656C6C6F")
|
|
113
|
+
# # => "hello"
|
|
114
|
+
#
|
|
115
|
+
def self.decode(data)
|
|
116
|
+
decoded = String.new
|
|
117
|
+
|
|
118
|
+
data.scan(/../) do |hex|
|
|
119
|
+
decoded << hex.to_i(16).chr
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
return decoded
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
#
|
|
126
|
+
# Hex-escapes the given data.
|
|
127
|
+
#
|
|
128
|
+
# @param [String] data
|
|
129
|
+
# The given data to hex escape.
|
|
130
|
+
#
|
|
131
|
+
# @return [String]
|
|
132
|
+
# The hex escaped version of the String.
|
|
133
|
+
#
|
|
134
|
+
# @example
|
|
135
|
+
# Encoding::Hex.escape("hello")
|
|
136
|
+
# # => "\\x68\\x65\\x6c\\x6c\\x6f"
|
|
137
|
+
#
|
|
138
|
+
def self.escape(data)
|
|
139
|
+
escaped = String.new
|
|
140
|
+
|
|
141
|
+
if data.valid_encoding?
|
|
142
|
+
data.each_codepoint do |codepoint|
|
|
143
|
+
escaped << escape_byte(codepoint)
|
|
144
|
+
end
|
|
145
|
+
else
|
|
146
|
+
data.each_byte do |byte|
|
|
147
|
+
escaped << escape_byte(byte)
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
return escaped
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# Backslash escaped characters.
|
|
155
|
+
BACKSLASHED_CHARS = {
|
|
156
|
+
"\\" => '\\',
|
|
157
|
+
'"' => '"',
|
|
158
|
+
'0' => "\0",
|
|
159
|
+
'a' => "\a",
|
|
160
|
+
'b' => "\b",
|
|
161
|
+
't' => "\t",
|
|
162
|
+
'n' => "\n",
|
|
163
|
+
'v' => "\v",
|
|
164
|
+
'f' => "\f",
|
|
165
|
+
'r' => "\r"
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
#
|
|
169
|
+
# Removes the quotes an unescapes a quoted hex string.
|
|
170
|
+
#
|
|
171
|
+
# @param [String] data
|
|
172
|
+
# The quoted and hex escaped hex string.
|
|
173
|
+
#
|
|
174
|
+
# @return [String]
|
|
175
|
+
# The un-quoted String if the String begins and ends with quotes, or
|
|
176
|
+
# the same String if it is not quoted.
|
|
177
|
+
#
|
|
178
|
+
# @example
|
|
179
|
+
# Encoding::Hex.unescape("\"hello\\nworld\"")
|
|
180
|
+
# # => "hello\nworld"
|
|
181
|
+
#
|
|
182
|
+
def self.unescape(data)
|
|
183
|
+
buffer = String.new
|
|
184
|
+
scanner = StringScanner.new(data)
|
|
185
|
+
|
|
186
|
+
until scanner.eos?
|
|
187
|
+
buffer << case (char = scanner.getch)
|
|
188
|
+
when '\\'
|
|
189
|
+
if (hex_escape = scanner.scan(/x[0-9a-fA-F]{4,8}/))
|
|
190
|
+
hex_escape[1..].to_i(16).chr(Encoding::UTF_8)
|
|
191
|
+
elsif (hex_escape = scanner.scan(/x[0-9a-fA-F]{1,2}/))
|
|
192
|
+
hex_escape[1..].to_i(16).chr
|
|
193
|
+
elsif (char = scanner.getch)
|
|
194
|
+
BACKSLASHED_CHARS.fetch(char,char)
|
|
195
|
+
end
|
|
196
|
+
else
|
|
197
|
+
char
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
return buffer
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
#
|
|
205
|
+
# Converts the given data into a double-quoted hex string.
|
|
206
|
+
#
|
|
207
|
+
# @param [String] data
|
|
208
|
+
# The given data to hex-escape and double-quote.
|
|
209
|
+
#
|
|
210
|
+
# @return [String]
|
|
211
|
+
# The double-quoted and hex escaped string.
|
|
212
|
+
#
|
|
213
|
+
# @example
|
|
214
|
+
# Encoding::Hex.quote("hello\nworld")
|
|
215
|
+
# # => "\"hello\\nworld\""
|
|
216
|
+
#
|
|
217
|
+
def self.quote(data)
|
|
218
|
+
"\"#{escape(data)}\""
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
#
|
|
222
|
+
# Removes the quotes and unescapes a hex string.
|
|
223
|
+
#
|
|
224
|
+
# @param [String] data
|
|
225
|
+
# The quoted hex String to unescape and unquote.
|
|
226
|
+
#
|
|
227
|
+
# @return [String]
|
|
228
|
+
# The un-quoted String if the String begins and ends with quotes, or
|
|
229
|
+
# the same String if it is not quoted.
|
|
230
|
+
#
|
|
231
|
+
# @example
|
|
232
|
+
# Encoding::Hex.unquote("\"hello\\nworld\"")
|
|
233
|
+
# # => "hello\nworld"
|
|
234
|
+
#
|
|
235
|
+
def self.unquote(data)
|
|
236
|
+
if ((data[0] == '"' && data[-1] == '"') ||
|
|
237
|
+
(data[0] == "'" && data[-1] == "'"))
|
|
238
|
+
unescape(data[1..-2])
|
|
239
|
+
else
|
|
240
|
+
data
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
require 'ronin/support/encoding/hex/core_ext'
|
|
@@ -0,0 +1,106 @@
|
|
|
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/html'
|
|
20
|
+
|
|
21
|
+
class Integer
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Escapes the Integer as an HTML String.
|
|
25
|
+
#
|
|
26
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
27
|
+
# Additional keyword arguments.
|
|
28
|
+
#
|
|
29
|
+
# @option kwargs [:lower, :upper, nil] :case
|
|
30
|
+
# Controls whether to output lowercase or uppercase XML special
|
|
31
|
+
# characters. Defaults to lowercase hexadecimal.
|
|
32
|
+
#
|
|
33
|
+
# @return [String]
|
|
34
|
+
# The escaped HTML String.
|
|
35
|
+
#
|
|
36
|
+
# @raise [ArgumentError]
|
|
37
|
+
# The `case:` keyword argument is invalid.
|
|
38
|
+
#
|
|
39
|
+
# @example
|
|
40
|
+
# 0x26.html_escape
|
|
41
|
+
# # => "&"
|
|
42
|
+
#
|
|
43
|
+
# @example Uppercase encoding:
|
|
44
|
+
# 0x26.html_escape(case: :upper)
|
|
45
|
+
# # => "&"
|
|
46
|
+
#
|
|
47
|
+
# @since 0.2.0
|
|
48
|
+
#
|
|
49
|
+
# @see Ronin::Support::Encoding::HTML.escape_byte
|
|
50
|
+
#
|
|
51
|
+
# @api public
|
|
52
|
+
#
|
|
53
|
+
def html_escape(**kwargs)
|
|
54
|
+
Ronin::Support::Encoding::HTML.escape_byte(self,**kwargs)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
#
|
|
58
|
+
# Encodes the Integer as a HTML String.
|
|
59
|
+
#
|
|
60
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
61
|
+
# Additional keyword arguments.
|
|
62
|
+
#
|
|
63
|
+
# @option kwargs [:decimal, :hex] :format (:decimal)
|
|
64
|
+
# The numeric format for the escaped characters.
|
|
65
|
+
#
|
|
66
|
+
# @option kwargs [Boolean] :zero_pad
|
|
67
|
+
# Controls whether the escaped characters will be left-padded with
|
|
68
|
+
# up to seven `0` characters.
|
|
69
|
+
#
|
|
70
|
+
# @option kwargs [:lower, :upper, nil] :case
|
|
71
|
+
# Controls whether to output lowercase or uppercase XML special
|
|
72
|
+
# characters. Defaults to lowercase hexadecimal.
|
|
73
|
+
#
|
|
74
|
+
# @return [String]
|
|
75
|
+
# The encoded HTML String.
|
|
76
|
+
#
|
|
77
|
+
# @raise [ArgumentError]
|
|
78
|
+
# The `format:` or `case:` keyword argument is invalid.
|
|
79
|
+
#
|
|
80
|
+
# @example
|
|
81
|
+
# 0x41.html_enocde
|
|
82
|
+
# # => "A"
|
|
83
|
+
#
|
|
84
|
+
# @example Zero-padding:
|
|
85
|
+
# 0x41.html_encode(zero_pad: true)
|
|
86
|
+
# # => "A"
|
|
87
|
+
#
|
|
88
|
+
# @example Hexadecimal escaped characters:
|
|
89
|
+
# 0x41.html_encode(format: :hex)
|
|
90
|
+
# # => "A"
|
|
91
|
+
#
|
|
92
|
+
# @example Uppercase hexadecimal escaped characters:
|
|
93
|
+
# 0xff.html_encode(format: :hex, case: :upper)
|
|
94
|
+
# # => "ÿ"
|
|
95
|
+
#
|
|
96
|
+
# @since 0.2.0
|
|
97
|
+
#
|
|
98
|
+
# @see Ronin::Support::Encoding::HTML.encode_byte
|
|
99
|
+
#
|
|
100
|
+
# @api public
|
|
101
|
+
#
|
|
102
|
+
def html_encode(**kwargs)
|
|
103
|
+
Ronin::Support::Encoding::HTML.encode_byte(self,**kwargs)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
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/html'
|
|
20
|
+
|
|
21
|
+
class String
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# HTML escapes the String.
|
|
25
|
+
#
|
|
26
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
27
|
+
# Additional keyword arguments.
|
|
28
|
+
#
|
|
29
|
+
# @option kwargs [:lower, :upper, nil] :case
|
|
30
|
+
# Controls whether to output lowercase or uppercase XML special
|
|
31
|
+
# characters. Defaults to lowercase hexadecimal.
|
|
32
|
+
#
|
|
33
|
+
# @return [String]
|
|
34
|
+
# The HTML escaped String.
|
|
35
|
+
#
|
|
36
|
+
# @raise [ArgumentError]
|
|
37
|
+
# The `case:` keyword argument is invalid.
|
|
38
|
+
#
|
|
39
|
+
# @example
|
|
40
|
+
# "one & two".html_escape
|
|
41
|
+
# # => "one & two"
|
|
42
|
+
#
|
|
43
|
+
# @example Uppercase escaped characters:
|
|
44
|
+
# "one & two".html_escape(case: :upper)
|
|
45
|
+
# # => "one & two"
|
|
46
|
+
#
|
|
47
|
+
# @see https://rubydoc.info/stdlib/cgi/1.9.2/CGI.escapeHTML
|
|
48
|
+
# @see Ronin::Support::Encoding::HTML.escape
|
|
49
|
+
#
|
|
50
|
+
# @since 0.2.0
|
|
51
|
+
#
|
|
52
|
+
# @api public
|
|
53
|
+
#
|
|
54
|
+
def html_escape(**kwargs)
|
|
55
|
+
Ronin::Support::Encoding::HTML.escape(self,**kwargs)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
#
|
|
59
|
+
# Unescapes the HTML encoded String.
|
|
60
|
+
#
|
|
61
|
+
# @return [String]
|
|
62
|
+
# The unescaped String.
|
|
63
|
+
#
|
|
64
|
+
# @example
|
|
65
|
+
# "<p>one <span>two</span></p>".html_unescape
|
|
66
|
+
# # => "<p>one <span>two</span></p>"
|
|
67
|
+
#
|
|
68
|
+
# @see https://rubydoc.info/stdlib/cgi/1.9.2/CGI.unescapeHTML
|
|
69
|
+
# @see Ronin::Support::Encoding::HTML.unescape
|
|
70
|
+
#
|
|
71
|
+
# @since 0.2.0
|
|
72
|
+
#
|
|
73
|
+
# @api public
|
|
74
|
+
#
|
|
75
|
+
def html_unescape
|
|
76
|
+
Ronin::Support::Encoding::HTML.unescape(self)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
#
|
|
80
|
+
# Encodes the chars in the String for HTML.
|
|
81
|
+
#
|
|
82
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
83
|
+
# Additional keyword arguments.
|
|
84
|
+
#
|
|
85
|
+
# @option kwargs [:decimal, :hex] :format (:decimal)
|
|
86
|
+
# The numeric format for the escaped characters.
|
|
87
|
+
#
|
|
88
|
+
# @option kwargs [Boolean] :zero_pad
|
|
89
|
+
# Controls whether the escaped characters will be left-padded with
|
|
90
|
+
# up to seven `0` characters.
|
|
91
|
+
#
|
|
92
|
+
# @option kwargs [:lower, :upper, nil] :case
|
|
93
|
+
# Controls whether to output lowercase or uppercase XML special
|
|
94
|
+
# characters. Defaults to lowercase hexadecimal.
|
|
95
|
+
#
|
|
96
|
+
# @return [String]
|
|
97
|
+
# The encoded HTML String.
|
|
98
|
+
#
|
|
99
|
+
# @raise [ArgumentError]
|
|
100
|
+
# The `format:` or `case:` keyword argument is invalid.
|
|
101
|
+
#
|
|
102
|
+
# @example
|
|
103
|
+
# "abc".html_encode
|
|
104
|
+
# # => "abc"
|
|
105
|
+
#
|
|
106
|
+
# @example Zero-padding:
|
|
107
|
+
# "abc".html_encode(zero_pad: true)
|
|
108
|
+
# # => "abc"
|
|
109
|
+
#
|
|
110
|
+
# @example Hexadecimal encoded characters:
|
|
111
|
+
# "abc".html_encode(format: :hex)
|
|
112
|
+
# # => "abc"
|
|
113
|
+
#
|
|
114
|
+
# @example Uppercase hexadecimal encoded characters:
|
|
115
|
+
# "abc\xff".html_encode(format: :hex, case: :upper)
|
|
116
|
+
# # => "abcÿ"
|
|
117
|
+
#
|
|
118
|
+
# @see Ronin::Support::Encoding::HTML.encode
|
|
119
|
+
#
|
|
120
|
+
# @since 0.2.0
|
|
121
|
+
#
|
|
122
|
+
# @api public
|
|
123
|
+
#
|
|
124
|
+
def html_encode(**kwargs)
|
|
125
|
+
Ronin::Support::Encoding::HTML.encode(self,**kwargs)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
alias html_decode html_unescape
|
|
129
|
+
|
|
130
|
+
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/html/core_ext/integer'
|
|
20
|
+
require 'ronin/support/encoding/html/core_ext/string'
|