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.
Files changed (517) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +11 -0
  3. data/.github/workflows/ruby.yml +27 -0
  4. data/.gitignore +7 -6
  5. data/.mailmap +1 -0
  6. data/.ruby-version +1 -0
  7. data/.yardopts +1 -2
  8. data/ChangeLog.md +533 -137
  9. data/Gemfile +20 -20
  10. data/README.md +137 -61
  11. data/Rakefile +29 -10
  12. data/data/text/homoglyphs/ascii.txt +8 -0
  13. data/data/text/homoglyphs/cyrillic.txt +33 -0
  14. data/data/text/homoglyphs/full_width.txt +81 -0
  15. data/data/text/homoglyphs/greek.txt +21 -0
  16. data/data/text/homoglyphs/latin_numbers.txt +14 -0
  17. data/data/text/homoglyphs/punctuation.txt +7 -0
  18. data/data/text/patterns/network/public_suffix.rb.erb +44 -0
  19. data/examples/ssl_proxy.rb +38 -0
  20. data/examples/tcp_proxy.rb +41 -0
  21. data/gemspec.yml +25 -15
  22. data/lib/ronin/support/archive/core_ext/file.rb +118 -0
  23. data/lib/ronin/{formatting/sql.rb → support/archive/core_ext.rb} +6 -7
  24. data/lib/ronin/support/archive/mixin.rb +213 -0
  25. data/lib/ronin/support/archive/tar/reader.rb +135 -0
  26. data/lib/ronin/support/archive/tar/writer.rb +197 -0
  27. data/lib/ronin/support/archive/tar.rb +155 -0
  28. data/lib/ronin/support/archive/zip/reader/entry.rb +134 -0
  29. data/lib/ronin/support/archive/zip/reader/statistics.rb +76 -0
  30. data/lib/ronin/support/archive/zip/reader.rb +273 -0
  31. data/lib/ronin/support/archive/zip/writer.rb +175 -0
  32. data/lib/ronin/support/archive/zip.rb +105 -0
  33. data/lib/ronin/support/archive.rb +211 -0
  34. data/lib/ronin/support/binary/array.rb +255 -0
  35. data/lib/ronin/support/binary/bit_flip.rb +147 -0
  36. data/lib/ronin/support/binary/buffer.rb +2027 -0
  37. data/lib/ronin/support/binary/byte_slice.rb +324 -0
  38. data/lib/ronin/support/binary/core_ext/array.rb +75 -0
  39. data/lib/ronin/support/binary/core_ext/float.rb +80 -0
  40. data/lib/ronin/support/binary/core_ext/integer.rb +305 -0
  41. data/lib/ronin/support/binary/core_ext/io.rb +38 -0
  42. data/lib/ronin/support/binary/core_ext/string.rb +115 -0
  43. data/lib/ronin/{formatting/extensions/text.rb → support/binary/core_ext.rb} +9 -9
  44. data/lib/ronin/support/binary/cstring.rb +259 -0
  45. data/lib/ronin/support/binary/ctypes/aggregate_type.rb +98 -0
  46. data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +77 -0
  47. data/lib/ronin/support/binary/ctypes/arch/arm.rb +75 -0
  48. data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +77 -0
  49. data/lib/ronin/support/binary/ctypes/arch/arm64.rb +75 -0
  50. data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +77 -0
  51. data/lib/ronin/support/binary/ctypes/arch/mips.rb +75 -0
  52. data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +77 -0
  53. data/lib/ronin/support/binary/ctypes/arch/mips64.rb +75 -0
  54. data/lib/ronin/support/binary/ctypes/arch/ppc.rb +75 -0
  55. data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +75 -0
  56. data/lib/ronin/support/binary/ctypes/arch/x86.rb +75 -0
  57. data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +75 -0
  58. data/lib/ronin/support/binary/ctypes/arch.rb +30 -0
  59. data/lib/ronin/support/binary/ctypes/array_object_type.rb +164 -0
  60. data/lib/ronin/support/binary/ctypes/array_type.rb +232 -0
  61. data/lib/ronin/support/binary/ctypes/big_endian.rb +195 -0
  62. data/lib/ronin/support/binary/ctypes/char_type.rb +59 -0
  63. data/lib/ronin/support/binary/ctypes/char_types.rb +39 -0
  64. data/lib/ronin/support/binary/ctypes/enum_type.rb +181 -0
  65. data/lib/ronin/support/binary/ctypes/float32_type.rb +50 -0
  66. data/lib/ronin/support/binary/ctypes/float64_type.rb +50 -0
  67. data/lib/ronin/support/binary/ctypes/float_type.rb +62 -0
  68. data/lib/ronin/support/binary/ctypes/int16_type.rb +50 -0
  69. data/lib/ronin/support/binary/ctypes/int32_type.rb +50 -0
  70. data/lib/ronin/support/binary/ctypes/int64_type.rb +50 -0
  71. data/lib/ronin/support/binary/ctypes/int8_type.rb +41 -0
  72. data/lib/ronin/support/binary/ctypes/int_type.rb +62 -0
  73. data/lib/ronin/support/binary/ctypes/little_endian.rb +195 -0
  74. data/lib/ronin/support/binary/ctypes/mixin.rb +135 -0
  75. data/lib/ronin/support/binary/ctypes/native.rb +205 -0
  76. data/lib/ronin/support/binary/ctypes/network.rb +29 -0
  77. data/lib/ronin/support/binary/ctypes/object_type.rb +55 -0
  78. data/lib/ronin/support/binary/ctypes/os/bsd.rb +65 -0
  79. data/lib/ronin/support/binary/ctypes/os/freebsd.rb +215 -0
  80. data/lib/ronin/support/binary/ctypes/os/linux.rb +193 -0
  81. data/lib/ronin/support/binary/ctypes/os/macos.rb +151 -0
  82. data/lib/ronin/support/binary/ctypes/os/netbsd.rb +147 -0
  83. data/lib/ronin/support/binary/ctypes/os/openbsd.rb +168 -0
  84. data/lib/ronin/support/binary/ctypes/os/unix.rb +78 -0
  85. data/lib/ronin/support/binary/ctypes/os/windows.rb +125 -0
  86. data/lib/ronin/support/binary/ctypes/os.rb +125 -0
  87. data/lib/ronin/support/binary/ctypes/scalar_type.rb +200 -0
  88. data/lib/ronin/support/binary/ctypes/string_type.rb +143 -0
  89. data/lib/ronin/support/binary/ctypes/struct_object_type.rb +173 -0
  90. data/lib/ronin/support/binary/ctypes/struct_type.rb +359 -0
  91. data/lib/ronin/support/binary/ctypes/type.rb +193 -0
  92. data/lib/ronin/support/binary/ctypes/type_resolver.rb +206 -0
  93. data/lib/ronin/support/binary/ctypes/uint16_type.rb +50 -0
  94. data/lib/ronin/support/binary/ctypes/uint32_type.rb +50 -0
  95. data/lib/ronin/support/binary/ctypes/uint64_type.rb +50 -0
  96. data/lib/ronin/support/binary/ctypes/uint8_type.rb +41 -0
  97. data/lib/ronin/support/binary/ctypes/uint_type.rb +59 -0
  98. data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +258 -0
  99. data/lib/ronin/support/binary/ctypes/union_object_type.rb +173 -0
  100. data/lib/ronin/support/binary/ctypes/union_type.rb +261 -0
  101. data/lib/ronin/support/binary/ctypes.rb +462 -0
  102. data/lib/ronin/support/binary/hexdump/core_ext/file.rb +118 -0
  103. data/lib/ronin/support/binary/hexdump/core_ext/string.rb +115 -0
  104. data/lib/ronin/support/binary/hexdump/core_ext.rb +20 -0
  105. data/lib/ronin/support/binary/hexdump/parser.rb +492 -0
  106. data/lib/ronin/support/binary/hexdump.rb +20 -0
  107. data/lib/ronin/support/binary/memory.rb +268 -0
  108. data/lib/ronin/support/binary/packet.rb +33 -0
  109. data/lib/ronin/support/binary/stack.rb +256 -0
  110. data/lib/ronin/support/binary/stream/methods.rb +1755 -0
  111. data/lib/ronin/support/binary/stream.rb +151 -0
  112. data/lib/ronin/support/binary/struct/member.rb +86 -0
  113. data/lib/ronin/support/binary/struct.rb +830 -0
  114. data/lib/ronin/support/binary/template.rb +284 -0
  115. data/lib/ronin/support/binary/union.rb +162 -0
  116. data/lib/ronin/support/binary.rb +26 -0
  117. data/lib/ronin/support/cli/ansi.rb +330 -0
  118. data/lib/ronin/support/cli/io_shell/core_ext/io.rb +67 -0
  119. data/lib/ronin/{fuzzing/extensions.rb → support/cli/io_shell/core_ext.rb} +6 -7
  120. data/lib/ronin/support/cli/io_shell.rb +161 -0
  121. data/lib/ronin/support/cli/printing.rb +216 -0
  122. data/lib/ronin/support/cli.rb +20 -0
  123. data/lib/ronin/support/compression/core_ext/file.rb +70 -0
  124. data/lib/ronin/support/compression/core_ext/string.rb +101 -0
  125. data/lib/ronin/{formatting/html.rb → support/compression/core_ext.rb} +6 -7
  126. data/lib/ronin/support/compression/gzip/reader.rb +70 -0
  127. data/lib/ronin/support/compression/gzip/writer.rb +74 -0
  128. data/lib/ronin/support/compression/gzip.rb +105 -0
  129. data/lib/ronin/support/compression/mixin.rb +180 -0
  130. data/lib/ronin/{network/extensions/esmtp/net.rb → support/compression/zlib.rb} +9 -10
  131. data/lib/ronin/support/compression.rb +174 -0
  132. data/lib/ronin/{extensions → support/core_ext}/enumerable.rb +5 -6
  133. data/lib/ronin/{extensions → support/core_ext}/file.rb +11 -34
  134. data/lib/ronin/support/core_ext/integer.rb +37 -0
  135. data/lib/ronin/support/core_ext/ipaddr.rb +65 -0
  136. data/lib/ronin/{extensions → support/core_ext}/kernel.rb +10 -9
  137. data/lib/ronin/{extensions → support/core_ext}/resolv.rb +5 -28
  138. data/lib/ronin/{extensions → support/core_ext}/string.rb +117 -57
  139. data/lib/ronin/support/core_ext.rb +33 -0
  140. data/lib/ronin/support/crypto/cert.rb +522 -0
  141. data/lib/ronin/support/crypto/cert_chain.rb +204 -0
  142. data/lib/ronin/support/crypto/cipher/aes.rb +71 -0
  143. data/lib/ronin/support/crypto/cipher/aes128.rb +54 -0
  144. data/lib/ronin/support/crypto/cipher/aes256.rb +54 -0
  145. data/lib/ronin/support/crypto/cipher.rb +194 -0
  146. data/lib/ronin/support/crypto/core_ext/file.rb +660 -0
  147. data/lib/ronin/support/crypto/core_ext/string.rb +548 -0
  148. data/lib/ronin/{binary.rb → support/crypto/core_ext.rb} +7 -8
  149. data/lib/ronin/support/crypto/hmac.rb +48 -0
  150. data/lib/ronin/support/crypto/key/dh.rb +122 -0
  151. data/lib/ronin/support/crypto/key/dsa.rb +103 -0
  152. data/lib/ronin/support/crypto/key/ec.rb +99 -0
  153. data/lib/ronin/support/crypto/key/methods.rb +163 -0
  154. data/lib/ronin/support/crypto/key/rsa.rb +169 -0
  155. data/lib/ronin/support/crypto/key.rb +105 -0
  156. data/lib/ronin/support/crypto/mixin.rb +620 -0
  157. data/lib/ronin/{network/extensions/http/net.rb → support/crypto/openssl.rb} +9 -10
  158. data/lib/ronin/support/crypto.rb +779 -0
  159. data/lib/ronin/support/encoding/base16/core_ext/string.rb +63 -0
  160. data/lib/ronin/support/encoding/base16/core_ext.rb +19 -0
  161. data/lib/ronin/support/encoding/base16.rb +82 -0
  162. data/lib/ronin/support/encoding/base32/core_ext/string.rb +63 -0
  163. data/lib/ronin/support/encoding/base32/core_ext.rb +19 -0
  164. data/lib/ronin/support/encoding/base32.rb +164 -0
  165. data/lib/ronin/support/encoding/base64/core_ext/string.rb +76 -0
  166. data/lib/ronin/support/encoding/base64/core_ext.rb +19 -0
  167. data/lib/ronin/support/encoding/base64.rb +78 -0
  168. data/lib/ronin/support/encoding/c/core_ext/integer.rb +82 -0
  169. data/lib/ronin/support/encoding/c/core_ext/string.rb +125 -0
  170. data/lib/ronin/support/encoding/c/core_ext.rb +20 -0
  171. data/lib/ronin/support/encoding/c.rb +277 -0
  172. data/lib/ronin/support/encoding/core_ext/string.rb +107 -0
  173. data/lib/ronin/support/encoding/core_ext.rb +33 -0
  174. data/lib/ronin/support/encoding/hex/core_ext/integer.rb +82 -0
  175. data/lib/ronin/support/encoding/hex/core_ext/string.rb +133 -0
  176. data/lib/ronin/support/encoding/hex/core_ext.rb +22 -0
  177. data/lib/ronin/support/encoding/hex.rb +248 -0
  178. data/lib/ronin/support/encoding/html/core_ext/integer.rb +106 -0
  179. data/lib/ronin/support/encoding/html/core_ext/string.rb +130 -0
  180. data/lib/ronin/support/encoding/html/core_ext.rb +20 -0
  181. data/lib/ronin/support/encoding/html.rb +233 -0
  182. data/lib/ronin/support/encoding/http/core_ext/integer.rb +95 -0
  183. data/lib/ronin/support/encoding/http/core_ext/string.rb +129 -0
  184. data/lib/ronin/support/encoding/http/core_ext.rb +20 -0
  185. data/lib/ronin/support/encoding/http.rb +241 -0
  186. data/lib/ronin/support/encoding/js/core_ext/integer.rb +67 -0
  187. data/lib/ronin/support/encoding/js/core_ext/string.rb +125 -0
  188. data/lib/ronin/support/encoding/js/core_ext.rb +20 -0
  189. data/lib/ronin/support/encoding/js.rb +279 -0
  190. data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +87 -0
  191. data/lib/ronin/support/encoding/powershell/core_ext/string.rb +145 -0
  192. data/lib/ronin/support/encoding/powershell/core_ext.rb +20 -0
  193. data/lib/ronin/support/encoding/powershell.rb +297 -0
  194. data/lib/ronin/support/encoding/punycode/core_ext/string.rb +63 -0
  195. data/lib/ronin/support/encoding/punycode/core_ext.rb +19 -0
  196. data/lib/ronin/support/encoding/punycode.rb +76 -0
  197. data/lib/ronin/support/encoding/quoted_printable/core_ext/string.rb +75 -0
  198. data/lib/ronin/support/encoding/quoted_printable/core_ext.rb +19 -0
  199. data/lib/ronin/support/encoding/quoted_printable.rb +102 -0
  200. data/lib/ronin/support/encoding/ruby/core_ext/string.rb +129 -0
  201. data/lib/ronin/{formatting/binary.rb → support/encoding/ruby/core_ext.rb} +6 -7
  202. data/lib/ronin/support/encoding/ruby.rb +235 -0
  203. data/lib/ronin/support/encoding/shell/core_ext/integer.rb +89 -0
  204. data/lib/ronin/support/encoding/shell/core_ext/string.rb +134 -0
  205. data/lib/ronin/support/encoding/shell/core_ext.rb +20 -0
  206. data/lib/ronin/support/encoding/shell.rb +293 -0
  207. data/lib/ronin/{network/extensions → support/encoding}/smtp.rb +7 -7
  208. data/lib/ronin/support/encoding/sql/core_ext/string.rb +114 -0
  209. data/lib/ronin/{formatting/http.rb → support/encoding/sql/core_ext.rb} +6 -7
  210. data/lib/ronin/support/encoding/sql.rb +124 -0
  211. data/lib/ronin/support/encoding/uri/core_ext/integer.rb +149 -0
  212. data/lib/ronin/support/encoding/uri/core_ext/string.rb +195 -0
  213. data/lib/ronin/support/encoding/uri/core_ext.rb +20 -0
  214. data/lib/ronin/support/encoding/uri.rb +424 -0
  215. data/lib/ronin/support/encoding/uuencoding/core_ext/string.rb +73 -0
  216. data/lib/ronin/support/encoding/uuencoding/core_ext.rb +19 -0
  217. data/lib/ronin/support/encoding/uuencoding.rb +70 -0
  218. data/lib/ronin/support/encoding/xml/core_ext/integer.rb +100 -0
  219. data/lib/ronin/support/encoding/xml/core_ext/string.rb +124 -0
  220. data/lib/ronin/support/encoding/xml/core_ext.rb +20 -0
  221. data/lib/ronin/support/encoding/xml.rb +328 -0
  222. data/lib/ronin/support/encoding.rb +46 -0
  223. data/lib/ronin/support/home.rb +88 -0
  224. data/lib/ronin/support/mixin.rb +42 -0
  225. data/lib/ronin/support/network/asn/dns_record.rb +112 -0
  226. data/lib/ronin/support/network/asn/list.rb +269 -0
  227. data/lib/ronin/support/network/asn/record.rb +164 -0
  228. data/lib/ronin/support/network/asn/record_set.rb +226 -0
  229. data/lib/ronin/support/network/asn.rb +88 -0
  230. data/lib/ronin/{binary/hexdump.rb → support/network/core_ext.rb} +6 -7
  231. data/lib/ronin/support/network/dns/idn.rb +38 -0
  232. data/lib/ronin/support/network/dns/mixin.rb +941 -0
  233. data/lib/ronin/support/network/dns/resolver.rb +707 -0
  234. data/lib/ronin/support/network/dns.rb +1109 -0
  235. data/lib/ronin/support/network/domain.rb +70 -0
  236. data/lib/ronin/support/network/email_address.rb +574 -0
  237. data/lib/ronin/support/network/esmtp/mixin.rb +115 -0
  238. data/lib/ronin/support/network/exceptions.rb +43 -0
  239. data/lib/ronin/support/network/ftp/mixin.rb +106 -0
  240. data/lib/ronin/support/network/host.rb +1473 -0
  241. data/lib/ronin/support/network/http/cookie.rb +245 -0
  242. data/lib/ronin/support/network/http/core_ext/uri/http.rb +63 -0
  243. data/lib/ronin/support/network/http/core_ext.rb +19 -0
  244. data/lib/ronin/support/network/http/mixin.rb +890 -0
  245. data/lib/ronin/support/network/http/request.rb +215 -0
  246. data/lib/ronin/support/network/http/set_cookie.rb +210 -0
  247. data/lib/ronin/support/network/http/user_agents.rb +115 -0
  248. data/lib/ronin/support/network/http.rb +2582 -0
  249. data/lib/ronin/support/network/imap/mixin.rb +133 -0
  250. data/lib/ronin/support/network/ip/mixin.rb +114 -0
  251. data/lib/ronin/support/network/ip.rb +540 -0
  252. data/lib/ronin/support/network/ip_range/cidr.rb +252 -0
  253. data/lib/ronin/support/network/ip_range/glob.rb +309 -0
  254. data/lib/ronin/support/network/ip_range/range.rb +249 -0
  255. data/lib/ronin/support/network/ip_range.rb +284 -0
  256. data/lib/ronin/support/network/mixin.rb +58 -0
  257. data/lib/ronin/support/network/packet.rb +27 -0
  258. data/lib/ronin/support/network/pop3/mixin.rb +113 -0
  259. data/lib/ronin/support/network/proxy.rb +602 -0
  260. data/lib/ronin/support/network/public_suffix/list.rb +339 -0
  261. data/lib/ronin/support/network/public_suffix/suffix.rb +118 -0
  262. data/lib/ronin/support/network/public_suffix/suffix_set.rb +150 -0
  263. data/lib/ronin/support/network/public_suffix.rb +41 -0
  264. data/lib/ronin/support/network/smtp/email.rb +190 -0
  265. data/lib/ronin/support/network/smtp/mixin.rb +290 -0
  266. data/lib/ronin/{extensions/meta.rb → support/network/smtp.rb} +6 -7
  267. data/lib/ronin/support/network/ssl/local_cert.rb +114 -0
  268. data/lib/ronin/support/network/ssl/local_key.rb +84 -0
  269. data/lib/ronin/support/network/ssl/mixin.rb +740 -0
  270. data/lib/ronin/{network/extensions/imap/net.rb → support/network/ssl/openssl.rb} +9 -10
  271. data/lib/ronin/support/network/ssl/proxy.rb +296 -0
  272. data/lib/ronin/support/network/ssl.rb +173 -0
  273. data/lib/ronin/support/network/tcp/mixin.rb +400 -0
  274. data/lib/ronin/support/network/tcp/proxy.rb +435 -0
  275. data/lib/ronin/support/network/tcp.rb +443 -0
  276. data/lib/ronin/support/network/telnet/mixin.rb +150 -0
  277. data/lib/ronin/support/network/telnet.rb +90 -0
  278. data/lib/ronin/support/network/tld/list.rb +266 -0
  279. data/lib/ronin/support/network/tld.rb +41 -0
  280. data/lib/ronin/support/network/tls/mixin.rb +670 -0
  281. data/lib/ronin/support/network/tls/proxy.rb +135 -0
  282. data/lib/ronin/support/network/tls.rb +53 -0
  283. data/lib/ronin/support/network/udp/mixin.rb +389 -0
  284. data/lib/ronin/support/network/udp/proxy.rb +192 -0
  285. data/lib/ronin/support/network/udp.rb +435 -0
  286. data/lib/ronin/support/network/unix/mixin.rb +273 -0
  287. data/lib/ronin/support/network.rb +37 -0
  288. data/lib/ronin/support/path.rb +136 -0
  289. data/lib/ronin/{network/extensions/dns/net.rb → support/text/core_ext/regexp.rb} +8 -9
  290. data/lib/ronin/support/text/core_ext/string.rb +46 -0
  291. data/lib/ronin/support/text/core_ext.rb +23 -0
  292. data/lib/ronin/support/text/entropy/core_ext/string.rb +45 -0
  293. data/lib/ronin/support/text/entropy/core_ext.rb +19 -0
  294. data/lib/ronin/support/text/entropy.rb +66 -0
  295. data/lib/ronin/support/text/erb/mixin.rb +44 -0
  296. data/lib/ronin/support/text/erb.rb +19 -0
  297. data/lib/ronin/support/text/homoglyph/core_ext/string.rb +108 -0
  298. data/lib/ronin/{formatting/digest.rb → support/text/homoglyph/core_ext.rb} +6 -7
  299. data/lib/ronin/{network/http/exceptions/unknown_request.rb → support/text/homoglyph/exceptions.rb} +10 -9
  300. data/lib/ronin/support/text/homoglyph/table.rb +228 -0
  301. data/lib/ronin/support/text/homoglyph.rb +142 -0
  302. data/lib/ronin/support/text/mixin.rb +31 -0
  303. data/lib/ronin/support/text/patterns/credentials.rb +75 -0
  304. data/lib/ronin/support/text/patterns/crypto.rb +67 -0
  305. data/lib/ronin/support/text/patterns/file_system.rb +93 -0
  306. data/lib/ronin/support/text/patterns/language.rb +37 -0
  307. data/lib/ronin/support/text/patterns/network/public_suffix.rb +44 -0
  308. data/lib/ronin/support/text/patterns/network.rb +140 -0
  309. data/lib/ronin/support/text/patterns/numeric.rb +52 -0
  310. data/lib/ronin/support/text/patterns/pii.rb +105 -0
  311. data/lib/ronin/support/text/patterns/source_code.rb +148 -0
  312. data/lib/ronin/support/text/patterns.rb +25 -0
  313. data/lib/ronin/support/text/random/mixin.rb +437 -0
  314. data/lib/ronin/support/text/random.rb +419 -0
  315. data/lib/ronin/support/text/typo/core_ext/string.rb +123 -0
  316. data/lib/ronin/support/text/typo/core_ext.rb +19 -0
  317. data/lib/ronin/support/text/typo/exceptions.rb +28 -0
  318. data/lib/ronin/support/text/typo/generator.rb +161 -0
  319. data/lib/ronin/support/text/typo.rb +260 -0
  320. data/lib/ronin/support/text.rb +26 -0
  321. data/lib/ronin/support/version.rb +6 -7
  322. data/lib/ronin/support.rb +20 -15
  323. data/ronin-support.gemspec +3 -1
  324. metadata +462 -369
  325. data/.gemtest +0 -0
  326. data/lib/ronin/binary/hexdump/parser.rb +0 -403
  327. data/lib/ronin/binary/struct.rb +0 -567
  328. data/lib/ronin/binary/template.rb +0 -454
  329. data/lib/ronin/extensions/ip_addr.rb +0 -217
  330. data/lib/ronin/extensions/meta/object.rb +0 -24
  331. data/lib/ronin/extensions/regexp.rb +0 -157
  332. data/lib/ronin/extensions.rb +0 -29
  333. data/lib/ronin/formatting/extensions/binary/array.rb +0 -61
  334. data/lib/ronin/formatting/extensions/binary/base64.rb +0 -106
  335. data/lib/ronin/formatting/extensions/binary/file.rb +0 -77
  336. data/lib/ronin/formatting/extensions/binary/float.rb +0 -65
  337. data/lib/ronin/formatting/extensions/binary/integer.rb +0 -180
  338. data/lib/ronin/formatting/extensions/binary/string.rb +0 -345
  339. data/lib/ronin/formatting/extensions/binary.rb +0 -26
  340. data/lib/ronin/formatting/extensions/digest/file.rb +0 -129
  341. data/lib/ronin/formatting/extensions/digest/string.rb +0 -86
  342. data/lib/ronin/formatting/extensions/digest.rb +0 -21
  343. data/lib/ronin/formatting/extensions/html/integer.rb +0 -142
  344. data/lib/ronin/formatting/extensions/html/string.rb +0 -194
  345. data/lib/ronin/formatting/extensions/html.rb +0 -21
  346. data/lib/ronin/formatting/extensions/http/integer.rb +0 -69
  347. data/lib/ronin/formatting/extensions/http/string.rb +0 -110
  348. data/lib/ronin/formatting/extensions/http.rb +0 -21
  349. data/lib/ronin/formatting/extensions/sql/string.rb +0 -128
  350. data/lib/ronin/formatting/extensions/sql.rb +0 -20
  351. data/lib/ronin/formatting/extensions/text/array.rb +0 -137
  352. data/lib/ronin/formatting/extensions/text/string.rb +0 -297
  353. data/lib/ronin/formatting/extensions.rb +0 -24
  354. data/lib/ronin/formatting/text.rb +0 -20
  355. data/lib/ronin/formatting.rb +0 -25
  356. data/lib/ronin/fuzzing/extensions/string.rb +0 -209
  357. data/lib/ronin/fuzzing/fuzzer.rb +0 -110
  358. data/lib/ronin/fuzzing/fuzzing.rb +0 -360
  359. data/lib/ronin/fuzzing/mutator.rb +0 -161
  360. data/lib/ronin/fuzzing/repeater.rb +0 -81
  361. data/lib/ronin/fuzzing/template.rb +0 -133
  362. data/lib/ronin/fuzzing.rb +0 -21
  363. data/lib/ronin/mixin.rb +0 -89
  364. data/lib/ronin/network/dns.rb +0 -201
  365. data/lib/ronin/network/esmtp.rb +0 -113
  366. data/lib/ronin/network/extensions/dns.rb +0 -20
  367. data/lib/ronin/network/extensions/esmtp.rb +0 -20
  368. data/lib/ronin/network/extensions/http/uri/http.rb +0 -228
  369. data/lib/ronin/network/extensions/http.rb +0 -21
  370. data/lib/ronin/network/extensions/imap.rb +0 -20
  371. data/lib/ronin/network/extensions/pop3/net.rb +0 -24
  372. data/lib/ronin/network/extensions/pop3.rb +0 -20
  373. data/lib/ronin/network/extensions/smtp/net.rb +0 -24
  374. data/lib/ronin/network/extensions/ssl/net.rb +0 -24
  375. data/lib/ronin/network/extensions/ssl.rb +0 -20
  376. data/lib/ronin/network/extensions/tcp/net.rb +0 -24
  377. data/lib/ronin/network/extensions/tcp.rb +0 -20
  378. data/lib/ronin/network/extensions/telnet/net.rb +0 -24
  379. data/lib/ronin/network/extensions/telnet.rb +0 -20
  380. data/lib/ronin/network/extensions/udp/net.rb +0 -24
  381. data/lib/ronin/network/extensions/udp.rb +0 -20
  382. data/lib/ronin/network/extensions.rb +0 -29
  383. data/lib/ronin/network/ftp.rb +0 -149
  384. data/lib/ronin/network/http/exceptions.rb +0 -20
  385. data/lib/ronin/network/http/http.rb +0 -1127
  386. data/lib/ronin/network/http/proxy.rb +0 -330
  387. data/lib/ronin/network/http.rb +0 -22
  388. data/lib/ronin/network/imap.rb +0 -158
  389. data/lib/ronin/network/mixins/dns.rb +0 -55
  390. data/lib/ronin/network/mixins/esmtp.rb +0 -164
  391. data/lib/ronin/network/mixins/ftp.rb +0 -155
  392. data/lib/ronin/network/mixins/http.rb +0 -227
  393. data/lib/ronin/network/mixins/imap.rb +0 -156
  394. data/lib/ronin/network/mixins/mixin.rb +0 -58
  395. data/lib/ronin/network/mixins/pop3.rb +0 -149
  396. data/lib/ronin/network/mixins/smtp.rb +0 -159
  397. data/lib/ronin/network/mixins/ssl.rb +0 -148
  398. data/lib/ronin/network/mixins/tcp.rb +0 -368
  399. data/lib/ronin/network/mixins/telnet.rb +0 -208
  400. data/lib/ronin/network/mixins/udp.rb +0 -381
  401. data/lib/ronin/network/mixins/unix.rb +0 -279
  402. data/lib/ronin/network/mixins.rb +0 -29
  403. data/lib/ronin/network/network.rb +0 -45
  404. data/lib/ronin/network/pop3.rb +0 -124
  405. data/lib/ronin/network/proxy.rb +0 -578
  406. data/lib/ronin/network/smtp/email.rb +0 -174
  407. data/lib/ronin/network/smtp/smtp.rb +0 -230
  408. data/lib/ronin/network/smtp.rb +0 -22
  409. data/lib/ronin/network/ssl.rb +0 -186
  410. data/lib/ronin/network/tcp/proxy.rb +0 -417
  411. data/lib/ronin/network/tcp/tcp.rb +0 -443
  412. data/lib/ronin/network/tcp.rb +0 -21
  413. data/lib/ronin/network/telnet.rb +0 -264
  414. data/lib/ronin/network/udp/proxy.rb +0 -191
  415. data/lib/ronin/network/udp/udp.rb +0 -450
  416. data/lib/ronin/network/udp.rb +0 -21
  417. data/lib/ronin/network/unix.rb +0 -286
  418. data/lib/ronin/network.rb +0 -31
  419. data/lib/ronin/path.rb +0 -137
  420. data/lib/ronin/spec/ui/output.rb +0 -22
  421. data/lib/ronin/support/inflector.rb +0 -92
  422. data/lib/ronin/support/support.rb +0 -42
  423. data/lib/ronin/templates/erb.rb +0 -78
  424. data/lib/ronin/templates/template.rb +0 -169
  425. data/lib/ronin/templates.rb +0 -21
  426. data/lib/ronin/ui/output/helpers.rb +0 -296
  427. data/lib/ronin/ui/output/output.rb +0 -146
  428. data/lib/ronin/ui/output/terminal/color.rb +0 -124
  429. data/lib/ronin/ui/output/terminal/raw.rb +0 -103
  430. data/lib/ronin/ui/output/terminal.rb +0 -21
  431. data/lib/ronin/ui/output.rb +0 -21
  432. data/lib/ronin/ui/shell.rb +0 -286
  433. data/lib/ronin/wordlist.rb +0 -287
  434. data/spec/binary/hexdump/helpers/hexdumps/ascii.bin +0 -0
  435. data/spec/binary/hexdump/helpers/hexdumps/hexdump_decimal_shorts.txt +0 -17
  436. data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_bytes.txt +0 -17
  437. data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_shorts.txt +0 -17
  438. data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_bytes.txt +0 -17
  439. data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_shorts.txt +0 -17
  440. data/spec/binary/hexdump/helpers/hexdumps/hexdump_repeated.txt +0 -6
  441. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_bytes.txt +0 -17
  442. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_ints.txt +0 -17
  443. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_quads.txt +0 -17
  444. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_shorts.txt +0 -17
  445. data/spec/binary/hexdump/helpers/hexdumps/od_doubles.txt +0 -17
  446. data/spec/binary/hexdump/helpers/hexdumps/od_floats.txt +0 -17
  447. data/spec/binary/hexdump/helpers/hexdumps/od_hex_bytes.txt +0 -17
  448. data/spec/binary/hexdump/helpers/hexdumps/od_hex_ints.txt +0 -17
  449. data/spec/binary/hexdump/helpers/hexdumps/od_hex_quads.txt +0 -17
  450. data/spec/binary/hexdump/helpers/hexdumps/od_hex_shorts.txt +0 -17
  451. data/spec/binary/hexdump/helpers/hexdumps/od_named_chars.txt +0 -17
  452. data/spec/binary/hexdump/helpers/hexdumps/od_octal_bytes.txt +0 -17
  453. data/spec/binary/hexdump/helpers/hexdumps/od_octal_ints.txt +0 -17
  454. data/spec/binary/hexdump/helpers/hexdumps/od_octal_quads.txt +0 -17
  455. data/spec/binary/hexdump/helpers/hexdumps/od_octal_shorts.txt +0 -17
  456. data/spec/binary/hexdump/helpers/hexdumps/od_repeated.txt +0 -6
  457. data/spec/binary/hexdump/helpers/hexdumps/repeated.bin +0 -1
  458. data/spec/binary/hexdump/helpers/hexdumps.rb +0 -13
  459. data/spec/binary/hexdump/parser_spec.rb +0 -302
  460. data/spec/binary/struct_spec.rb +0 -496
  461. data/spec/binary/template_spec.rb +0 -414
  462. data/spec/extensions/enumerable_spec.rb +0 -24
  463. data/spec/extensions/file_spec.rb +0 -63
  464. data/spec/extensions/ip_addr_spec.rb +0 -203
  465. data/spec/extensions/kernel_spec.rb +0 -30
  466. data/spec/extensions/regexp_spec.rb +0 -482
  467. data/spec/extensions/resolv_spec.rb +0 -18
  468. data/spec/extensions/string_spec.rb +0 -179
  469. data/spec/formatting/binary/array_spec.rb +0 -26
  470. data/spec/formatting/binary/base64_spec.rb +0 -50
  471. data/spec/formatting/binary/float_spec.rb +0 -34
  472. data/spec/formatting/binary/integer_spec.rb +0 -166
  473. data/spec/formatting/binary/string_spec.rb +0 -197
  474. data/spec/formatting/digest/string_spec.rb +0 -82
  475. data/spec/formatting/html/integer_spec.rb +0 -66
  476. data/spec/formatting/html/string_spec.rb +0 -103
  477. data/spec/formatting/http/integer_spec.rb +0 -42
  478. data/spec/formatting/http/string_spec.rb +0 -76
  479. data/spec/formatting/sql/string_spec.rb +0 -75
  480. data/spec/formatting/text/array_spec.rb +0 -105
  481. data/spec/formatting/text/string_spec.rb +0 -162
  482. data/spec/fuzzing/extensions/string_spec.rb +0 -87
  483. data/spec/fuzzing/fuzzer_spec.rb +0 -109
  484. data/spec/fuzzing/fuzzing_spec.rb +0 -24
  485. data/spec/fuzzing/mutator_spec.rb +0 -112
  486. data/spec/fuzzing/repeater_spec.rb +0 -57
  487. data/spec/fuzzing/template_spec.rb +0 -54
  488. data/spec/mixin_spec.rb +0 -53
  489. data/spec/network/dns_spec.rb +0 -201
  490. data/spec/network/ftp_spec.rb +0 -81
  491. data/spec/network/http/http_spec.rb +0 -466
  492. data/spec/network/http/proxy_spec.rb +0 -148
  493. data/spec/network/network_spec.rb +0 -8
  494. data/spec/network/proxy_spec.rb +0 -121
  495. data/spec/network/shared/unix_server.rb +0 -31
  496. data/spec/network/smtp/email_spec.rb +0 -100
  497. data/spec/network/ssl_spec.rb +0 -70
  498. data/spec/network/tcp/proxy_spec.rb +0 -116
  499. data/spec/network/tcp/tcp_spec.rb +0 -273
  500. data/spec/network/telnet_spec.rb +0 -67
  501. data/spec/network/udp/udp_spec.rb +0 -271
  502. data/spec/network/unix_spec.rb +0 -183
  503. data/spec/path_spec.rb +0 -86
  504. data/spec/spec_helper.rb +0 -9
  505. data/spec/support/inflector_spec.rb +0 -22
  506. data/spec/support_spec.rb +0 -8
  507. data/spec/templates/classes/example_erb.rb +0 -11
  508. data/spec/templates/classes/example_template.rb +0 -35
  509. data/spec/templates/erb_spec.rb +0 -21
  510. data/spec/templates/helpers/data/includes/_relative.erb +0 -1
  511. data/spec/templates/helpers/data/templates/example.erb +0 -1
  512. data/spec/templates/helpers/data.rb +0 -9
  513. data/spec/templates/template_spec.rb +0 -54
  514. data/spec/ui/classes/test_shell.rb +0 -22
  515. data/spec/ui/output_spec.rb +0 -32
  516. data/spec/ui/shell_spec.rb +0 -83
  517. data/spec/wordlist_spec.rb +0 -151
