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,125 @@
|
|
|
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/c'
|
|
20
|
+
|
|
21
|
+
class String
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Escapes a String for C.
|
|
25
|
+
#
|
|
26
|
+
# @return [String]
|
|
27
|
+
# The C escaped String.
|
|
28
|
+
#
|
|
29
|
+
# @example
|
|
30
|
+
# "hello\nworld\n".c_escape
|
|
31
|
+
# # => "hello\\nworld\\n"
|
|
32
|
+
#
|
|
33
|
+
# @see Ronin::Support::Encoding::C.escape
|
|
34
|
+
#
|
|
35
|
+
# @since 1.0.0
|
|
36
|
+
#
|
|
37
|
+
# @api public
|
|
38
|
+
#
|
|
39
|
+
def c_escape
|
|
40
|
+
Ronin::Support::Encoding::C.escape(self)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
#
|
|
44
|
+
# Unescapes a C escaped String.
|
|
45
|
+
#
|
|
46
|
+
# @return [String]
|
|
47
|
+
# The unescaped C String.
|
|
48
|
+
#
|
|
49
|
+
# @example
|
|
50
|
+
# "\x68\x65\x6c\x6c\x6f\x20\x77\x6f\x72\x6c\x64".c_unescape
|
|
51
|
+
# # => "hello world"
|
|
52
|
+
#
|
|
53
|
+
# @see Ronin::Support::Encoding::C.unescape
|
|
54
|
+
#
|
|
55
|
+
# @since 1.0.0
|
|
56
|
+
#
|
|
57
|
+
# @api public
|
|
58
|
+
#
|
|
59
|
+
def c_unescape
|
|
60
|
+
Ronin::Support::Encoding::C.unescape(self)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
#
|
|
64
|
+
# C escapes every character in the String.
|
|
65
|
+
#
|
|
66
|
+
# @return [String]
|
|
67
|
+
# The C escaped String.
|
|
68
|
+
#
|
|
69
|
+
# @example
|
|
70
|
+
# "hello".c_encode
|
|
71
|
+
# # => "\\x68\\x65\\x6c\\x6c\\x6f"
|
|
72
|
+
#
|
|
73
|
+
# @see Ronin::Support::Encoding::C.encode
|
|
74
|
+
#
|
|
75
|
+
# @api public
|
|
76
|
+
#
|
|
77
|
+
# @since 1.0.0
|
|
78
|
+
#
|
|
79
|
+
def c_encode
|
|
80
|
+
Ronin::Support::Encoding::C.encode(self)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
alias c_decode c_unescape
|
|
84
|
+
|
|
85
|
+
#
|
|
86
|
+
# Converts the String into a C string.
|
|
87
|
+
#
|
|
88
|
+
# @return [String]
|
|
89
|
+
#
|
|
90
|
+
# @example
|
|
91
|
+
# "hello\nworld\n".c_string
|
|
92
|
+
# # => "\"hello\\nworld\\n\""
|
|
93
|
+
#
|
|
94
|
+
# @see Ronin::Support::Encoding::C.quote
|
|
95
|
+
#
|
|
96
|
+
# @since 1.0.0
|
|
97
|
+
#
|
|
98
|
+
# @api public
|
|
99
|
+
#
|
|
100
|
+
def c_string
|
|
101
|
+
Ronin::Support::Encoding::C.quote(self)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
#
|
|
105
|
+
# Removes the quotes an unescapes a C string.
|
|
106
|
+
#
|
|
107
|
+
# @return [String]
|
|
108
|
+
# The un-quoted String if the String begins and ends with quotes, or the
|
|
109
|
+
# same String if it is not quoted.
|
|
110
|
+
#
|
|
111
|
+
# @example
|
|
112
|
+
# "\"hello\\nworld\"".c_unquote
|
|
113
|
+
# # => "hello\nworld"
|
|
114
|
+
#
|
|
115
|
+
# @see Ronin::Support::Encoding::C.unquote
|
|
116
|
+
#
|
|
117
|
+
# @since 1.0.0
|
|
118
|
+
#
|
|
119
|
+
# @api public
|
|
120
|
+
#
|
|
121
|
+
def c_unquote
|
|
122
|
+
Ronin::Support::Encoding::C.unquote(self)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
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/c/core_ext/integer'
|
|
20
|
+
require 'ronin/support/encoding/c/core_ext/string'
|
|
@@ -0,0 +1,277 @@
|
|
|
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 C data.
|
|
26
|
+
#
|
|
27
|
+
# @api public
|
|
28
|
+
#
|
|
29
|
+
module C
|
|
30
|
+
#
|
|
31
|
+
# Encodes a byte as a C escaped String.
|
|
32
|
+
#
|
|
33
|
+
# @param [Integer] byte
|
|
34
|
+
# The byte value to encode.
|
|
35
|
+
#
|
|
36
|
+
# @return [String]
|
|
37
|
+
# The escaped C character.
|
|
38
|
+
#
|
|
39
|
+
# @example
|
|
40
|
+
# Encoding::C.encode_byte(0x41)
|
|
41
|
+
# # => "\\x41"
|
|
42
|
+
# Encoding::C.encode_byte(0x100)
|
|
43
|
+
# # => "\\u1000"
|
|
44
|
+
# Encoding::C.encode_byte(0x10000)
|
|
45
|
+
# # => "\\U000100000"
|
|
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
|
|
53
|
+
"\\U%.8x" % byte
|
|
54
|
+
else
|
|
55
|
+
raise(RangeError,"#{byte.inspect} out of char range")
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Special C bytes and their escaped Strings.
|
|
60
|
+
ESCAPE_BYTES = {
|
|
61
|
+
0x00 => '\0',
|
|
62
|
+
0x07 => '\a',
|
|
63
|
+
0x08 => '\b',
|
|
64
|
+
0x09 => '\t',
|
|
65
|
+
0x0a => '\n',
|
|
66
|
+
0x0b => '\v',
|
|
67
|
+
0x0c => '\f',
|
|
68
|
+
0x0d => '\r',
|
|
69
|
+
0x22 => '\"',
|
|
70
|
+
0x1B => '\e',
|
|
71
|
+
0x5c => '\\\\'
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
#
|
|
75
|
+
# Escapes a byte as a C character.
|
|
76
|
+
#
|
|
77
|
+
# @param [Integer] byte
|
|
78
|
+
# The byte value to escape.
|
|
79
|
+
#
|
|
80
|
+
# @return [String]
|
|
81
|
+
# The escaped C character.
|
|
82
|
+
#
|
|
83
|
+
# @raise [RangeError]
|
|
84
|
+
# The integer value is negative.
|
|
85
|
+
#
|
|
86
|
+
# @example
|
|
87
|
+
# Encoding::C.escape_byte(0x41)
|
|
88
|
+
# # => "A"
|
|
89
|
+
# Encoding::C.escape_byte(0x22)
|
|
90
|
+
# # => "\\\""
|
|
91
|
+
# Encoding::C.escape_byte(0x7f)
|
|
92
|
+
# # => "\\x7F"
|
|
93
|
+
#
|
|
94
|
+
# @example Escaping unicode characters:
|
|
95
|
+
# Encoding::C.escape_byte(0xffff)
|
|
96
|
+
# # => "\\uFFFF"
|
|
97
|
+
# Encoding::C.escape_byte(0x10000)
|
|
98
|
+
# # => "\\U000100000"
|
|
99
|
+
#
|
|
100
|
+
def self.escape_byte(byte)
|
|
101
|
+
if byte >= 0x00 && byte <= 0xff
|
|
102
|
+
ESCAPE_BYTES.fetch(byte) do
|
|
103
|
+
if byte >= 0x20 && byte <= 0x7e
|
|
104
|
+
byte.chr
|
|
105
|
+
else
|
|
106
|
+
encode_byte(byte)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
else
|
|
110
|
+
encode_byte(byte)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
#
|
|
115
|
+
# Encodes each character of the given data as C escaped characters.
|
|
116
|
+
#
|
|
117
|
+
# @param [String] data
|
|
118
|
+
# The given data to encode.
|
|
119
|
+
#
|
|
120
|
+
# @return [String]
|
|
121
|
+
# The C encoded String.
|
|
122
|
+
#
|
|
123
|
+
# @example
|
|
124
|
+
# Encoding::C.encode("hello")
|
|
125
|
+
# # => "\\x68\\x65\\x6c\\x6c\\x6f"
|
|
126
|
+
#
|
|
127
|
+
def self.encode(data)
|
|
128
|
+
encoded = String.new
|
|
129
|
+
|
|
130
|
+
if data.valid_encoding?
|
|
131
|
+
data.each_codepoint do |codepoint|
|
|
132
|
+
encoded << encode_byte(codepoint)
|
|
133
|
+
end
|
|
134
|
+
else
|
|
135
|
+
data.each_byte do |byte|
|
|
136
|
+
encoded << encode_byte(byte)
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
return encoded
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
#
|
|
144
|
+
# Decodes the C encoded data.
|
|
145
|
+
#
|
|
146
|
+
# @param [String] data
|
|
147
|
+
# The given C data to decode.
|
|
148
|
+
#
|
|
149
|
+
# @return [String]
|
|
150
|
+
# The decoded data.
|
|
151
|
+
#
|
|
152
|
+
# @see unescape
|
|
153
|
+
#
|
|
154
|
+
def self.decode(data)
|
|
155
|
+
unescape(data)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
#
|
|
159
|
+
# Escapes the C encoded data.
|
|
160
|
+
#
|
|
161
|
+
# @param [String] data
|
|
162
|
+
# The data to C escape.
|
|
163
|
+
#
|
|
164
|
+
# @return [String]
|
|
165
|
+
# The C escaped String.
|
|
166
|
+
#
|
|
167
|
+
def self.escape(data)
|
|
168
|
+
escaped = String.new
|
|
169
|
+
|
|
170
|
+
if data.valid_encoding?
|
|
171
|
+
data.each_codepoint do |codepoint|
|
|
172
|
+
escaped << escape_byte(codepoint)
|
|
173
|
+
end
|
|
174
|
+
else
|
|
175
|
+
data.each_byte do |byte|
|
|
176
|
+
escaped << escape_byte(byte)
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
return escaped
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# C characters that must be back-slashed.
|
|
184
|
+
BACKSLASHED_CHARS = {
|
|
185
|
+
'0' => "\0",
|
|
186
|
+
'a' => "\a",
|
|
187
|
+
'b' => "\b",
|
|
188
|
+
'e' => "\e",
|
|
189
|
+
't' => "\t",
|
|
190
|
+
'n' => "\n",
|
|
191
|
+
'v' => "\v",
|
|
192
|
+
'f' => "\f",
|
|
193
|
+
'r' => "\r"
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
#
|
|
197
|
+
# Unescapes the given C escaped data.
|
|
198
|
+
#
|
|
199
|
+
# @param [String] data
|
|
200
|
+
# The given C escaped data.
|
|
201
|
+
#
|
|
202
|
+
# @return [String]
|
|
203
|
+
# The unescaped C String.
|
|
204
|
+
#
|
|
205
|
+
# @example
|
|
206
|
+
# Encoding::C.unescape("\x68\x65\x6c\x6c\x6f\x20\x77\x6f\x72\x6c\x64")
|
|
207
|
+
# # => "hello world"
|
|
208
|
+
#
|
|
209
|
+
def self.unescape(data)
|
|
210
|
+
unescaped = String.new
|
|
211
|
+
scanner = StringScanner.new(data)
|
|
212
|
+
|
|
213
|
+
until scanner.eos?
|
|
214
|
+
unescaped << case (char = scanner.getch)
|
|
215
|
+
when "\\" # backslash
|
|
216
|
+
if (hex_char = scanner.scan(/x[0-9a-fA-F]{1,2}/)) # \xXX
|
|
217
|
+
hex_char[1..].to_i(16).chr
|
|
218
|
+
elsif (hex_char = scanner.scan(/u[0-9a-fA-F]{4,8}/)) # \u..
|
|
219
|
+
hex_char[1..].to_i(16).chr(Encoding::UTF_8)
|
|
220
|
+
elsif (octal_char = scanner.scan(/[0-7]{1,3}/)) # \N, \NN, or \NNN
|
|
221
|
+
octal_char.to_i(8).chr
|
|
222
|
+
elsif (special_char = scanner.getch) # \[A-Za-z]
|
|
223
|
+
BACKSLASHED_CHARS.fetch(special_char,special_char)
|
|
224
|
+
end
|
|
225
|
+
else
|
|
226
|
+
char
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
return unescaped
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
#
|
|
234
|
+
# Escapes and quotes the given data as a C string.
|
|
235
|
+
#
|
|
236
|
+
# @param [String] data
|
|
237
|
+
# The given data to escape and quote.
|
|
238
|
+
#
|
|
239
|
+
# @return [String]
|
|
240
|
+
# The quoted C string.
|
|
241
|
+
#
|
|
242
|
+
# @example
|
|
243
|
+
# Encoding::C.quote("hello\nworld\n")
|
|
244
|
+
# # => "\"hello\\nworld\\n\""
|
|
245
|
+
#
|
|
246
|
+
def self.quote(data)
|
|
247
|
+
"\"#{escape(data)}\""
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
#
|
|
251
|
+
# Unquotes and unescapes the given C string.
|
|
252
|
+
#
|
|
253
|
+
# @param [String] data
|
|
254
|
+
# The given C string.
|
|
255
|
+
#
|
|
256
|
+
# @return [String]
|
|
257
|
+
# The un-quoted String if the String begins and ends with quotes, or
|
|
258
|
+
# the same String if it is not quoted.
|
|
259
|
+
#
|
|
260
|
+
# @example
|
|
261
|
+
# Encoding::C.unquote("\"hello\\nworld\"")
|
|
262
|
+
# # => "hello\nworld"
|
|
263
|
+
#
|
|
264
|
+
def self.unquote(data)
|
|
265
|
+
if ((data[0] == '"' && data[-1] == '"') ||
|
|
266
|
+
(data[0] == "'" && data[-1] == "'"))
|
|
267
|
+
unescape(data[1..-2])
|
|
268
|
+
else
|
|
269
|
+
data
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
require 'ronin/support/encoding/c/core_ext'
|
|
@@ -0,0 +1,107 @@
|
|
|
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 'chars/char_set'
|
|
20
|
+
|
|
21
|
+
class String
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Creates a new String by formatting each byte.
|
|
25
|
+
#
|
|
26
|
+
# @param [Enumerable<Integer, String>] include
|
|
27
|
+
# The bytes to format.
|
|
28
|
+
#
|
|
29
|
+
# @param [Enumerable<Integer, String>] exclude
|
|
30
|
+
# The bytes not to format.
|
|
31
|
+
#
|
|
32
|
+
# @yield [byte]
|
|
33
|
+
# The block which will return the formatted version of each byte
|
|
34
|
+
# within the String.
|
|
35
|
+
#
|
|
36
|
+
# @yieldparam [Integer] byte
|
|
37
|
+
# The byte to format.
|
|
38
|
+
#
|
|
39
|
+
# @return [String]
|
|
40
|
+
# The formatted version of the String.
|
|
41
|
+
#
|
|
42
|
+
# @example
|
|
43
|
+
# "hello".encode_bytes { |b| "%x" % b }
|
|
44
|
+
# # => "68656c6c6f"
|
|
45
|
+
#
|
|
46
|
+
# @api public
|
|
47
|
+
#
|
|
48
|
+
def encode_bytes(include: nil, exclude: nil)
|
|
49
|
+
included = (Chars::CharSet.new(*include) if include)
|
|
50
|
+
excluded = (Chars::CharSet.new(*exclude) if exclude)
|
|
51
|
+
formatted = String.new
|
|
52
|
+
|
|
53
|
+
each_byte do |b|
|
|
54
|
+
formatted << if (included.nil? || included.include_byte?(b)) &&
|
|
55
|
+
(excluded.nil? || !excluded.include_byte?(b))
|
|
56
|
+
yield(b)
|
|
57
|
+
else
|
|
58
|
+
b
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
return formatted
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#
|
|
66
|
+
# Creates a new String by formatting each character.
|
|
67
|
+
#
|
|
68
|
+
# @param [Enumerable<Integer, String>] include
|
|
69
|
+
# The bytes to format.
|
|
70
|
+
#
|
|
71
|
+
# @param [Enumerable<Integer, String>] exclude
|
|
72
|
+
# The bytes not to format.
|
|
73
|
+
#
|
|
74
|
+
# @yield [char]
|
|
75
|
+
# The block which will return the formatted version of each character
|
|
76
|
+
# within the String.
|
|
77
|
+
#
|
|
78
|
+
# @yieldparam [String] char
|
|
79
|
+
# The character to format.
|
|
80
|
+
#
|
|
81
|
+
# @return [String]
|
|
82
|
+
# The formatted version of the String.
|
|
83
|
+
#
|
|
84
|
+
# @example
|
|
85
|
+
# "hello".encode_chars { |c| c * 3 }
|
|
86
|
+
# # => "hhheeellllllooo"
|
|
87
|
+
#
|
|
88
|
+
# @api public
|
|
89
|
+
#
|
|
90
|
+
def encode_chars(include: nil, exclude: nil)
|
|
91
|
+
included = (Chars::CharSet.new(*include) if include)
|
|
92
|
+
excluded = (Chars::CharSet.new(*exclude) if exclude)
|
|
93
|
+
formatted = String.new
|
|
94
|
+
|
|
95
|
+
each_char do |c|
|
|
96
|
+
formatted << if (included.nil? || included.include_char?(c)) &&
|
|
97
|
+
(excluded.nil? || !excluded.include_char?(c))
|
|
98
|
+
yield(c)
|
|
99
|
+
else
|
|
100
|
+
c
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
return formatted
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
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/base16/core_ext'
|
|
20
|
+
require 'ronin/support/encoding/base32/core_ext'
|
|
21
|
+
require 'ronin/support/encoding/base64/core_ext'
|
|
22
|
+
require 'ronin/support/encoding/hex/core_ext'
|
|
23
|
+
require 'ronin/support/encoding/c/core_ext'
|
|
24
|
+
require 'ronin/support/encoding/shell/core_ext'
|
|
25
|
+
require 'ronin/support/encoding/powershell/core_ext'
|
|
26
|
+
require 'ronin/support/encoding/html/core_ext'
|
|
27
|
+
require 'ronin/support/encoding/http/core_ext'
|
|
28
|
+
require 'ronin/support/encoding/js/core_ext'
|
|
29
|
+
require 'ronin/support/encoding/sql/core_ext'
|
|
30
|
+
require 'ronin/support/encoding/xml/core_ext'
|
|
31
|
+
require 'ronin/support/encoding/quoted_printable/core_ext'
|
|
32
|
+
require 'ronin/support/encoding/ruby/core_ext'
|
|
33
|
+
require 'ronin/support/encoding/uri/core_ext'
|
|
@@ -0,0 +1,82 @@
|
|
|
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 Integer
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Converts the integer into hex format.
|
|
25
|
+
#
|
|
26
|
+
# @return [String]
|
|
27
|
+
# The hex encoded version of the Integer.
|
|
28
|
+
#
|
|
29
|
+
# @example
|
|
30
|
+
# 0x41.hex_encode
|
|
31
|
+
# # => "41"
|
|
32
|
+
#
|
|
33
|
+
# @see Ronin::Support::Encoding::Hex.encode_byte
|
|
34
|
+
#
|
|
35
|
+
# @since 0.6.0
|
|
36
|
+
#
|
|
37
|
+
def hex_encode
|
|
38
|
+
Ronin::Support::Encoding::Hex.encode_byte(self)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
alias to_hex hex_encode
|
|
42
|
+
|
|
43
|
+
#
|
|
44
|
+
# Converts the integer into an escaped hex character.
|
|
45
|
+
#
|
|
46
|
+
# @return [String]
|
|
47
|
+
# The hex escaped version of the Integer.
|
|
48
|
+
#
|
|
49
|
+
# @raise [RangeError]
|
|
50
|
+
# The integer value is negative.
|
|
51
|
+
#
|
|
52
|
+
# @example
|
|
53
|
+
# 42.hex_char
|
|
54
|
+
# # => "\\x2a"
|
|
55
|
+
#
|
|
56
|
+
# @see Ronin::Support::Encoding::Hex.escape_byte
|
|
57
|
+
#
|
|
58
|
+
# @api public
|
|
59
|
+
#
|
|
60
|
+
def hex_escape
|
|
61
|
+
Ronin::Support::Encoding::Hex.escape_byte(self)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
alias hex_char hex_escape
|
|
65
|
+
|
|
66
|
+
#
|
|
67
|
+
# Encodes the number as a `0xXX` hex integer.
|
|
68
|
+
#
|
|
69
|
+
# @return [String]
|
|
70
|
+
# The hex encoded integer.
|
|
71
|
+
#
|
|
72
|
+
# @example
|
|
73
|
+
# 42.hex_int
|
|
74
|
+
# # => "0x2e"
|
|
75
|
+
#
|
|
76
|
+
# @api public
|
|
77
|
+
#
|
|
78
|
+
def hex_int
|
|
79
|
+
"0x%.2x" % self
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|