ronin-support 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +1 -0
- data/.rubocop.yml +1 -2
- data/ChangeLog.md +23 -0
- data/README.md +3 -1
- data/gemspec.yml +4 -3
- data/lib/ronin/support/archive/core_ext/file.rb +1 -1
- data/lib/ronin/support/archive/core_ext.rb +1 -1
- data/lib/ronin/support/archive/mixin.rb +1 -1
- data/lib/ronin/support/archive/tar/reader.rb +1 -1
- data/lib/ronin/support/archive/tar/writer.rb +1 -1
- data/lib/ronin/support/archive/tar.rb +1 -1
- data/lib/ronin/support/archive/zip/reader/entry.rb +1 -1
- data/lib/ronin/support/archive/zip/reader/statistics.rb +1 -1
- data/lib/ronin/support/archive/zip/reader.rb +1 -1
- data/lib/ronin/support/archive/zip/writer.rb +1 -1
- data/lib/ronin/support/archive/zip.rb +1 -1
- data/lib/ronin/support/archive.rb +1 -1
- data/lib/ronin/support/binary/array.rb +1 -1
- data/lib/ronin/support/binary/bit_flip/core_ext/integer.rb +1 -1
- data/lib/ronin/support/binary/bit_flip/core_ext/string.rb +1 -1
- data/lib/ronin/support/binary/bit_flip/core_ext.rb +1 -1
- data/lib/ronin/support/binary/bit_flip.rb +1 -1
- data/lib/ronin/support/binary/buffer.rb +1 -1
- data/lib/ronin/support/binary/byte_slice.rb +2 -2
- data/lib/ronin/support/binary/core_ext/array.rb +1 -1
- data/lib/ronin/support/binary/core_ext/float.rb +1 -1
- data/lib/ronin/support/binary/core_ext/integer.rb +1 -1
- data/lib/ronin/support/binary/core_ext/io.rb +1 -1
- data/lib/ronin/support/binary/core_ext/string.rb +1 -1
- data/lib/ronin/support/binary/core_ext.rb +1 -1
- data/lib/ronin/support/binary/cstring.rb +1 -1
- data/lib/ronin/support/binary/ctypes/aggregate_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +1 -1
- data/lib/ronin/support/binary/ctypes/arch/arm.rb +1 -1
- data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +1 -1
- data/lib/ronin/support/binary/ctypes/arch/arm64.rb +1 -1
- data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +1 -1
- data/lib/ronin/support/binary/ctypes/arch/mips.rb +1 -1
- data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +1 -1
- data/lib/ronin/support/binary/ctypes/arch/mips64.rb +1 -1
- data/lib/ronin/support/binary/ctypes/arch/ppc.rb +1 -1
- data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +1 -1
- data/lib/ronin/support/binary/ctypes/arch/x86.rb +1 -1
- data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +1 -1
- data/lib/ronin/support/binary/ctypes/arch.rb +1 -1
- data/lib/ronin/support/binary/ctypes/array_object_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/array_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/big_endian.rb +1 -1
- data/lib/ronin/support/binary/ctypes/char_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/char_types.rb +1 -1
- data/lib/ronin/support/binary/ctypes/enum_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/float32_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/float64_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/float_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/int16_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/int32_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/int64_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/int8_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/int_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/little_endian.rb +1 -1
- data/lib/ronin/support/binary/ctypes/mixin.rb +1 -1
- data/lib/ronin/support/binary/ctypes/native.rb +1 -1
- data/lib/ronin/support/binary/ctypes/network.rb +1 -1
- data/lib/ronin/support/binary/ctypes/object_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/os/android.rb +1 -1
- data/lib/ronin/support/binary/ctypes/os/apple_ios.rb +1 -1
- data/lib/ronin/support/binary/ctypes/os/bsd.rb +1 -1
- data/lib/ronin/support/binary/ctypes/os/freebsd.rb +1 -1
- data/lib/ronin/support/binary/ctypes/os/linux.rb +1 -1
- data/lib/ronin/support/binary/ctypes/os/macos.rb +1 -1
- data/lib/ronin/support/binary/ctypes/os/netbsd.rb +1 -1
- data/lib/ronin/support/binary/ctypes/os/openbsd.rb +1 -1
- data/lib/ronin/support/binary/ctypes/os/unix.rb +1 -1
- data/lib/ronin/support/binary/ctypes/os/windows.rb +1 -1
- data/lib/ronin/support/binary/ctypes/os.rb +1 -1
- data/lib/ronin/support/binary/ctypes/scalar_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/string_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/struct_object_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/struct_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/type_resolver.rb +1 -1
- data/lib/ronin/support/binary/ctypes/uint16_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/uint32_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/uint64_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/uint8_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/uint_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/union_object_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/union_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes.rb +1 -1
- data/lib/ronin/support/binary/memory.rb +1 -1
- data/lib/ronin/support/binary/packet.rb +1 -1
- data/lib/ronin/support/binary/stack.rb +1 -1
- data/lib/ronin/support/binary/stream/methods.rb +1 -1
- data/lib/ronin/support/binary/stream.rb +1 -1
- data/lib/ronin/support/binary/struct/member.rb +1 -1
- data/lib/ronin/support/binary/struct.rb +1 -1
- data/lib/ronin/support/binary/template.rb +1 -1
- data/lib/ronin/support/binary/unhexdump/core_ext/file.rb +1 -1
- data/lib/ronin/support/binary/unhexdump/core_ext/string.rb +1 -1
- data/lib/ronin/support/binary/unhexdump/core_ext.rb +1 -1
- data/lib/ronin/support/binary/unhexdump/parser.rb +1 -1
- data/lib/ronin/support/binary/unhexdump.rb +1 -1
- data/lib/ronin/support/binary/union.rb +1 -1
- data/lib/ronin/support/binary.rb +1 -1
- data/lib/ronin/support/cli/ansi.rb +1 -1
- data/lib/ronin/support/cli/io_shell/core_ext/io.rb +1 -1
- data/lib/ronin/support/cli/io_shell/core_ext.rb +1 -1
- data/lib/ronin/support/cli/io_shell.rb +1 -1
- data/lib/ronin/support/cli/printing.rb +1 -1
- data/lib/ronin/support/cli.rb +1 -1
- data/lib/ronin/support/compression/core_ext/file.rb +1 -1
- data/lib/ronin/support/compression/core_ext/string.rb +1 -1
- data/lib/ronin/support/compression/core_ext.rb +1 -1
- data/lib/ronin/support/compression/gzip/reader.rb +1 -1
- data/lib/ronin/support/compression/gzip/writer.rb +1 -1
- data/lib/ronin/support/compression/gzip.rb +1 -1
- data/lib/ronin/support/compression/mixin.rb +1 -1
- data/lib/ronin/support/compression/zlib.rb +1 -1
- data/lib/ronin/support/compression.rb +1 -1
- data/lib/ronin/support/core_ext/enumerable.rb +1 -1
- data/lib/ronin/support/core_ext/file.rb +1 -1
- data/lib/ronin/support/core_ext/integer.rb +1 -1
- data/lib/ronin/support/core_ext/ipaddr.rb +1 -1
- data/lib/ronin/support/core_ext/kernel.rb +1 -1
- data/lib/ronin/support/core_ext/string.rb +1 -1
- data/lib/ronin/support/core_ext.rb +1 -1
- data/lib/ronin/support/crypto/cert.rb +1 -1
- data/lib/ronin/support/crypto/cert_chain.rb +1 -1
- data/lib/ronin/support/crypto/cipher/aes.rb +1 -1
- data/lib/ronin/support/crypto/cipher/aes128.rb +1 -1
- data/lib/ronin/support/crypto/cipher/aes256.rb +1 -1
- data/lib/ronin/support/crypto/cipher.rb +2 -2
- data/lib/ronin/support/crypto/core_ext/file.rb +15 -9
- data/lib/ronin/support/crypto/core_ext/string.rb +17 -9
- data/lib/ronin/support/crypto/core_ext.rb +1 -1
- data/lib/ronin/support/crypto/hmac.rb +1 -1
- data/lib/ronin/support/crypto/key/dh.rb +1 -1
- data/lib/ronin/support/crypto/key/dsa.rb +1 -1
- data/lib/ronin/support/crypto/key/ec.rb +1 -1
- data/lib/ronin/support/crypto/key/methods.rb +1 -1
- data/lib/ronin/support/crypto/key/rsa.rb +1 -1
- data/lib/ronin/support/crypto/key.rb +1 -1
- data/lib/ronin/support/crypto/mixin.rb +40 -10
- data/lib/ronin/support/crypto/openssl.rb +1 -1
- data/lib/ronin/support/crypto.rb +10 -10
- data/lib/ronin/support/encoding/base16/core_ext/string.rb +1 -1
- data/lib/ronin/support/encoding/base16/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/base16.rb +1 -1
- data/lib/ronin/support/encoding/base32/core_ext/string.rb +7 -7
- data/lib/ronin/support/encoding/base32/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/base32.rb +4 -4
- data/lib/ronin/support/encoding/base36/core_ext/integer.rb +4 -4
- data/lib/ronin/support/encoding/base36/core_ext/string.rb +4 -4
- data/lib/ronin/support/encoding/base36/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/base36.rb +4 -4
- data/lib/ronin/support/encoding/base62/core_ext/integer.rb +4 -4
- data/lib/ronin/support/encoding/base62/core_ext/string.rb +4 -4
- data/lib/ronin/support/encoding/base62/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/base62.rb +4 -4
- data/lib/ronin/support/encoding/base64/core_ext/string.rb +7 -7
- data/lib/ronin/support/encoding/base64/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/base64.rb +4 -4
- data/lib/ronin/support/encoding/c/core_ext/integer.rb +1 -1
- data/lib/ronin/support/encoding/c/core_ext/string.rb +1 -1
- data/lib/ronin/support/encoding/c/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/c.rb +33 -34
- data/lib/ronin/support/encoding/core_ext/string.rb +1 -1
- data/lib/ronin/support/encoding/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/hex/core_ext/integer.rb +1 -1
- data/lib/ronin/support/encoding/hex/core_ext/string.rb +1 -1
- data/lib/ronin/support/encoding/hex/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/hex.rb +21 -22
- data/lib/ronin/support/encoding/html/core_ext/integer.rb +1 -1
- data/lib/ronin/support/encoding/html/core_ext/string.rb +1 -1
- data/lib/ronin/support/encoding/html/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/html.rb +1 -1
- data/lib/ronin/support/encoding/http/core_ext/integer.rb +1 -1
- data/lib/ronin/support/encoding/http/core_ext/string.rb +1 -1
- data/lib/ronin/support/encoding/http/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/http.rb +1 -1
- data/lib/ronin/support/encoding/js/core_ext/integer.rb +1 -1
- data/lib/ronin/support/encoding/js/core_ext/string.rb +1 -1
- data/lib/ronin/support/encoding/js/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/js.rb +39 -39
- data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +3 -1
- data/lib/ronin/support/encoding/powershell/core_ext/string.rb +7 -11
- data/lib/ronin/support/encoding/powershell/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/powershell.rb +26 -20
- data/lib/ronin/support/encoding/punycode/core_ext/string.rb +7 -7
- data/lib/ronin/support/encoding/punycode/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/punycode.rb +10 -10
- data/lib/ronin/support/encoding/quoted_printable/core_ext/string.rb +5 -7
- data/lib/ronin/support/encoding/quoted_printable/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/quoted_printable.rb +10 -10
- data/lib/ronin/support/encoding/ruby/core_ext/string.rb +2 -2
- data/lib/ronin/support/encoding/ruby/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/ruby.rb +13 -10
- data/lib/ronin/support/encoding/shell/core_ext/integer.rb +4 -4
- data/lib/ronin/support/encoding/shell/core_ext/string.rb +1 -1
- data/lib/ronin/support/encoding/shell/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/shell.rb +33 -28
- data/lib/ronin/support/encoding/smtp.rb +1 -1
- data/lib/ronin/support/encoding/sql/core_ext/string.rb +1 -1
- data/lib/ronin/support/encoding/sql/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/sql.rb +1 -1
- data/lib/ronin/support/encoding/uri/core_ext/integer.rb +1 -1
- data/lib/ronin/support/encoding/uri/core_ext/string.rb +1 -1
- data/lib/ronin/support/encoding/uri/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/uri.rb +1 -1
- data/lib/ronin/support/encoding/uuencoding/core_ext/string.rb +5 -7
- data/lib/ronin/support/encoding/uuencoding/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/uuencoding.rb +10 -10
- data/lib/ronin/support/encoding/xml/core_ext/integer.rb +1 -1
- data/lib/ronin/support/encoding/xml/core_ext/string.rb +1 -1
- data/lib/ronin/support/encoding/xml/core_ext.rb +1 -1
- data/lib/ronin/support/encoding/xml.rb +1 -1
- data/lib/ronin/support/encoding.rb +1 -1
- data/lib/ronin/support/home.rb +1 -1
- data/lib/ronin/support/mixin.rb +1 -1
- data/lib/ronin/support/network/asn/dns_record.rb +1 -1
- data/lib/ronin/support/network/asn/list.rb +1 -1
- data/lib/ronin/support/network/asn/record.rb +1 -1
- data/lib/ronin/support/network/asn/record_set.rb +1 -1
- data/lib/ronin/support/network/asn.rb +1 -1
- data/lib/ronin/support/network/core_ext.rb +1 -1
- data/lib/ronin/support/network/dns/idn.rb +1 -1
- data/lib/ronin/support/network/dns/mixin.rb +1 -1
- data/lib/ronin/support/network/dns/resolver.rb +4 -2
- data/lib/ronin/support/network/dns.rb +1 -1
- data/lib/ronin/support/network/domain.rb +1 -1
- data/lib/ronin/support/network/email_address.rb +1 -1
- data/lib/ronin/support/network/esmtp/mixin.rb +1 -1
- data/lib/ronin/support/network/exceptions.rb +1 -1
- data/lib/ronin/support/network/ftp/mixin.rb +1 -1
- data/lib/ronin/support/network/host.rb +2 -2
- data/lib/ronin/support/network/http/cookie.rb +1 -1
- data/lib/ronin/support/network/http/core_ext/uri/http.rb +3 -3
- data/lib/ronin/support/network/http/core_ext.rb +1 -1
- data/lib/ronin/support/network/http/mixin.rb +1 -1
- data/lib/ronin/support/network/http/request.rb +1 -1
- data/lib/ronin/support/network/http/set_cookie.rb +1 -1
- data/lib/ronin/support/network/http/user_agents.rb +1 -1
- data/lib/ronin/support/network/http.rb +1 -1
- data/lib/ronin/support/network/imap/mixin.rb +1 -1
- data/lib/ronin/support/network/ip/mixin.rb +1 -1
- data/lib/ronin/support/network/ip.rb +1 -1
- data/lib/ronin/support/network/ip_range/cidr.rb +1 -1
- data/lib/ronin/support/network/ip_range/glob.rb +1 -1
- data/lib/ronin/support/network/ip_range/range.rb +1 -1
- data/lib/ronin/support/network/ip_range.rb +1 -1
- data/lib/ronin/support/network/mixin.rb +1 -1
- data/lib/ronin/support/network/packet.rb +1 -1
- data/lib/ronin/support/network/pop3/mixin.rb +1 -1
- data/lib/ronin/support/network/proxy.rb +1 -1
- data/lib/ronin/support/network/public_suffix/list.rb +1 -1
- data/lib/ronin/support/network/public_suffix/suffix.rb +1 -1
- data/lib/ronin/support/network/public_suffix/suffix_set.rb +1 -1
- data/lib/ronin/support/network/public_suffix.rb +1 -1
- data/lib/ronin/support/network/smtp/email.rb +1 -1
- data/lib/ronin/support/network/smtp/mixin.rb +1 -1
- data/lib/ronin/support/network/smtp.rb +1 -1
- data/lib/ronin/support/network/ssl/local_cert.rb +1 -1
- data/lib/ronin/support/network/ssl/local_key.rb +1 -1
- data/lib/ronin/support/network/ssl/mixin.rb +1 -1
- data/lib/ronin/support/network/ssl/openssl.rb +1 -1
- data/lib/ronin/support/network/ssl/proxy.rb +1 -1
- data/lib/ronin/support/network/ssl.rb +1 -1
- data/lib/ronin/support/network/tcp/mixin.rb +1 -1
- data/lib/ronin/support/network/tcp/proxy.rb +1 -1
- data/lib/ronin/support/network/tcp.rb +1 -1
- data/lib/ronin/support/network/telnet/mixin.rb +1 -1
- data/lib/ronin/support/network/telnet.rb +1 -1
- data/lib/ronin/support/network/tld/list.rb +1 -1
- data/lib/ronin/support/network/tld.rb +1 -1
- data/lib/ronin/support/network/tls/mixin.rb +1 -1
- data/lib/ronin/support/network/tls/proxy.rb +1 -1
- data/lib/ronin/support/network/tls.rb +1 -1
- data/lib/ronin/support/network/udp/mixin.rb +1 -1
- data/lib/ronin/support/network/udp/proxy.rb +1 -1
- data/lib/ronin/support/network/udp.rb +1 -1
- data/lib/ronin/support/network/unix/mixin.rb +1 -1
- data/lib/ronin/support/network/wildcard.rb +1 -1
- data/lib/ronin/support/network.rb +1 -1
- data/lib/ronin/support/path.rb +1 -1
- data/lib/ronin/support/text/core_ext/regexp.rb +1 -1
- data/lib/ronin/support/text/core_ext/string.rb +1 -1
- data/lib/ronin/support/text/core_ext.rb +1 -1
- data/lib/ronin/support/text/entropy/core_ext/string.rb +1 -1
- data/lib/ronin/support/text/entropy/core_ext.rb +1 -1
- data/lib/ronin/support/text/entropy.rb +1 -1
- data/lib/ronin/support/text/erb/mixin.rb +1 -1
- data/lib/ronin/support/text/erb.rb +1 -1
- data/lib/ronin/support/text/homoglyph/core_ext/string.rb +1 -1
- data/lib/ronin/support/text/homoglyph/core_ext.rb +1 -1
- data/lib/ronin/support/text/homoglyph/exceptions.rb +1 -1
- data/lib/ronin/support/text/homoglyph/table.rb +1 -1
- data/lib/ronin/support/text/homoglyph.rb +1 -1
- data/lib/ronin/support/text/mixin.rb +1 -1
- data/lib/ronin/support/text/patterns/credentials.rb +1 -1
- data/lib/ronin/support/text/patterns/crypto.rb +1 -1
- data/lib/ronin/support/text/patterns/file_system.rb +1 -1
- data/lib/ronin/support/text/patterns/language.rb +1 -1
- data/lib/ronin/support/text/patterns/network/public_suffix.rb +1 -1
- data/lib/ronin/support/text/patterns/network.rb +1 -1
- data/lib/ronin/support/text/patterns/numeric.rb +2 -2
- data/lib/ronin/support/text/patterns/pii.rb +1 -1
- data/lib/ronin/support/text/patterns/source_code.rb +1 -1
- data/lib/ronin/support/text/patterns.rb +1 -1
- data/lib/ronin/support/text/random/mixin.rb +1 -1
- data/lib/ronin/support/text/random.rb +1 -1
- data/lib/ronin/support/text/typo/core_ext/string.rb +1 -1
- data/lib/ronin/support/text/typo/core_ext.rb +1 -1
- data/lib/ronin/support/text/typo/exceptions.rb +1 -1
- data/lib/ronin/support/text/typo/generator.rb +1 -1
- data/lib/ronin/support/text/typo.rb +1 -1
- data/lib/ronin/support/text.rb +1 -1
- data/lib/ronin/support/version.rb +2 -2
- data/lib/ronin/support.rb +1 -1
- metadata +18 -4
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -41,40 +41,40 @@ module Ronin
|
|
41
41
|
module JS
|
42
42
|
# Special JavaScript bytes and their escaped Strings.
|
43
43
|
ESCAPE_BYTES = {
|
44
|
-
0x00 =>
|
45
|
-
0x01 =>
|
46
|
-
0x02 =>
|
47
|
-
0x03 =>
|
48
|
-
0x04 =>
|
49
|
-
0x05 =>
|
50
|
-
0x06 =>
|
51
|
-
0x07 =>
|
52
|
-
0x08 =>
|
53
|
-
0x09 =>
|
54
|
-
0x0a =>
|
55
|
-
0x0b =>
|
56
|
-
0x0c =>
|
57
|
-
0x0d =>
|
58
|
-
0x0e =>
|
59
|
-
0x0f =>
|
60
|
-
0x10 =>
|
61
|
-
0x11 =>
|
62
|
-
0x12 =>
|
63
|
-
0x13 =>
|
64
|
-
0x14 =>
|
65
|
-
0x15 =>
|
66
|
-
0x16 =>
|
67
|
-
0x17 =>
|
68
|
-
0x18 =>
|
69
|
-
0x19 =>
|
70
|
-
0x1a =>
|
71
|
-
0x1b =>
|
72
|
-
0x1c =>
|
73
|
-
0x1d =>
|
74
|
-
0x1e =>
|
75
|
-
0x1f =>
|
76
|
-
0x22 =>
|
77
|
-
0x5c =>
|
44
|
+
0x00 => "\\u0000",
|
45
|
+
0x01 => "\\u0001",
|
46
|
+
0x02 => "\\u0002",
|
47
|
+
0x03 => "\\u0003",
|
48
|
+
0x04 => "\\u0004",
|
49
|
+
0x05 => "\\u0005",
|
50
|
+
0x06 => "\\u0006",
|
51
|
+
0x07 => "\\u0007",
|
52
|
+
0x08 => "\\b",
|
53
|
+
0x09 => "\\t",
|
54
|
+
0x0a => "\\n",
|
55
|
+
0x0b => "\\u000b",
|
56
|
+
0x0c => "\\f",
|
57
|
+
0x0d => "\\r",
|
58
|
+
0x0e => "\\u000e",
|
59
|
+
0x0f => "\\u000f",
|
60
|
+
0x10 => "\\u0010",
|
61
|
+
0x11 => "\\u0011",
|
62
|
+
0x12 => "\\u0012",
|
63
|
+
0x13 => "\\u0013",
|
64
|
+
0x14 => "\\u0014",
|
65
|
+
0x15 => "\\u0015",
|
66
|
+
0x16 => "\\u0016",
|
67
|
+
0x17 => "\\u0017",
|
68
|
+
0x18 => "\\u0018",
|
69
|
+
0x19 => "\\u0019",
|
70
|
+
0x1a => "\\u001a",
|
71
|
+
0x1b => "\\u001b",
|
72
|
+
0x1c => "\\u001c",
|
73
|
+
0x1d => "\\u001d",
|
74
|
+
0x1e => "\\u001e",
|
75
|
+
0x1f => "\\u001f",
|
76
|
+
0x22 => "\\\"", # \"
|
77
|
+
0x5c => "\\\\" # \\
|
78
78
|
}
|
79
79
|
|
80
80
|
#
|
@@ -134,7 +134,7 @@ module Ronin
|
|
134
134
|
"\\n" => "\n",
|
135
135
|
"\\f" => "\f",
|
136
136
|
"\\r" => "\r",
|
137
|
-
"\\\"" => "
|
137
|
+
"\\\"" => '"',
|
138
138
|
"\\'" => "'",
|
139
139
|
"\\\\" => "\\"
|
140
140
|
}
|
@@ -187,7 +187,7 @@ module Ronin
|
|
187
187
|
|
188
188
|
until scanner.eos?
|
189
189
|
unescaped << if (backslash_escape = scanner.scan(/\\[btnfr'"\\]/))
|
190
|
-
BACKSLASHED_CHARS
|
190
|
+
BACKSLASHED_CHARS.fetch(backslash_escape)
|
191
191
|
elsif (surrogate_pair = scanner.scan(/\\u[dD][890abAB][0-9a-fA-F]{2}\\u[dD][cdefCDEF][0-9a-fA-F]{2}/))
|
192
192
|
hi = surrogate_pair[2..6].to_i(16)
|
193
193
|
lo = surrogate_pair[8..12].to_i(16)
|
@@ -281,8 +281,8 @@ module Ronin
|
|
281
281
|
# # => "hello\nworld"
|
282
282
|
#
|
283
283
|
def self.unquote(data)
|
284
|
-
if ((data
|
285
|
-
(data
|
284
|
+
if ((data.start_with?('"') && data.end_with?('"')) ||
|
285
|
+
(data.start_with?("'") && data.end_with?("'")))
|
286
286
|
unescape(data[1..-2])
|
287
287
|
else
|
288
288
|
data
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -40,6 +40,7 @@ class Integer
|
|
40
40
|
# # => "`u{1001}"
|
41
41
|
#
|
42
42
|
# @see Ronin::Support::Encoding::PowerShell.encode_byte
|
43
|
+
# @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
43
44
|
#
|
44
45
|
# @since 1.0.0
|
45
46
|
#
|
@@ -73,6 +74,7 @@ class Integer
|
|
73
74
|
# # => "`u{1001}"
|
74
75
|
#
|
75
76
|
# @see Ronin::Support::Encoding::PowerShell.escape_byte
|
77
|
+
# @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
76
78
|
#
|
77
79
|
# @since 1.0.0
|
78
80
|
#
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -21,9 +21,7 @@ require 'ronin/support/encoding/powershell'
|
|
21
21
|
class String
|
22
22
|
|
23
23
|
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
# [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
24
|
+
# PowerShell escapes the characters in the String.
|
27
25
|
#
|
28
26
|
# @return [String]
|
29
27
|
# The PowerShell escaped string.
|
@@ -33,6 +31,7 @@ class String
|
|
33
31
|
# # => "hello`nworld"
|
34
32
|
#
|
35
33
|
# @see Ronin::Support::Encoding::PowerShell.escape
|
34
|
+
# @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
36
35
|
#
|
37
36
|
# @api public
|
38
37
|
#
|
@@ -45,9 +44,7 @@ class String
|
|
45
44
|
alias psh_escape powershell_escape
|
46
45
|
|
47
46
|
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
# [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
47
|
+
# PowerShell unescapes the characters in the String.
|
51
48
|
#
|
52
49
|
# @return [String]
|
53
50
|
# The PowerShell unescaped string.
|
@@ -57,6 +54,7 @@ class String
|
|
57
54
|
# # => "hello\nworld"
|
58
55
|
#
|
59
56
|
# @see Ronin::Support::Encoding::PowerShell.unescape
|
57
|
+
# @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
60
58
|
#
|
61
59
|
# @api public
|
62
60
|
#
|
@@ -69,9 +67,7 @@ class String
|
|
69
67
|
alias psh_unescape powershell_unescape
|
70
68
|
|
71
69
|
#
|
72
|
-
#
|
73
|
-
#
|
74
|
-
# [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
70
|
+
# PowerShell encodes every character in the String.
|
75
71
|
#
|
76
72
|
# @return [String]
|
77
73
|
# The PowerShell encoded String.
|
@@ -81,7 +77,7 @@ class String
|
|
81
77
|
# # => "$([char]0x68)$([char]0x65)$([char]0x6c)$([char]0x6c)$([char]0x6f)$([char]0x20)$([char]0x77)$([char]0x6f)$([char]0x72)$([char]0x6c)$([char]0x64)"
|
82
78
|
#
|
83
79
|
# @see Ronin::Support::Encoding::PowerShell.encode
|
84
|
-
#
|
80
|
+
# @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
85
81
|
# @api public
|
86
82
|
#
|
87
83
|
# @since 1.0.0
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -40,6 +40,8 @@ module Ronin
|
|
40
40
|
#
|
41
41
|
module PowerShell
|
42
42
|
# Special PowerShell bytes and their escaped Strings.
|
43
|
+
#
|
44
|
+
# @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
43
45
|
ESCAPE_BYTES = {
|
44
46
|
0x00 => "`0",
|
45
47
|
0x07 => "`a",
|
@@ -78,6 +80,8 @@ module Ronin
|
|
78
80
|
# Encoding::PowerShell.encode_byte(1001)
|
79
81
|
# # => "`u{1001}"
|
80
82
|
#
|
83
|
+
# @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
84
|
+
#
|
81
85
|
def self.encode_byte(byte)
|
82
86
|
if byte >= 0x00 && byte <= 0xff
|
83
87
|
"$([char]0x%.2x)" % byte
|
@@ -112,6 +116,8 @@ module Ronin
|
|
112
116
|
# Encoding::PowerShell.escape_byte(1001)
|
113
117
|
# # => "`u{1001}"
|
114
118
|
#
|
119
|
+
# @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
120
|
+
#
|
115
121
|
def self.escape_byte(byte)
|
116
122
|
if byte >= 0x00 && byte <= 0xff
|
117
123
|
ESCAPE_BYTES.fetch(byte) do
|
@@ -145,9 +151,7 @@ module Ronin
|
|
145
151
|
}
|
146
152
|
|
147
153
|
#
|
148
|
-
#
|
149
|
-
#
|
150
|
-
# [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
154
|
+
# PowerShell escapes the special characters in the data.
|
151
155
|
#
|
152
156
|
# @param [String] data
|
153
157
|
# The data to PowerShell escape.
|
@@ -159,6 +163,8 @@ module Ronin
|
|
159
163
|
# Encoding::PowerShell.escape("hello\nworld")
|
160
164
|
# # => "hello`nworld"
|
161
165
|
#
|
166
|
+
# @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
167
|
+
#
|
162
168
|
def self.escape(data)
|
163
169
|
escaped = String.new
|
164
170
|
|
@@ -176,9 +182,7 @@ module Ronin
|
|
176
182
|
end
|
177
183
|
|
178
184
|
#
|
179
|
-
#
|
180
|
-
#
|
181
|
-
# [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
185
|
+
# PowerShell unescapes the characters in the data.
|
182
186
|
#
|
183
187
|
# @param [String] data
|
184
188
|
# The PowerShell encoded data to unescape.
|
@@ -190,19 +194,21 @@ module Ronin
|
|
190
194
|
# Encoding::PowerShell.unescape("hello`nworld")
|
191
195
|
# # => "hello\nworld"
|
192
196
|
#
|
197
|
+
# @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
198
|
+
#
|
193
199
|
def self.unescape(data)
|
194
200
|
unescaped = String.new(encoding: Encoding::UTF_8)
|
195
201
|
scanner = StringScanner.new(data)
|
196
202
|
|
197
203
|
until scanner.eos?
|
198
|
-
unescaped << if (
|
199
|
-
BACKSLASHED_CHARS[
|
200
|
-
elsif (
|
201
|
-
|
202
|
-
elsif (
|
203
|
-
|
204
|
-
elsif (
|
205
|
-
|
204
|
+
unescaped << if (grave_escape = scanner.scan(/`[0abetnvfr]/)) # `c
|
205
|
+
BACKSLASHED_CHARS.fetch(grave_escape[1,1])
|
206
|
+
elsif (hex_escape = scanner.scan(/\$\(\[char\]0x[0-9a-fA-F]{1,2}\)/)) # [char]0xXX
|
207
|
+
hex_escape[10..-2].to_i(16).chr
|
208
|
+
elsif (hex_escape = scanner.scan(/\$\(\[char\]0x[0-9a-fA-F]{3,}\)/)) # [char]0xXX
|
209
|
+
hex_escape[10..-2].to_i(16).chr(Encoding::UTF_8)
|
210
|
+
elsif (unicode_escape = scanner.scan(/`u\{[0-9a-fA-F]+\}/)) # `u{XXXX}'
|
211
|
+
unicode_escape[3..-2].to_i(16).chr(Encoding::UTF_8)
|
206
212
|
else
|
207
213
|
scanner.getch
|
208
214
|
end
|
@@ -212,9 +218,7 @@ module Ronin
|
|
212
218
|
end
|
213
219
|
|
214
220
|
#
|
215
|
-
#
|
216
|
-
#
|
217
|
-
# [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
221
|
+
# PowerShell encodes every character in the data.
|
218
222
|
#
|
219
223
|
# @param [String] data
|
220
224
|
# The data to encode.
|
@@ -226,6 +230,8 @@ module Ronin
|
|
226
230
|
# Encoding::PowerShell.encode("hello world")
|
227
231
|
# # => "$([char]0x68)$([char]0x65)$([char]0x6c)$([char]0x6c)$([char]0x6f)$([char]0x20)$([char]0x77)$([char]0x6f)$([char]0x72)$([char]0x6c)$([char]0x64)"
|
228
232
|
#
|
233
|
+
# @see https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-7.2
|
234
|
+
#
|
229
235
|
def self.encode(data)
|
230
236
|
encoded = String.new
|
231
237
|
|
@@ -291,9 +297,9 @@ module Ronin
|
|
291
297
|
# # => "hello'world"
|
292
298
|
#
|
293
299
|
def self.unquote(data)
|
294
|
-
if (data
|
300
|
+
if (data.start_with?('"') && data.end_with?('"'))
|
295
301
|
unescape(data[1..-2])
|
296
|
-
elsif (data
|
302
|
+
elsif (data.start_with?("'") && data.end_with?("'"))
|
297
303
|
data[1..-2].gsub("''","'")
|
298
304
|
else
|
299
305
|
data
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -21,9 +21,7 @@ require 'ronin/support/encoding/punycode'
|
|
21
21
|
class String
|
22
22
|
|
23
23
|
#
|
24
|
-
# Encodes a unicode String into
|
25
|
-
#
|
26
|
-
# [punycode]: https://en.wikipedia.org/wiki/Punycode
|
24
|
+
# Encodes a unicode String into Punycode.
|
27
25
|
#
|
28
26
|
# @return [String]
|
29
27
|
# The punycode String.
|
@@ -32,6 +30,8 @@ class String
|
|
32
30
|
# "詹姆斯".punycode_encode
|
33
31
|
# # => "xn--8ws00zhy3a"
|
34
32
|
#
|
33
|
+
# @see https://en.wikipedia.org/wiki/Punycode
|
34
|
+
#
|
35
35
|
# @api public
|
36
36
|
#
|
37
37
|
# @since 1.0.0
|
@@ -41,9 +41,7 @@ class String
|
|
41
41
|
end
|
42
42
|
|
43
43
|
#
|
44
|
-
# Decodes a
|
45
|
-
#
|
46
|
-
# [punycode]: https://en.wikipedia.org/wiki/Punycode
|
44
|
+
# Decodes a Punycode String back into unicode.
|
47
45
|
#
|
48
46
|
# @return [String]
|
49
47
|
# The decoded unicode String.
|
@@ -52,6 +50,8 @@ class String
|
|
52
50
|
# "xn--8ws00zhy3a".punycode_decode
|
53
51
|
# # => "詹姆斯"
|
54
52
|
#
|
53
|
+
# @see https://en.wikipedia.org/wiki/Punycode
|
54
|
+
#
|
55
55
|
# @api public
|
56
56
|
#
|
57
57
|
# @since 1.0.0
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -22,24 +22,22 @@ module Ronin
|
|
22
22
|
module Support
|
23
23
|
class Encoding < ::Encoding
|
24
24
|
#
|
25
|
-
# Contains methods for encoding/decoding
|
26
|
-
#
|
27
|
-
# [punycode]: https://en.wikipedia.org/wiki/Punycode
|
25
|
+
# Contains methods for encoding/decoding Punycode encoded Strings.
|
28
26
|
#
|
29
27
|
# ## Core-Ext Methods
|
30
28
|
#
|
31
29
|
# * {String#punycode_encode}
|
32
30
|
# * {String#punycode_decode}
|
33
31
|
#
|
32
|
+
# @see https://en.wikipedia.org/wiki/Punycode
|
33
|
+
#
|
34
34
|
# @api public
|
35
35
|
#
|
36
36
|
# @since 1.0.0
|
37
37
|
#
|
38
38
|
module Punycode
|
39
39
|
#
|
40
|
-
# Encodes a unicode String into
|
41
|
-
#
|
42
|
-
# [punycode]: https://en.wikipedia.org/wiki/Punycode
|
40
|
+
# Encodes a unicode String into Punycode.
|
43
41
|
#
|
44
42
|
# @param [String] data
|
45
43
|
# The unicode String to encode.
|
@@ -51,14 +49,14 @@ module Ronin
|
|
51
49
|
# Encoding::Punycode.encode("詹姆斯")
|
52
50
|
# # => "xn--8ws00zhy3a"
|
53
51
|
#
|
52
|
+
# @see https://en.wikipedia.org/wiki/Punycode
|
53
|
+
#
|
54
54
|
def self.encode(data)
|
55
55
|
Addressable::IDNA.to_ascii(data)
|
56
56
|
end
|
57
57
|
|
58
58
|
#
|
59
|
-
# Decodes a
|
60
|
-
#
|
61
|
-
# [punycode]: https://en.wikipedia.org/wiki/Punycode
|
59
|
+
# Decodes a Punycode String back into unicode.
|
62
60
|
#
|
63
61
|
# @param [String] data
|
64
62
|
# The punycode String to decode.
|
@@ -70,6 +68,8 @@ module Ronin
|
|
70
68
|
# Encoding::Punycode.decode("xn--8ws00zhy3a")
|
71
69
|
# # => "詹姆斯"
|
72
70
|
#
|
71
|
+
# @see https://en.wikipedia.org/wiki/Punycode
|
72
|
+
#
|
73
73
|
def self.decode(data)
|
74
74
|
Addressable::IDNA.to_unicode(data)
|
75
75
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -21,9 +21,7 @@ require 'ronin/support/encoding/quoted_printable'
|
|
21
21
|
class String
|
22
22
|
|
23
23
|
#
|
24
|
-
# Escapes the String as
|
25
|
-
#
|
26
|
-
# [Quoted-Printable]: https://en.wikipedia.org/wiki/Quoted-printable
|
24
|
+
# Escapes the String as Quoted Printable.
|
27
25
|
#
|
28
26
|
# @return [String]
|
29
27
|
# The quoted-printable escaped String.
|
@@ -33,6 +31,7 @@ class String
|
|
33
31
|
# # => "<a href=3D\"https://example.com/\">link</a>=\n"
|
34
32
|
#
|
35
33
|
# @see Ronin::Support::Encoding::QuotedPrintable.escape
|
34
|
+
# @see https://en.wikipedia.org/wiki/Quoted-printable
|
36
35
|
#
|
37
36
|
# @api public
|
38
37
|
#
|
@@ -47,9 +46,7 @@ class String
|
|
47
46
|
alias qp_encode quoted_printable_escape
|
48
47
|
|
49
48
|
#
|
50
|
-
# Unescapes a
|
51
|
-
#
|
52
|
-
# [Quoted-Printable]: https://en.wikipedia.org/wiki/Quoted-printable
|
49
|
+
# Unescapes a Quoted Printable encoded String.
|
53
50
|
#
|
54
51
|
# @return [String]
|
55
52
|
# The unescaped String.
|
@@ -59,6 +56,7 @@ class String
|
|
59
56
|
# # => "<a href=\"https://example.com/\">link</a>"
|
60
57
|
#
|
61
58
|
# @see Ronin::Support::Encoding::QuotedPrintable.unescape
|
59
|
+
# @see https://en.wikipedia.org/wiki/Quoted-printable
|
62
60
|
#
|
63
61
|
# @api public
|
64
62
|
#
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -22,22 +22,20 @@ module Ronin
|
|
22
22
|
module Support
|
23
23
|
class Encoding < ::Encoding
|
24
24
|
#
|
25
|
-
# Contains methods for encoding/decoding
|
26
|
-
#
|
27
|
-
# [Quoted-Printable]: https://en.wikipedia.org/wiki/Quoted-printable
|
25
|
+
# Contains methods for encoding/decoding Quoted Printable data.
|
28
26
|
#
|
29
27
|
# ## Core-Ext Methods
|
30
28
|
#
|
31
29
|
# * {String#quoted_printable_escape}
|
32
30
|
# * {String#quoted_printable_unescape}
|
33
31
|
#
|
32
|
+
# @see https://en.wikipedia.org/wiki/Quoted-printable
|
33
|
+
#
|
34
34
|
# @api public
|
35
35
|
#
|
36
36
|
module QuotedPrintable
|
37
37
|
#
|
38
|
-
# Escapes the data as
|
39
|
-
#
|
40
|
-
# [Quoted-Printable]: https://en.wikipedia.org/wiki/Quoted-printable
|
38
|
+
# Escapes the data as Quoted Printable.
|
41
39
|
#
|
42
40
|
# @param [String] data
|
43
41
|
# The data to escape.
|
@@ -49,6 +47,8 @@ module Ronin
|
|
49
47
|
# Encoding::QuotedPrintable.escape('<a href="https://example.com/">link</a>')
|
50
48
|
# # => "<a href=3D\"https://example.com/\">link</a>=\n"
|
51
49
|
#
|
50
|
+
# @see https://en.wikipedia.org/wiki/Quoted-printable
|
51
|
+
#
|
52
52
|
def self.escape(data)
|
53
53
|
[data].pack('M')
|
54
54
|
end
|
@@ -69,9 +69,7 @@ module Ronin
|
|
69
69
|
end
|
70
70
|
|
71
71
|
#
|
72
|
-
# Unescapes a
|
73
|
-
#
|
74
|
-
# [Quoted-Printable]: https://en.wikipedia.org/wiki/Quoted-printable
|
72
|
+
# Unescapes a Quoted Printable encoded String.
|
75
73
|
#
|
76
74
|
# @param [String] data
|
77
75
|
# The Quoted-Printable String to unescape.
|
@@ -83,6 +81,8 @@ module Ronin
|
|
83
81
|
# Encoding::QuotedPrintable.unescape("<a href=3D\"https://example.com/\">link</a>=\n")
|
84
82
|
# # => "<a href=\"https://example.com/\">link</a>"
|
85
83
|
#
|
84
|
+
# @see https://en.wikipedia.org/wiki/Quoted-printable
|
85
|
+
#
|
86
86
|
def self.unescape(data)
|
87
87
|
data.unpack1('M')
|
88
88
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# Ronin Support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -87,7 +87,7 @@ class String
|
|
87
87
|
alias ruby_decode ruby_unescape
|
88
88
|
|
89
89
|
#
|
90
|
-
#
|
90
|
+
# Converts the String into a Ruby string.
|
91
91
|
#
|
92
92
|
# @return [String]
|
93
93
|
#
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2025 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-support is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -178,14 +178,17 @@ module Ronin
|
|
178
178
|
scanner = StringScanner.new(data)
|
179
179
|
|
180
180
|
until scanner.eos?
|
181
|
-
unescaped << if (unicode_escape
|
182
|
-
unicode_escape[
|
183
|
-
elsif (
|
184
|
-
|
185
|
-
elsif (hex_escape
|
181
|
+
unescaped << if (unicode_escape = scanner.scan(/\\u[0-9a-fA-F]{4}/))
|
182
|
+
unicode_escape[2..].to_i(16).chr(Encoding::UTF_8)
|
183
|
+
elsif (unicode_escape = scanner.scan(/\\u\{[0-9a-fA-F]{1,6}\}/))
|
184
|
+
unicode_escape[3..-2].to_i(16).chr(Encoding::UTF_8)
|
185
|
+
elsif (hex_escape = scanner.scan(/\\x[0-9a-fA-F]{1,2}/))
|
186
186
|
hex_escape[2..].to_i(16).chr
|
187
|
-
elsif (
|
188
|
-
|
187
|
+
elsif (octal_escape = scanner.scan(/\\[0-7]{1,3}/))
|
188
|
+
octal_escape[1,3].to_i(8).chr
|
189
|
+
|
190
|
+
elsif (backslash_escape = scanner.scan(/\\./))
|
191
|
+
UNESCAPE_CHARS[backslash_escape]
|
189
192
|
else
|
190
193
|
scanner.getch
|
191
194
|
end
|
@@ -228,9 +231,9 @@ module Ronin
|
|
228
231
|
# # => "hello'world"
|
229
232
|
#
|
230
233
|
def self.unquote(data)
|
231
|
-
if (data
|
234
|
+
if (data.start_with?('"') && data.end_with?('"'))
|
232
235
|
unescape(data[1..-2])
|
233
|
-
elsif (data
|
236
|
+
elsif (data.start_with?("'") && data.end_with?("'"))
|
234
237
|
data[1..-2].gsub(/\\(['\\])/,'\1')
|
235
238
|
else
|
236
239
|
data
|