@@ -0,0 +1,462 @@
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/native'
20
+ require 'ronin/support/binary/ctypes/little_endian'
21
+ require 'ronin/support/binary/ctypes/big_endian'
22
+ require 'ronin/support/binary/ctypes/network'
23
+ require 'ronin/support/binary/ctypes/arch'
24
+ require 'ronin/support/binary/ctypes/os'
25
+
26
+ require 'ronin/support/binary/ctypes/array_type'
27
+ require 'ronin/support/binary/ctypes/unbounded_array_type'
28
+ require 'ronin/support/binary/ctypes/struct_type'
29
+
30
+ require 'ronin/support/binary/ctypes/array_object_type'
31
+ require 'ronin/support/binary/ctypes/struct_object_type'
32
+ require 'ronin/support/binary/ctypes/union_object_type'
33
+
34
+ module Ronin
35
+ module Support
36
+ module Binary
37
+ #
38
+ # Provides a complete virtual C type system, implemented purely in Ruby.
39
+ # The type objects are then used by {Binary::Template}, {Binary::Buffer},
40
+ # {Binary::Stream}, {Binary::Array}, {Binary::Struct}, and {Binary::Union}
41
+ # to encode and decoded any C binary data.
42
+ #
43
+ # ## Supported Types
44
+ #
45
+ # * Scalar Types:
46
+ # * Character Types:
47
+ # * {CharType char} (ex: `'c'`)
48
+ # * {StringType string} (ex: `"abc"`)
49
+ # * Signed Integer Types:
50
+ # * {CTypes::Int8Type int8} (`-127` - `127`)
51
+ # * {CTypes::Int16Type int16} (`-32768` to `32767`)
52
+ # * {CTypes::Int32Type int32} (`-2147483648` - `2147483648`)
53
+ # * {CTypes::Int64Type int64} (`-9223372036854775808` -
54
+ # `9223372036854775808`)
55
+ # * Unsigned Integer Types:
56
+ # * {CTypes::UInt8Type uint8} (`0x00` - `0xff`)
57
+ # * {CTypes::UInt16Type uint16} (`0x0000` - `0xffff`)
58
+ # * {CTypes::UInt32Type uint32} (`0x00000000` - `0xffffffff`)
59
+ # * {CTypes::UInt64Type uint64} (`0x0000000000000000` -
60
+ # `0xffffffffffffffff`)
61
+ # * Floating Point Types:
62
+ # * {CTypes::Float32Type float} (`-3.40282347E+38F` -
63
+ # `3.40282347E+38F`)
64
+ # * {CTypes::Float64Type double} (`-1.79769313486231570E+308` -
65
+ # `1.79769313486231570E+308`)
66
+ # * Aggregate Types:
67
+ # * {CTypes::ArrayType Array} (ex: `{1,2,3}`)
68
+ # * {CTypes::UnboundedArrayType unbounded Array} (ex: `char c[] = {...}`)
69
+ # * {CTypes::StructType struct} (ex: `struct s = {1, 'c', ...}`)
70
+ # * {CTypes::UnionType union} (ex: `union u = {1234}`)
71
+ # * Object Types:
72
+ # * {CTypes::ArrayObjectType array} objects (see: {Binary::Array}).
73
+ # * {CTypes::StructObjectType struct} objects (see: {Binary::Struct}).
74
+ # * {CTypes::UnionObjectType union} objects (see: {Binary::Union}).
75
+ #
76
+ # ## Supported Endian-ness
77
+ #
78
+ # * {CTypes::LittleEndian little-endian} byte-order
79
+ # * {CTypes::BigEndian big-endian} byte-order
80
+ # * {CTypes::Network network} byte-order
81
+ #
82
+ # ## Supported Architectures
83
+ #
84
+ # * {CTypes::Arch::ARM arm}
85
+ # * {CTypes::Arch::ARM::BigEndian armbe (big-endian)}
86
+ # * {CTypes::Arch::ARM64 arm64}
87
+ # * {CTypes::Arch::ARM64::BigEndian arm64be (big-endian)}
88
+ # * {CTypes::Arch::MIPS mips}
89
+ # * {CTypes::Arch::MIPS::LittleEndian mipsle (little-endian)}
90
+ # * {CTypes::Arch::MIPS64 mips64}
91
+ # * {CTypes::Arch::MIPS64::LittleEndian mips64le (little-endian)}
92
+ # * {CTypes::Arch::PPC ppc}
93
+ # * {CTypes::Arch::PPC64 ppc64}
94
+ # * {CTypes::Arch::X86 x86}
95
+ # * {CTypes::Arch::X86_64 x86-64}
96
+ #
97
+ # ## Supported Operating Systems (OS)
98
+ #
99
+ # * {CTypes::OS::UNIX UNIX}
100
+ # * {CTypes::OS::BSD BSD}
101
+ # * {CTypes::OS::FreeBSD FreeBSD}
102
+ # * {CTypes::OS::OpenBSD OpenBSD}
103
+ # * {CTypes::OS::NetBSD NetBSD}
104
+ # * {CTypes::OS::Linux Linux}
105
+ # * {CTypes::OS::MacOS macOS}
106
+ # * {CTypes::OS::Windows Windows}
107
+ #
108
+ module CTypes
109
+ include Native
110
+
111
+ # little-endian types
112
+ INT16_LE = LittleEndian::INT16
113
+ INT32_LE = LittleEndian::INT32
114
+ INT64_LE = LittleEndian::INT64
115
+
116
+ UINT16_LE = LittleEndian::UINT16
117
+ UINT32_LE = LittleEndian::UINT32
118
+ UINT64_LE = LittleEndian::UINT64
119
+
120
+ WORD_LE = LittleEndian::WORD
121
+ DWORD_LE = LittleEndian::DWORD
122
+ QWORD_LE = LittleEndian::QWORD
123
+
124
+ MACHINE_WORD_LE = LittleEndian::MACHINE_WORD
125
+ POINTER_LE = LittleEndian::POINTER
126
+
127
+ FLOAT32_LE = LittleEndian::FLOAT32
128
+ FLOAT64_LE = LittleEndian::FLOAT64
129
+
130
+ FLOAT_LE = LittleEndian::FLOAT
131
+ DOUBLE_LE = LittleEndian::DOUBLE
132
+
133
+ # big-endian types
134
+ INT16_BE = BigEndian::INT16
135
+ INT32_BE = BigEndian::INT32
136
+ INT64_BE = BigEndian::INT64
137
+
138
+ UINT16_BE = BigEndian::UINT16
139
+ UINT32_BE = BigEndian::UINT32
140
+ UINT64_BE = BigEndian::UINT64
141
+
142
+ WORD_BE = BigEndian::WORD
143
+ DWORD_BE = BigEndian::DWORD
144
+ QWORD_BE = BigEndian::QWORD
145
+
146
+ MACHINE_WORD_BE = BigEndian::MACHINE_WORD
147
+ POINTER_BE = BigEndian::POINTER
148
+
149
+ FLOAT32_BE = BigEndian::FLOAT32
150
+ FLOAT64_BE = BigEndian::FLOAT64
151
+
152
+ FLOAT_BE = BigEndian::FLOAT
153
+ DOUBLE_BE = BigEndian::DOUBLE
154
+
155
+ # network byte-order types
156
+ INT16_NE = Network::INT16
157
+ INT32_NE = Network::INT32
158
+ INT64_NE = Network::INT64
159
+
160
+ UINT16_NE = Network::UINT16
161
+ UINT32_NE = Network::UINT32
162
+ UINT64_NE = Network::UINT64
163
+
164
+ WORD_NE = Network::WORD
165
+ DWORD_NE = Network::DWORD
166
+ QWORD_NE = Network::QWORD
167
+
168
+ MACHINE_WORD_NE = Network::MACHINE_WORD
169
+ POINTER_NE = Network::POINTER
170
+
171
+ FLOAT32_NE = Network::FLOAT32
172
+ FLOAT64_NE = Network::FLOAT64
173
+
174
+ FLOAT_NE = Network::FLOAT
175
+ DOUBLE_NE = Network::DOUBLE
176
+
177
+ INT16_NET = Network::INT16
178
+ INT32_NET = Network::INT32
179
+ INT64_NET = Network::INT64
180
+
181
+ UINT16_NET = Network::UINT16
182
+ UINT32_NET = Network::UINT32
183
+ UINT64_NET = Network::UINT64
184
+
185
+ WORD_NET = Network::WORD
186
+ DWORD_NET = Network::DWORD
187
+ QWORD_NET = Network::QWORD
188
+
189
+ MACHINE_WORD_NET = Network::MACHINE_WORD
190
+ POINTER_NET = Network::POINTER
191
+
192
+ FLOAT32_NET = Network::FLOAT32
193
+ FLOAT64_NET = Network::FLOAT64
194
+
195
+ FLOAT_NET = Network::FLOAT
196
+ DOUBLE_NET = Network::DOUBLE
197
+
198
+ # All types (native, little-endian, big-endian, and network byte-order).
199
+ TYPES = Native::TYPES.merge(
200
+ # little-endian types
201
+ int16_le: LittleEndian::INT16,
202
+ int32_le: LittleEndian::INT32,
203
+ int64_le: LittleEndian::INT64,
204
+
205
+ short_le: LittleEndian::INT16,
206
+ int_le: LittleEndian::INT32,
207
+ long_le: LittleEndian::LONG,
208
+ long_long_le: LittleEndian::INT64,
209
+
210
+ uint16_le: LittleEndian::UINT16,
211
+ uint32_le: LittleEndian::UINT32,
212
+ uint64_le: LittleEndian::UINT64,
213
+
214
+ ushort_le: LittleEndian::UINT16,
215
+ uint_le: LittleEndian::UINT32,
216
+ ulong_le: LittleEndian::ULONG,
217
+ ulong_long_le: LittleEndian::UINT64,
218
+
219
+ word_le: WORD_LE,
220
+ dword_le: DWORD_LE,
221
+ qword_le: QWORD_LE,
222
+
223
+ machine_word_le: LittleEndian::MACHINE_WORD,
224
+ pointer_le: LittleEndian::POINTER,
225
+
226
+ float32_le: LittleEndian::FLOAT32,
227
+ float64_le: LittleEndian::FLOAT64,
228
+
229
+ float_le: LittleEndian::FLOAT,
230
+ double_le: LittleEndian::DOUBLE,
231
+
232
+ # big-endian types
233
+ int16_be: BigEndian::INT16,
234
+ int32_be: BigEndian::INT32,
235
+ int64_be: BigEndian::INT64,
236
+
237
+ short_be: BigEndian::INT16,
238
+ int_be: BigEndian::INT32,
239
+ long_be: BigEndian::LONG,
240
+ long_long_be: BigEndian::INT64,
241
+
242
+ uint16_be: BigEndian::UINT16,
243
+ uint32_be: BigEndian::UINT32,
244
+ uint64_be: BigEndian::UINT64,
245
+
246
+ ushort_be: BigEndian::UINT16,
247
+ uint_be: BigEndian::UINT32,
248
+ ulong_be: BigEndian::ULONG,
249
+ ulong_long_be: BigEndian::UINT64,
250
+
251
+ word_be: WORD_BE,
252
+ dword_be: DWORD_BE,
253
+ qword_be: QWORD_BE,
254
+
255
+ machine_word_be: BigEndian::MACHINE_WORD,
256
+ pointer_be: BigEndian::POINTER,
257
+
258
+ float32_be: BigEndian::FLOAT32,
259
+ float64_be: BigEndian::FLOAT64,
260
+
261
+ float_be: BigEndian::FLOAT,
262
+ double_be: BigEndian::DOUBLE,
263
+
264
+ # network byte-order types
265
+ int16_ne: Network::INT16,
266
+ int32_ne: Network::INT32,
267
+ int64_ne: Network::INT64,
268
+
269
+ short_ne: Network::INT16,
270
+ int_ne: Network::INT32,
271
+ long_ne: Network::LONG,
272
+ long_long_ne: Network::INT64,
273
+
274
+ uint16_ne: Network::UINT16,
275
+ uint32_ne: Network::UINT32,
276
+ uint64_ne: Network::UINT64,
277
+
278
+ ushort_ne: Network::UINT16,
279
+ uint_ne: Network::UINT32,
280
+ ulong_ne: Network::ULONG,
281
+ ulong_long_ne: Network::UINT64,
282
+
283
+ word_ne: WORD_NE,
284
+ dword_ne: DWORD_NE,
285
+ qword_ne: QWORD_NE,
286
+
287
+ machine_word_ne: Network::MACHINE_WORD,
288
+ pointer_ne: Network::POINTER,
289
+
290
+ float32_ne: Network::FLOAT32,
291
+ float64_ne: Network::FLOAT64,
292
+
293
+ float_ne: Network::FLOAT,
294
+ double_ne: Network::DOUBLE,
295
+
296
+ # `_net` -> `_ne` aliases
297
+ int16_net: Network::INT16,
298
+ int32_net: Network::INT32,
299
+ int64_net: Network::INT64,
300
+
301
+ short_net: Network::INT16,
302
+ int_net: Network::INT32,
303
+ long_net: Network::LONG,
304
+ long_long_net: Network::INT64,
305
+
306
+ uint16_net: Network::UINT16,
307
+ uint32_net: Network::UINT32,
308
+ uint64_net: Network::UINT64,
309
+
310
+ ushort_net: Network::UINT16,
311
+ uint_net: Network::UINT32,
312
+ ulong_net: Network::ULONG,
313
+ ulong_long_net: Network::UINT64,
314
+
315
+ word_net: WORD_NET,
316
+ dword_net: DWORD_NET,
317
+ qword_net: QWORD_NET,
318
+
319
+ machine_word_net: Network::MACHINE_WORD,
320
+ pointer_net: Network::POINTER,
321
+
322
+ float32_net: Network::FLOAT32,
323
+ float64_net: Network::FLOAT64,
324
+
325
+ float_net: Network::FLOAT,
326
+ double_net: Network::DOUBLE
327
+ )
328
+
329
+ #
330
+ # Fetches the type from {TYPES}.
331
+ #
332
+ # @param [Symbol] name
333
+ # The type name to lookup.
334
+ #
335
+ # @return [Type]
336
+ # The type object from {TYPES}.
337
+ #
338
+ # @raise [ArgumentError]
339
+ # The type name was unknown.
340
+ #
341
+ def self.[](name)
342
+ TYPES.fetch(name) do
343
+ raise(ArgumentError,"unknown type: #{name.inspect}")
344
+ end
345
+ end
346
+
347
+ # Represents the different endian type systems.
348
+ ENDIAN = {
349
+ little: LittleEndian,
350
+ big: BigEndian,
351
+ net: Network,
352
+
353
+ nil => self
354
+ }
355
+
356
+ # The supported architectures.
357
+ ARCHES = {
358
+ x86: Arch::X86,
359
+
360
+ x86_64: Arch::X86_64,
361
+ ia64: Arch::X86_64,
362
+ amd64: Arch::X86_64,
363
+
364
+ ppc: Arch::PPC,
365
+ ppc64: Arch::PPC64,
366
+
367
+ mips: Arch::MIPS,
368
+ mips_le: Arch::MIPS::LittleEndian,
369
+ mips_be: Arch::MIPS, # MIPS is big-endian by default
370
+
371
+ mips64: Arch::MIPS64,
372
+ mips64_le: Arch::MIPS64::LittleEndian,
373
+ mips64_be: Arch::MIPS64, # MIPS is big-endian by default
374
+
375
+ arm: Arch::ARM,
376
+ arm_le: Arch::ARM,
377
+ arm_be: Arch::ARM::BigEndian,
378
+
379
+ arm64: Arch::ARM64,
380
+ arm64_le: Arch::ARM64, # ARM is little-endian by default
381
+ arm64_be: Arch::ARM64::BigEndian
382
+ }
383
+
384
+ # The supported Operating Systems.
385
+ OSES = {
386
+ unix: OS::UNIX,
387
+
388
+ bsd: OS::BSD,
389
+ freebsd: OS::FreeBSD,
390
+ openbsd: OS::OpenBSD,
391
+ netbsd: OS::NetBSD,
392
+
393
+ linux: OS:: Linux,
394
+ macos: OS::MacOS,
395
+ windows: OS::Windows
396
+ }
397
+
398
+ #
399
+ # Returns the types module/object for the given endianness,
400
+ # architecture, and/or Operating System (OS).
401
+ #
402
+ # @param [:little, :big, :net, nil] endian
403
+ # The endianness.
404
+ #
405
+ # @param [:x86, :x86_64,
406
+ # :ppc, :ppc64,
407
+ # :mips, :mips_le, :mips_be,
408
+ # :mips64, :mips64_le, :mips64_be,
409
+ # :arm, :arm_le, :arm_be,
410
+ # :arm64, :arm64_le, :arm64_be] arch
411
+ # The architecture name to lookup.
412
+ #
413
+ # @param [:linux, :macos, :windows,
414
+ # :bsd, :freebsd, :openbsd, :netbsd] os
415
+ # The Operating System name to lookup.
416
+ #
417
+ # @return [CTypes,
418
+ # CTypes::LittleEndian,
419
+ # CTypes::BigEndian,
420
+ # CTypes::Network,
421
+ # CTypes::Arch::ARM,
422
+ # CTypes::Arch::ARM::BigEndian,
423
+ # CTypes::Arch::ARM64,
424
+ # CTypes::Arch::ARM64::BigEndian,
425
+ # CTypes::Arch::MIPS,
426
+ # CTypes::Arch::MIPS::LittleEndian,
427
+ # CTypes::Arch::MIPS64,
428
+ # CTypes::Arch::MIPS64::LittleEndian,
429
+ # CTypes::Arch::PPC,
430
+ # CTypes::Arch::PPC64,
431
+ # CTypes::Arch::X86,
432
+ # CTypes::Arch::X86_64,
433
+ # CTypes::OS]
434
+ # The types module.
435
+ #
436
+ # @raise [ArgumentError]
437
+ # The endian was unknown, the architecture name was unknown,
438
+ # or the os name was unknown.
439
+ #
440
+ def self.platform(arch: nil, endian: nil, os: nil)
441
+ types = if arch
442
+ ARCHES.fetch(arch) do
443
+ raise(ArgumentError,"unknown architecture: #{arch.inspect}")
444
+ end
445
+ else
446
+ ENDIAN.fetch(endian) do
447
+ raise(ArgumentError,"unknown endian: #{endian.inspect}")
448
+ end
449
+ end
450
+
451
+ if os
452
+ types = OSES.fetch(os) {
453
+ raise(ArgumentError,"unknown OS: #{os.inspect}")
454
+ }.new(types)
455
+ end
456
+
457
+ return types
458
+ end
459
+ end
460
+ end
461
+ end
462
+ end
@@ -0,0 +1,118 @@
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/hexdump/parser'
20
+
21
+ class File
22
+
23
+ #
24
+ # Converts a hexdump file to it's original binary data.
25
+ #
26
+ # @param [Pathname, String] path
27
+ # The path of the hexdump file.
28
+ #
29
+ # @param [Hash{Symbol => Object}] kwargs
30
+ # Additional keyword arguments for
31
+ # {Ronin::Support::Binary::Hexdump::Parser#initialize}.
32
+ #
33
+ # @option kwargs [:od, :hexdump] :format (:hexdump)
34
+ # The expected format of the hexdump. Must be either `:od` or
35
+ # `:hexdump`.
36
+ #
37
+ # @option kwargs [Symbol] :type (:byte)
38
+ # Denotes the encoding used for the bytes within the hexdump.
39
+ # Must be one of the following:
40
+ # * `:byte`
41
+ # * `:char`
42
+ # * `:uint8`
43
+ # * `:uint16`
44
+ # * `:uint32`
45
+ # * `:uint64`
46
+ # * `:int8`
47
+ # * `:int16`
48
+ # * `:int32`
49
+ # * `:int64`
50
+ # * `:uchar`
51
+ # * `:ushort`
52
+ # * `:uint`
53
+ # * `:ulong`
54
+ # * `:ulong_long`
55
+ # * `:short`
56
+ # * `:int`
57
+ # * `:long`
58
+ # * `:long_long`
59
+ # * `:float`
60
+ # * `:double`
61
+ # * `:float_le`
62
+ # * `:double_le`
63
+ # * `:float_be`
64
+ # * `:double_be`
65
+ # * `:uint16_le`
66
+ # * `:uint32_le`
67
+ # * `:uint64_le`
68
+ # * `:int16_le`
69
+ # * `:int32_le`
70
+ # * `:int64_le`
71
+ # * `:uint16_be`
72
+ # * `:uint32_be`
73
+ # * `:uint64_be`
74
+ # * `:int16_be`
75
+ # * `:int32_be`
76
+ # * `:int64_be`
77
+ # * `:ushort_le`
78
+ # * `:uint_le`
79
+ # * `:ulong_le`
80
+ # * `:ulong_long_le`
81
+ # * `:short_le`
82
+ # * `:int_le`
83
+ # * `:long_le`
84
+ # * `:long_long_le`
85
+ # * `:ushort_be`
86
+ # * `:uint_be`
87
+ # * `:ulong_be`
88
+ # * `:ulong_long_be`
89
+ # * `:short_be`
90
+ # * `:int_be`
91
+ # * `:long_be`
92
+ # * `:long_long_be`
93
+ #
94
+ # @option kwargs [2, 8, 10, 16, nil] :address_base
95
+ # The numerical base that the offset addresses are encoded in.
96
+ #
97
+ # @option kwargs [2, 8, 10, 16, nil] base
98
+ # The numerical base that the hexdumped numbers are encoded in.
99
+ #
100
+ # @option kwargs [Boolean] named_chars
101
+ # Indicates to parse `od`-style named characters (ex: `nul`,
102
+ # `del`, etc).
103
+ #
104
+ # @return [String]
105
+ # The raw-data from the hexdump.
106
+ #
107
+ # @raise [ArgumentError]
108
+ # Unsupported `type:` value, or the `format:` was not `:hexdump` or
109
+ # `:od`.
110
+ #
111
+ # @api public
112
+ #
113
+ def self.unhexdump(path,**kwargs)
114
+ parser = Ronin::Support::Binary::Hexdump::Parser.new(**kwargs)
115
+ parser.unhexdump(new(path))
116
+ end
117
+
118
+ end
@@ -0,0 +1,115 @@
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/hexdump/parser'
20
+
21
+ class String
22
+
23
+ #
24
+ # Converts a multitude of hexdump formats back into raw-data.
25
+ #
26
+ # @param [Hash{Symbol => Object}] kwargs
27
+ # Additional keyword arguments for
28
+ # {Ronin::Support::Binary::Hexdump::Parser#initialize}.
29
+ #
30
+ # @option kwargs [:od, :hexdump] :format (:hexdump)
31
+ # The expected format of the hexdump. Must be either `:od` or
32
+ # `:hexdump`.
33
+ #
34
+ # @option kwargs [Symbol] :type (:byte)
35
+ # Denotes the encoding used for the bytes within the hexdump.
36
+ # Must be one of the following:
37
+ # * `:byte`
38
+ # * `:char`
39
+ # * `:uint8`
40
+ # * `:uint16`
41
+ # * `:uint32`
42
+ # * `:uint64`
43
+ # * `:int8`
44
+ # * `:int16`
45
+ # * `:int32`
46
+ # * `:int64`
47
+ # * `:uchar`
48
+ # * `:ushort`
49
+ # * `:uint`
50
+ # * `:ulong`
51
+ # * `:ulong_long`
52
+ # * `:short`
53
+ # * `:int`
54
+ # * `:long`
55
+ # * `:long_long`
56
+ # * `:float`
57
+ # * `:double`
58
+ # * `:float_le`
59
+ # * `:double_le`
60
+ # * `:float_be`
61
+ # * `:double_be`
62
+ # * `:uint16_le`
63
+ # * `:uint32_le`
64
+ # * `:uint64_le`
65
+ # * `:int16_le`
66
+ # * `:int32_le`
67
+ # * `:int64_le`
68
+ # * `:uint16_be`
69
+ # * `:uint32_be`
70
+ # * `:uint64_be`
71
+ # * `:int16_be`
72
+ # * `:int32_be`
73
+ # * `:int64_be`
74
+ # * `:ushort_le`
75
+ # * `:uint_le`
76
+ # * `:ulong_le`
77
+ # * `:ulong_long_le`
78
+ # * `:short_le`
79
+ # * `:int_le`
80
+ # * `:long_le`
81
+ # * `:long_long_le`
82
+ # * `:ushort_be`
83
+ # * `:uint_be`
84
+ # * `:ulong_be`
85
+ # * `:ulong_long_be`
86
+ # * `:short_be`
87
+ # * `:int_be`
88
+ # * `:long_be`
89
+ # * `:long_long_be`
90
+ #
91
+ # @option kwargs [2, 8, 10, 16, nil] :address_base
92
+ # The numerical base that the offset addresses are encoded in.
93
+ #
94
+ # @option kwargs [2, 8, 10, 16, nil] base
95
+ # The numerical base that the hexdumped numbers are encoded in.
96
+ #
97
+ # @option kwargs [Boolean] named_chars
98
+ # Indicates to parse `od`-style named characters (ex: `nul`,
99
+ # `del`, etc).
100
+ #
101
+ # @return [String]
102
+ # The raw-data from the hexdump.
103
+ #
104
+ # @raise [ArgumentError]
105
+ # Unsupported `type:` value, or the `format:` was not `:hexdump` or
106
+ # `:od`.
107
+ #
108
+ # @api public
109
+ #
110
+ def unhexdump(**kwargs)
111
+ parser = Ronin::Support::Binary::Hexdump::Parser.new(**kwargs)
112
+ parser.unhexdump(self)
113
+ end
114
+
115
+ 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/binary/hexdump/core_ext/string'
20
+ require 'ronin/support/binary/hexdump/core_ext/file'