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,164 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/binary/ctypes/object_type'
|
|
20
|
+
require 'ronin/support/binary/ctypes/array_type'
|
|
21
|
+
|
|
22
|
+
module Ronin
|
|
23
|
+
module Support
|
|
24
|
+
module Binary
|
|
25
|
+
module CTypes
|
|
26
|
+
#
|
|
27
|
+
# Represents a {Binary::Array} in memory.
|
|
28
|
+
#
|
|
29
|
+
# @api private
|
|
30
|
+
#
|
|
31
|
+
# @since 1.0.0
|
|
32
|
+
#
|
|
33
|
+
class ArrayObjectType < ObjectType
|
|
34
|
+
|
|
35
|
+
# The type used for packing literal {::Array} values.
|
|
36
|
+
#
|
|
37
|
+
# @return [ArrayType]
|
|
38
|
+
attr_reader :array_type
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# Initializes the memory-mapped array type.
|
|
42
|
+
#
|
|
43
|
+
# @param [ArrayType] array_type
|
|
44
|
+
# The array type.
|
|
45
|
+
#
|
|
46
|
+
def initialize(array_type)
|
|
47
|
+
@array_type = array_type
|
|
48
|
+
|
|
49
|
+
super(@array_type.size)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
#
|
|
53
|
+
# The type of the element in the memory-mapped array type.
|
|
54
|
+
#
|
|
55
|
+
# @return [Type]
|
|
56
|
+
#
|
|
57
|
+
def type
|
|
58
|
+
@array_type.type
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
#
|
|
62
|
+
# The number of elements in the memory-mapped array type.
|
|
63
|
+
#
|
|
64
|
+
# @return [Integer]
|
|
65
|
+
#
|
|
66
|
+
def length
|
|
67
|
+
@array_type.length
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
#
|
|
71
|
+
# The alignment, in bytes, of the memory-mapped array type.
|
|
72
|
+
#
|
|
73
|
+
# @return [Integer]
|
|
74
|
+
#
|
|
75
|
+
def alignment
|
|
76
|
+
@array_type.alignment
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
#
|
|
80
|
+
# Creates a copy of the array object type with a different
|
|
81
|
+
# {#alignment}.
|
|
82
|
+
#
|
|
83
|
+
# @param [Integer] new_alignment
|
|
84
|
+
# The new alignment for the new array object type.
|
|
85
|
+
#
|
|
86
|
+
# @return [ArrayObjectType]
|
|
87
|
+
# The new array object type.
|
|
88
|
+
#
|
|
89
|
+
def align(new_alignment)
|
|
90
|
+
self.class.new(@array_type.align(new_alignment))
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#
|
|
94
|
+
# Packs the memory-mapped array.
|
|
95
|
+
#
|
|
96
|
+
# @param [Binary::Array, ::Array] array
|
|
97
|
+
# The memory-mapped array.
|
|
98
|
+
#
|
|
99
|
+
# @return [String]
|
|
100
|
+
# The underlying binary data for the memory object.
|
|
101
|
+
#
|
|
102
|
+
# @raise [ArgumentError]
|
|
103
|
+
# The given value was not a {Binary::Array} or {::Array}.
|
|
104
|
+
#
|
|
105
|
+
def pack(array)
|
|
106
|
+
case array
|
|
107
|
+
when Binary::Array
|
|
108
|
+
array.to_s
|
|
109
|
+
when ::Array
|
|
110
|
+
@array_type.pack(array)
|
|
111
|
+
else
|
|
112
|
+
raise(ArgumentError,"value must be either a #{Binary::Array} or an #{::Array}: #{array.inspect}")
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
#
|
|
117
|
+
# Unpacks the memory-mapped array.
|
|
118
|
+
#
|
|
119
|
+
# @param [String] data
|
|
120
|
+
# The raw binary data to unpack.
|
|
121
|
+
#
|
|
122
|
+
# @return [Binary::Array]
|
|
123
|
+
# the memory-mapped Array.
|
|
124
|
+
#
|
|
125
|
+
def unpack(data)
|
|
126
|
+
Binary::Array.new(@array_type.type,data)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
#
|
|
130
|
+
# Enqueues the memory-mapped array into the list of values.
|
|
131
|
+
#
|
|
132
|
+
# @param [Binary::Array, ::Array] values
|
|
133
|
+
# The flat array of values.
|
|
134
|
+
#
|
|
135
|
+
# @param [Binary::Array, ::Array] array
|
|
136
|
+
# The memory-mapped array object to enqueue.
|
|
137
|
+
#
|
|
138
|
+
def enqueue_value(values,array)
|
|
139
|
+
case array
|
|
140
|
+
when Binary::Array
|
|
141
|
+
values.push(array.to_s)
|
|
142
|
+
when ::Array
|
|
143
|
+
values.push(@array_type.pack(array))
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
#
|
|
148
|
+
# Dequeues a memory object from the flat list of values.
|
|
149
|
+
#
|
|
150
|
+
# @param [::Array] values
|
|
151
|
+
# The flat array of values.
|
|
152
|
+
#
|
|
153
|
+
# @return [Binary::Array]
|
|
154
|
+
# The dequeued memory-mapped array object.
|
|
155
|
+
#
|
|
156
|
+
def dequeue_value(values)
|
|
157
|
+
Binary::Array.new(@array_type.type,values.shift)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/binary/ctypes/aggregate_type'
|
|
20
|
+
require 'ronin/support/binary/ctypes/unbounded_array_type'
|
|
21
|
+
|
|
22
|
+
module Ronin
|
|
23
|
+
module Support
|
|
24
|
+
module Binary
|
|
25
|
+
module CTypes
|
|
26
|
+
#
|
|
27
|
+
# Represents a bounded array type.
|
|
28
|
+
#
|
|
29
|
+
# @api private
|
|
30
|
+
#
|
|
31
|
+
# @since 1.0.0
|
|
32
|
+
#
|
|
33
|
+
class ArrayType < AggregateType
|
|
34
|
+
|
|
35
|
+
# The type of each element in the array type.
|
|
36
|
+
#
|
|
37
|
+
# @return [Type]
|
|
38
|
+
attr_reader :type
|
|
39
|
+
|
|
40
|
+
# The length of the array type.
|
|
41
|
+
#
|
|
42
|
+
# @return [Integer]
|
|
43
|
+
attr_reader :length
|
|
44
|
+
|
|
45
|
+
# The size of the array type.
|
|
46
|
+
#
|
|
47
|
+
# @return [Integer]
|
|
48
|
+
attr_reader :size
|
|
49
|
+
|
|
50
|
+
#
|
|
51
|
+
# Initializes the array type.
|
|
52
|
+
#
|
|
53
|
+
# @param [Type] type
|
|
54
|
+
# The type of each element in the array type.
|
|
55
|
+
#
|
|
56
|
+
# @param [Integer] length
|
|
57
|
+
# The length of the array type.
|
|
58
|
+
#
|
|
59
|
+
# @param [Integer, nil] alignment
|
|
60
|
+
# Custom type alignment to override the type's alignment.
|
|
61
|
+
#
|
|
62
|
+
def initialize(type,length, alignment: nil)
|
|
63
|
+
if type.class == UnboundedArrayType
|
|
64
|
+
raise(ArgumentError,"cannot initialize an #{self.class} of #{UnboundedArrayType}")
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
@type = type
|
|
68
|
+
@length = length
|
|
69
|
+
|
|
70
|
+
@size = @type.size * @length
|
|
71
|
+
@alignment = alignment
|
|
72
|
+
|
|
73
|
+
super(
|
|
74
|
+
pack_string: if @type.pack_string
|
|
75
|
+
@type.pack_string * @length
|
|
76
|
+
end
|
|
77
|
+
)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
#
|
|
81
|
+
# Initializes an Array of uninitialized values.
|
|
82
|
+
#
|
|
83
|
+
# @return [::Array]
|
|
84
|
+
#
|
|
85
|
+
def uninitialized_value
|
|
86
|
+
::Array.new(@length) { @type.uninitialized_value }
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
#
|
|
90
|
+
# The endianness of each element in the bounded array type.
|
|
91
|
+
#
|
|
92
|
+
# @return [:little, :big, nil]
|
|
93
|
+
# Indicates whether each element is little-endian, big-endian,
|
|
94
|
+
# or `nil` if each element has no endianness.
|
|
95
|
+
#
|
|
96
|
+
def endian
|
|
97
|
+
@type.endian
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
#
|
|
101
|
+
# The alignment, in bytes, for the array type.
|
|
102
|
+
#
|
|
103
|
+
# @return [Integer]
|
|
104
|
+
#
|
|
105
|
+
def alignment
|
|
106
|
+
@alignment || @type.alignment
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
#
|
|
110
|
+
# Creates a copy of the array type with a different {#alignment}.
|
|
111
|
+
#
|
|
112
|
+
# @param [Integer] new_alignment
|
|
113
|
+
# The new alignment for the new array type.
|
|
114
|
+
#
|
|
115
|
+
# @return [ScalarType]
|
|
116
|
+
# The new array type.
|
|
117
|
+
#
|
|
118
|
+
def align(new_alignment)
|
|
119
|
+
self.class.new(@type,@length, alignment: new_alignment)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
#
|
|
123
|
+
# Indicates whether each element is signed.
|
|
124
|
+
#
|
|
125
|
+
# @return [Boolean]
|
|
126
|
+
#
|
|
127
|
+
def signed?
|
|
128
|
+
@type.signed?
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
#
|
|
132
|
+
# Indicates whether each element is unsigned.
|
|
133
|
+
#
|
|
134
|
+
# @return [Boolean]
|
|
135
|
+
#
|
|
136
|
+
def unsigned?
|
|
137
|
+
@type.unsigned?
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
#
|
|
141
|
+
# Packs an array of values into the type's binary format.
|
|
142
|
+
#
|
|
143
|
+
# @param [::Array<Integer, Float, String>] array
|
|
144
|
+
# The array to pack.
|
|
145
|
+
#
|
|
146
|
+
# @return [String]
|
|
147
|
+
# The packed binary data.
|
|
148
|
+
#
|
|
149
|
+
# @api public
|
|
150
|
+
#
|
|
151
|
+
def pack(array)
|
|
152
|
+
if @pack_string
|
|
153
|
+
super(array)
|
|
154
|
+
else
|
|
155
|
+
buffer = String.new("", encoding: Encoding::ASCII_8BIT)
|
|
156
|
+
|
|
157
|
+
@length.times do |index|
|
|
158
|
+
value = array[index] || @type.uninitialized_value
|
|
159
|
+
|
|
160
|
+
buffer << @type.pack(value)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
return buffer
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
#
|
|
168
|
+
# Unpacks an array of binary data.
|
|
169
|
+
#
|
|
170
|
+
# @param [String] data
|
|
171
|
+
# The binary data to unpack.
|
|
172
|
+
#
|
|
173
|
+
# @return [::Array<Integer, Float, String, nil>]
|
|
174
|
+
# The unpacked array.
|
|
175
|
+
#
|
|
176
|
+
# @api public
|
|
177
|
+
#
|
|
178
|
+
def unpack(data)
|
|
179
|
+
if @pack_string
|
|
180
|
+
super(data)
|
|
181
|
+
else
|
|
182
|
+
type_size = @type.size
|
|
183
|
+
|
|
184
|
+
::Array.new(@length) do |index|
|
|
185
|
+
offset = index * type_size
|
|
186
|
+
|
|
187
|
+
@type.unpack(data.byteslice(offset,type_size))
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
#
|
|
193
|
+
# Enqueues an array of values onto the flat list of values.
|
|
194
|
+
#
|
|
195
|
+
# @param [::Array] values
|
|
196
|
+
# The flat array of values.
|
|
197
|
+
#
|
|
198
|
+
# @param [::Array] array
|
|
199
|
+
# The array to enqueue.
|
|
200
|
+
#
|
|
201
|
+
# @api private
|
|
202
|
+
#
|
|
203
|
+
def enqueue_value(values,array)
|
|
204
|
+
@length.times do |index|
|
|
205
|
+
value = array[index] || @type.uninitialized_value
|
|
206
|
+
|
|
207
|
+
@type.enqueue_value(values,value)
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
#
|
|
212
|
+
# Dequeues an array from the flat list of values.
|
|
213
|
+
#
|
|
214
|
+
# @param [::Array] values
|
|
215
|
+
# The flat array of values.
|
|
216
|
+
#
|
|
217
|
+
# @return [::Array]
|
|
218
|
+
# The dequeued array.
|
|
219
|
+
#
|
|
220
|
+
# @api private
|
|
221
|
+
#
|
|
222
|
+
def dequeue_value(values)
|
|
223
|
+
::Array.new(@length) do
|
|
224
|
+
@type.dequeue_value(values)
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
end
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/binary/ctypes/int8_type'
|
|
20
|
+
require 'ronin/support/binary/ctypes/int16_type'
|
|
21
|
+
require 'ronin/support/binary/ctypes/int32_type'
|
|
22
|
+
require 'ronin/support/binary/ctypes/int64_type'
|
|
23
|
+
require 'ronin/support/binary/ctypes/uint8_type'
|
|
24
|
+
require 'ronin/support/binary/ctypes/uint16_type'
|
|
25
|
+
require 'ronin/support/binary/ctypes/uint32_type'
|
|
26
|
+
require 'ronin/support/binary/ctypes/uint64_type'
|
|
27
|
+
require 'ronin/support/binary/ctypes/float32_type'
|
|
28
|
+
require 'ronin/support/binary/ctypes/float64_type'
|
|
29
|
+
require 'ronin/support/binary/ctypes/char_types'
|
|
30
|
+
require 'ronin/support/binary/ctypes/native'
|
|
31
|
+
|
|
32
|
+
module Ronin
|
|
33
|
+
module Support
|
|
34
|
+
module Binary
|
|
35
|
+
module CTypes
|
|
36
|
+
module BigEndian
|
|
37
|
+
include CharTypes
|
|
38
|
+
|
|
39
|
+
# The size of a native pointer in bytes.
|
|
40
|
+
#
|
|
41
|
+
# @return [4, 8]
|
|
42
|
+
ADDRESS_SIZE = Native::ADDRESS_SIZE
|
|
43
|
+
|
|
44
|
+
# The `int8_t` type.
|
|
45
|
+
INT8 = Int8Type.new
|
|
46
|
+
|
|
47
|
+
# The `int16_t` type (big-endianness).
|
|
48
|
+
INT16 = Int16Type.new(endian: :big, pack_string: 's>')
|
|
49
|
+
|
|
50
|
+
# The `int32_t` type (big-endianness).
|
|
51
|
+
INT32 = Int32Type.new(endian: :big, pack_string: 'l>')
|
|
52
|
+
|
|
53
|
+
# The `int64_t` type (big-endianness).
|
|
54
|
+
INT64 = Int64Type.new(endian: :big, pack_string: 'q>')
|
|
55
|
+
|
|
56
|
+
# The `short` type.
|
|
57
|
+
SHORT = INT16
|
|
58
|
+
|
|
59
|
+
# The `int` type.
|
|
60
|
+
INT = INT32
|
|
61
|
+
|
|
62
|
+
# The `long` type.
|
|
63
|
+
LONG = if ADDRESS_SIZE == 8 then INT64
|
|
64
|
+
else INT32
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# The `long long` type.
|
|
68
|
+
LONG_LONG = INT64
|
|
69
|
+
|
|
70
|
+
# The `uint8_t` type.
|
|
71
|
+
UINT8 = UInt8Type.new
|
|
72
|
+
|
|
73
|
+
# The `uint16_t` type (big-endianness).
|
|
74
|
+
UINT16 = UInt16Type.new(endian: :big, pack_string: 'S>')
|
|
75
|
+
|
|
76
|
+
# The `uint32_t` type (big-endianness).
|
|
77
|
+
UINT32 = UInt32Type.new(endian: :big, pack_string: 'L>')
|
|
78
|
+
|
|
79
|
+
# The `uint64_t` type (big-endianness).
|
|
80
|
+
UINT64 = UInt64Type.new(endian: :big, pack_string: 'Q>')
|
|
81
|
+
|
|
82
|
+
# The `byte` type.
|
|
83
|
+
BYTE = UINT8
|
|
84
|
+
|
|
85
|
+
# The `unsigned short` type.
|
|
86
|
+
USHORT = UINT16
|
|
87
|
+
|
|
88
|
+
# The `unsigned int` type.
|
|
89
|
+
UINT = UINT32
|
|
90
|
+
|
|
91
|
+
# The `unsigned long` type.
|
|
92
|
+
ULONG = if ADDRESS_SIZE == 8 then UINT64
|
|
93
|
+
else UINT32
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# The `unsigned long long` type.
|
|
97
|
+
ULONG_LONG = UINT64
|
|
98
|
+
|
|
99
|
+
# The "word" type (16-bit big-endian unsigned integer).
|
|
100
|
+
WORD = UINT16
|
|
101
|
+
|
|
102
|
+
# The "dword" type (32-bit big-endian unsigned integer).
|
|
103
|
+
DWORD = UINT32
|
|
104
|
+
|
|
105
|
+
# The "qword" type (64-bit big-endian unsigned integer).
|
|
106
|
+
QWORD = UINT64
|
|
107
|
+
|
|
108
|
+
# The "machine word" type.
|
|
109
|
+
#
|
|
110
|
+
# @return [UINT64, UINT32]
|
|
111
|
+
# {UINT64} on 64-bit systems and {UINT32} on 32-bit systems.
|
|
112
|
+
MACHINE_WORD = if ADDRESS_SIZE == 8 then UINT64
|
|
113
|
+
else UINT32
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# The `void *` type.
|
|
117
|
+
POINTER = MACHINE_WORD
|
|
118
|
+
|
|
119
|
+
# The `float` type (big-endianness).
|
|
120
|
+
FLOAT32 = Float32Type.new(endian: :big, pack_string: 'g')
|
|
121
|
+
|
|
122
|
+
# The `float` type (big-endianness).
|
|
123
|
+
FLOAT = FLOAT32
|
|
124
|
+
|
|
125
|
+
# The `double` type (big-endianness).
|
|
126
|
+
FLOAT64 = Float64Type.new(endian: :big, pack_string: 'G')
|
|
127
|
+
|
|
128
|
+
# The `double` type (big-endianness).
|
|
129
|
+
DOUBLE = FLOAT64
|
|
130
|
+
|
|
131
|
+
# The big-endian types.
|
|
132
|
+
TYPES = {
|
|
133
|
+
int8: INT8,
|
|
134
|
+
int16: INT16,
|
|
135
|
+
int32: INT32,
|
|
136
|
+
int64: INT64,
|
|
137
|
+
|
|
138
|
+
short: SHORT,
|
|
139
|
+
int: INT,
|
|
140
|
+
long: LONG,
|
|
141
|
+
long_long: LONG_LONG,
|
|
142
|
+
|
|
143
|
+
uint8: UINT8,
|
|
144
|
+
uint16: UINT16,
|
|
145
|
+
uint32: UINT32,
|
|
146
|
+
uint64: UINT64,
|
|
147
|
+
|
|
148
|
+
byte: BYTE,
|
|
149
|
+
ushort: USHORT,
|
|
150
|
+
uint: UINT,
|
|
151
|
+
ulong: ULONG,
|
|
152
|
+
ulong_long: ULONG_LONG,
|
|
153
|
+
|
|
154
|
+
word: WORD,
|
|
155
|
+
dword: DWORD,
|
|
156
|
+
qword: QWORD,
|
|
157
|
+
|
|
158
|
+
machine_word: MACHINE_WORD,
|
|
159
|
+
pointer: MACHINE_WORD,
|
|
160
|
+
|
|
161
|
+
float32: FLOAT32,
|
|
162
|
+
float64: FLOAT64,
|
|
163
|
+
|
|
164
|
+
float: FLOAT,
|
|
165
|
+
double: DOUBLE,
|
|
166
|
+
|
|
167
|
+
char: CHAR,
|
|
168
|
+
uchar: UCHAR,
|
|
169
|
+
|
|
170
|
+
cstring: STRING,
|
|
171
|
+
string: STRING
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
#
|
|
175
|
+
# Fetches the type from {TYPES}.
|
|
176
|
+
#
|
|
177
|
+
# @param [Symbol] name
|
|
178
|
+
# The type name to lookup.
|
|
179
|
+
#
|
|
180
|
+
# @return [Type]
|
|
181
|
+
# The type object from {TYPES}.
|
|
182
|
+
#
|
|
183
|
+
# @raise [ArgumentError]
|
|
184
|
+
# The type name was unknown.
|
|
185
|
+
#
|
|
186
|
+
def self.[](name)
|
|
187
|
+
TYPES.fetch(name) do
|
|
188
|
+
raise(ArgumentError,"unknown type: #{name.inspect}")
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/binary/ctypes/scalar_type'
|
|
20
|
+
|
|
21
|
+
module Ronin
|
|
22
|
+
module Support
|
|
23
|
+
module Binary
|
|
24
|
+
module CTypes
|
|
25
|
+
#
|
|
26
|
+
# Base class for all character types.
|
|
27
|
+
#
|
|
28
|
+
class CharType < ScalarType
|
|
29
|
+
|
|
30
|
+
#
|
|
31
|
+
# Initializes the character type.
|
|
32
|
+
#
|
|
33
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
34
|
+
# Additional keyword arguments for {Type#initialize}.
|
|
35
|
+
#
|
|
36
|
+
# @option kwargs [Boolean] :signed
|
|
37
|
+
# Indicates whether the character type is signed or unsigned.
|
|
38
|
+
#
|
|
39
|
+
# @option kwargs [String] :pack_string
|
|
40
|
+
# The String for `Array#pack` or `String#unpack`.
|
|
41
|
+
#
|
|
42
|
+
def initialize(**kwargs)
|
|
43
|
+
super(size: 1, endian: nil, **kwargs)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
#
|
|
47
|
+
# The default uniniitalized char value.
|
|
48
|
+
#
|
|
49
|
+
# @return ['']
|
|
50
|
+
#
|
|
51
|
+
def uninitialized_value
|
|
52
|
+
''
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/binary/ctypes/char_type'
|
|
20
|
+
require 'ronin/support/binary/ctypes/string_type'
|
|
21
|
+
|
|
22
|
+
module Ronin
|
|
23
|
+
module Support
|
|
24
|
+
module Binary
|
|
25
|
+
module CTypes
|
|
26
|
+
module CharTypes
|
|
27
|
+
# The `char` type.
|
|
28
|
+
CHAR = CharType.new(signed: true, pack_string: 'Z')
|
|
29
|
+
|
|
30
|
+
# The `unsigned char` type.
|
|
31
|
+
UCHAR = CharType.new(signed: false, pack_string: 'a')
|
|
32
|
+
|
|
33
|
+
# The null-terminated C string type.
|
|
34
|
+
STRING = StringType.new
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|