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
@@ -1,110 +0,0 @@
1
- #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
3
- #
4
- # This file is part of Ronin Support.
5
- #
6
- # Ronin Support is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU Lesser General Public License as published
8
- # by the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # Ronin Support is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public License
17
- # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
18
- #
19
-
20
- require 'ronin/fuzzing/fuzzing'
21
- require 'ronin/extensions/regexp'
22
-
23
- require 'strscan'
24
-
25
- module Ronin
26
- module Fuzzing
27
- #
28
- # Fuzzing class that incrementally fuzzes a String, given substitution
29
- # rules.
30
- #
31
- # @api semipublic
32
- #
33
- # @since 0.5.0
34
- #
35
- class Fuzzer
36
-
37
- # Patterns and their substitutions
38
- attr_reader :rules
39
-
40
- #
41
- # Initializes a new Fuzzer.
42
- #
43
- # @param [Hash{Regexp,String,Symbol => Enumerable,Symbol}] rules
44
- # Patterns and their substitutions.
45
- #
46
- def initialize(rules)
47
- @rules = {}
48
-
49
- rules.each do |pattern,substitution|
50
- pattern = case pattern
51
- when Regexp then pattern
52
- when String then Regexp.new(Regexp.escape(pattern))
53
- when Symbol then Regexp.const_get(pattern.to_s.upcase)
54
- else
55
- raise(TypeError,"cannot convert #{pattern.inspect} to a Regexp")
56
- end
57
-
58
- substitution = case substitution
59
- when Enumerable then substitution
60
- when Symbol then Fuzzing[substitution]
61
- else
62
- raise(TypeError,"substitutions must be Enumerable or a Symbol")
63
- end
64
-
65
- @rules[pattern] = substitution
66
- end
67
- end
68
-
69
- #
70
- # Incrementally fuzzes the String.
71
- #
72
- # @yield [fuzz]
73
- # The given block will be passed every fuzzed String.
74
- #
75
- # @yieldparam [String] fuzz
76
- # A fuzzed String.
77
- #
78
- # @return [Enumerator]
79
- # If no block is given, an Enumerator will be returned.
80
- #
81
- def each(string)
82
- return enum_for(__method__,string) unless block_given?
83
-
84
- @rules.each do |pattern,substitution|
85
- scanner = StringScanner.new(string)
86
- indices = []
87
-
88
- while scanner.scan_until(pattern)
89
- indices << [scanner.pos - scanner.matched_size, scanner.matched_size]
90
- end
91
-
92
- indices.each do |index,length|
93
- substitution.each do |substitute|
94
- substitute = case substitute
95
- when Proc then substitute[string[index,length]]
96
- when Integer then substitute.chr
97
- else substitute.to_s
98
- end
99
-
100
- fuzzed = string.dup
101
- fuzzed[index,length] = substitute
102
- yield fuzzed
103
- end
104
- end
105
- end
106
- end
107
-
108
- end
109
- end
110
- end
@@ -1,360 +0,0 @@
1
- #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
3
- #
4
- # This file is part of Ronin Support.
5
- #
6
- # Ronin Support is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU Lesser General Public License as published
8
- # by the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # Ronin Support is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public License
17
- # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
18
- #
19
-
20
- require 'set'
21
-
22
- module Ronin
23
- #
24
- # Contains class-methods which generate malicious data for fuzzing.
25
- #
26
- # @see Fuzzing.[]
27
- #
28
- # @since 0.4.0
29
- #
30
- module Fuzzing
31
- # Short String lengths
32
- SHORT_LENGTHS = SortedSet[1, 100, 500, 1_000, 10_000]
33
-
34
- # Long String lengths
35
- LONG_LENGTHS = SortedSet[
36
- 128, 255, 256, 257, 511, 512, 513, 1023, 1024, 2048, 2049, 4095,
37
- 4096, 4097, 5_000, 10_000, 20_000, 32762, 32763, 32764, 32765, 32766,
38
- 32767, 32768, 32769,
39
- 0xffff-2, 0xffff-1, 0xffff, 0xffff+1, 0xffff+2,
40
- 99_999, 100_000, 500_000, 1_000_000
41
- ]
42
-
43
- # Null bytes in various encodings
44
- NULL_BYTES = ['%00', '%u0000', "\x00"]
45
-
46
- # Newline characters
47
- NEW_LINES = ["\n", "\r", "\n\r"]
48
-
49
- # Format String flags
50
- FORMAT_STRINGS = ['%p', '%s', '%n']
51
-
52
- #
53
- # Returns a fuzzer method.
54
- #
55
- # @param [Symbol] name
56
- # The name of the fuzzer to return.
57
- #
58
- # @return [Enumerator]
59
- # An Enumerator for the fuzzer method.
60
- #
61
- # @raise [NoMethodError]
62
- # The fuzzing method could not be found.
63
- #
64
- # @api semipublic
65
- #
66
- def self.[](name)
67
- if (!respond_to?(name) || Module.respond_to?(name))
68
- raise(NoMethodError,"no such fuzzing method: #{name}")
69
- end
70
-
71
- return enum_for(name)
72
- end
73
-
74
- module_function
75
-
76
- #
77
- # Various bad-strings.
78
- #
79
- # @yield [string]
80
- # The given block will be passed each bad-string.
81
- #
82
- # @yieldparam [String] string
83
- # A bad-string containing known control characters, deliminators
84
- # or null-bytes (see {NULL_BYTES}), of varying length
85
- # (see {SHORT_LENGTHS} and {LONG_LENGTHS}).
86
- #
87
- def bad_strings(&block)
88
- yield ''
89
-
90
- chars = [
91
- 'A', 'a', '1', '<', '>', '"', "'", '/', "\\", '?', '=', 'a=', '&',
92
- '.', ',', '(', ')', ']', '[', '%', '*', '-', '+', '{', '}',
93
- "\x14", "\xfe", "\xff"
94
- ]
95
-
96
- chars.each do |c|
97
- LONG_LENGTHS.each { |length| yield c * length }
98
- end
99
-
100
- yield '!@#$%%^#$%#$@#$%$$@#$%^^**(()'
101
- yield '%01%02%03%04%0a%0d%0aADSF'
102
- yield '%01%02%03@%04%0a%0d%0aADSF'
103
-
104
- NULL_BYTES.each do |c|
105
- SHORT_LENGTHS.each { |length| yield c * length }
106
- end
107
-
108
- yield "%\xfe\xf0%\x00\xff"
109
- yield "%\xfe\xf0%\x00\xff" * 20
110
-
111
- SHORT_LENGTHS.each do |length|
112
- yield "\xde\xad\xbe\xef" * length
113
- end
114
-
115
- yield "\n\r" * 100
116
- yield "<>" * 500
117
- end
118
-
119
- #
120
- # Various format-strings.
121
- #
122
- # @yield [fmt_string]
123
- # The given block will be passed each format-string.
124
- #
125
- # @yieldparam [String] fmt_string
126
- # A format-string containing format operators (see {FORMAT_STRINGS}).
127
- #
128
- def format_strings(&block)
129
- FORMAT_STRINGS.each do |fmt|
130
- yield fmt
131
- yield fmt * 100
132
- yield fmt * 500
133
- yield "\"#{fmt}\"" * 500
134
- end
135
- end
136
-
137
- #
138
- # Various bad paths and directory traversals.
139
- #
140
- # @yield [path]
141
- # The given block will be passed each path.
142
- #
143
- # @yieldparam [String] path
144
- # A known bad path.
145
- #
146
- def bad_paths(&block)
147
- padding = 'A' * 5_000
148
-
149
- yield "/.:/#{padding}\x00\x00"
150
- yield "/.../#{padding}\x00\x00"
151
-
152
- yield "\\\\*"
153
- yield "\\\\?\\"
154
-
155
- yield "/\\" * 5_000
156
- yield '/.' * 5_000
157
-
158
- NULL_BYTES.each do |c|
159
- if c.start_with?('%')
160
- yield "#{c}/"
161
- yield "/#{c}"
162
- yield "/#{c}/"
163
- end
164
- end
165
- end
166
-
167
- #
168
- # The range of bit-fields.
169
- #
170
- # @yield [bitfield]
171
- # The given block will be passed each bit-field.
172
- #
173
- # @yieldparam [String] bitfield
174
- # A bit-field (8bit - 64bit).
175
- #
176
- def bit_fields(&block)
177
- ("\x00".."\xff").each do |c|
178
- yield c
179
- yield c << c # x2
180
- yield c << c # x4
181
- yield c << c # x8
182
- end
183
- end
184
-
185
- #
186
- # The range of signed bit-fields.
187
- #
188
- # @yield [bitfield]
189
- # The given block will be passed each bit-field.
190
- #
191
- # @yieldparam [String] bitfield
192
- # A signed bit-field (8bit - 64bit).
193
- #
194
- def signed_bit_fields(&block)
195
- ("\x80".."\xff").each do |c|
196
- yield c
197
- yield c << c # x2
198
- yield c << c # x4
199
- yield c << c # x8
200
- end
201
- end
202
-
203
- #
204
- # The range of unsigned 8bit integers.
205
- #
206
- # @yield [int]
207
- # The given block will be passed each integer.
208
- #
209
- # @yieldparam [String] int
210
- # A unsigned 8bit integer.
211
- #
212
- def uint8(&block)
213
- ("\x00".."\xff").each(&block)
214
- end
215
-
216
- #
217
- # The range of unsigned 16bit integers.
218
- #
219
- # @yield [int]
220
- # The given block will be passed each integer.
221
- #
222
- # @yieldparam [String] int
223
- # A unsigned 16bit integer.
224
- #
225
- def uint16
226
- uint8 { |c| yield c * 2 }
227
- end
228
-
229
- #
230
- # The range of unsigned 32bit integers.
231
- #
232
- # @yield [int]
233
- # The given block will be passed each integer.
234
- #
235
- # @yieldparam [String] int
236
- # A unsigned 32bit integer.
237
- #
238
- def uint32
239
- uint8 { |c| yield c * 4 }
240
- end
241
-
242
- #
243
- # The range of unsigned 64bit integers.
244
- #
245
- # @yield [int]
246
- # The given block will be passed each integer.
247
- #
248
- # @yieldparam [String] int
249
- # A unsigned 64bit integer.
250
- #
251
- def uint64
252
- uint8 { |c| yield c * 8 }
253
- end
254
-
255
- #
256
- # The range of signed 8bit integers.
257
- #
258
- # @yield [int]
259
- # The given block will be passed each integer.
260
- #
261
- # @yieldparam [String] int
262
- # A signed 8bit integer.
263
- #
264
- def int8(&block)
265
- ("\x00".."\x70").each(&block)
266
- end
267
-
268
- #
269
- # The range of signed 16bit integers.
270
- #
271
- # @yield [int]
272
- # The given block will be passed each integer.
273
- #
274
- # @yieldparam [String] int
275
- # A signed 16bit integer.
276
- #
277
- def int16
278
- int8 { |c| yield c * 2 }
279
- end
280
-
281
- #
282
- # The range of signed 32bit integers.
283
- #
284
- # @yield [int]
285
- # The given block will be passed each integer.
286
- #
287
- # @yieldparam [String] int
288
- # A signed 32bit integer.
289
- #
290
- def int32
291
- int8 { |c| yield c * 4 }
292
- end
293
-
294
- #
295
- # The range of signed 64bit integers.
296
- #
297
- # @yield [int]
298
- # The given block will be passed each integer.
299
- #
300
- # @yieldparam [String] int
301
- # A signed 64bit integer.
302
- #
303
- def int64
304
- int8 { |c| yield c * 8 }
305
- end
306
-
307
- #
308
- # The range of negative-signed 8bit integers.
309
- #
310
- # @yield [int]
311
- # The given block will be passed each integer.
312
- #
313
- # @yieldparam [String] int
314
- # A negative-signed 8bit integer.
315
- #
316
- def sint8(&block)
317
- ("\x80".."\xff").each(&block)
318
- end
319
-
320
- #
321
- # The range of negative-signed 16bit integers.
322
- #
323
- # @yield [int]
324
- # The given block will be passed each integer.
325
- #
326
- # @yieldparam [String] int
327
- # A negative-signed 16bit integer.
328
- #
329
- def sint16
330
- sint8 { |c| yield c * 2 }
331
- end
332
-
333
- #
334
- # The range of negative-signed 32bit integers.
335
- #
336
- # @yield [int]
337
- # The given block will be passed each integer.
338
- #
339
- # @yieldparam [String] int
340
- # A negative-signed 32bit integer.
341
- #
342
- def sint32
343
- sint8 { |c| yield c * 4 }
344
- end
345
-
346
- #
347
- # The range of negative-signed 64bit integers.
348
- #
349
- # @yield [int]
350
- # The given block will be passed each integer.
351
- #
352
- # @yieldparam [String] int
353
- # A negative-signed 64bit integer.
354
- #
355
- def sint64
356
- sint8 { |c| yield c * 8 }
357
- end
358
-
359
- end
360
- end
@@ -1,161 +0,0 @@
1
- #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
3
- #
4
- # This file is part of Ronin Support.
5
- #
6
- # Ronin Support is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU Lesser General Public License as published
8
- # by the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # Ronin Support is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public License
17
- # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
18
- #
19
-
20
- require 'ronin/fuzzing/fuzzing'
21
- require 'ronin/extensions/regexp'
22
-
23
- require 'combinatorics/list_comprehension'
24
- require 'combinatorics/power_set'
25
- require 'combinatorics/generator'
26
- require 'strscan'
27
- require 'set'
28
-
29
- module Ronin
30
- module Fuzzing
31
- #
32
- # Fuzzer class that permutates over every mutation of a String, given
33
- # mutation rules.
34
- #
35
- # @api semipublic
36
- #
37
- # @since 0.5.0
38
- #
39
- class Mutator
40
-
41
- # Mutation rules
42
- attr_reader :rules
43
-
44
- #
45
- # Initialize the Mutator.
46
- #
47
- # @param [Hash{Regexp,String,Symbol => Symbol,Enumerable}] rules
48
- # The patterns and substitutions to mutate the String with.
49
- #
50
- # @raise [TypeError]
51
- # A mutation pattern was not a Regexp, String or Symbol.
52
- # A mutation substitution was not a Symbol or Enumerable.
53
- #
54
- def initialize(rules)
55
- @rules = {}
56
-
57
- rules.each do |pattern,mutation|
58
- pattern = case pattern
59
- when Regexp
60
- pattern
61
- when String
62
- Regexp.new(Regexp.escape(pattern))
63
- when Symbol
64
- Regexp.const_get(pattern.to_s.upcase)
65
- else
66
- raise(TypeError,"cannot convert #{pattern.inspect} to a Regexp")
67
- end
68
-
69
- mutation = case mutation
70
- when Enumerable
71
- mutation
72
- when Symbol
73
- Ronin::Fuzzing[mutation]
74
- else
75
- raise(TypeError,"mutation #{mutation.inspect} must be a Symbol or Enumerable")
76
- end
77
-
78
- @rules[pattern] = mutation
79
- end
80
- end
81
-
82
- #
83
- # Permutes over every possible mutation of the String.
84
- #
85
- # @param [String] string
86
- # The String to be mutated.
87
- #
88
- # @yield [mutant]
89
- # The given block will be yielded every possible mutant String.
90
- #
91
- # @yieldparam [String] mutant
92
- # A mutated String.
93
- #
94
- # @return [Enumerator]
95
- # If no block is given, an Enumerator will be returned.
96
- #
97
- def each(string)
98
- return enum_for(__method__,string) unless block_given?
99
-
100
- matches = Set[]
101
-
102
- @rules.each do |pattern,mutation|
103
- scanner = StringScanner.new(string)
104
-
105
- while scanner.scan_until(pattern)
106
- length = scanner.matched_size
107
- index = scanner.pos - length
108
- original = scanner.matched
109
-
110
- mutator = Combinatorics::Generator.new do |g|
111
- mutation.each do |mutate|
112
- g.yield case mutate
113
- when Proc
114
- mutate.call(original)
115
- when Integer
116
- mutate.chr
117
- else
118
- mutate.to_s
119
- end
120
- end
121
- end
122
-
123
- matches << [index, length, mutator]
124
- end
125
- end
126
-
127
- matches.powerset do |submatches|
128
- # ignore the empty Set
129
- next if submatches.empty?
130
-
131
- # sort the submatches by index
132
- submatches = submatches.sort_by { |index,length,mutator| index }
133
- sets = []
134
- prev_index = 0
135
-
136
- submatches.each do |index,length,mutator|
137
- # add the previous substring to the set of Strings
138
- if index > prev_index
139
- sets << [string[prev_index,index - prev_index]]
140
- end
141
-
142
- # add the mutator to the set of Strings
143
- sets << mutator
144
-
145
- prev_index = index + length
146
- end
147
-
148
- # add the remaining substring to the set of Strings
149
- if prev_index < string.length
150
- sets << [string[prev_index..-1]]
151
- end
152
-
153
- sets.comprehension { |strings| yield strings.join }
154
- end
155
-
156
- return nil
157
- end
158
-
159
- end
160
- end
161
- end
@@ -1,81 +0,0 @@
1
- #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
3
- #
4
- # This file is part of Ronin Support.
5
- #
6
- # Ronin Support is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU Lesser General Public License as published
8
- # by the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # Ronin Support is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public License
17
- # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
18
- #
19
-
20
- module Ronin
21
- module Fuzzing
22
- #
23
- # Fuzzing class that generates repeated data.
24
- #
25
- # @api semipublic
26
- #
27
- # @since 0.5.0
28
- #
29
- class Repeater
30
-
31
- # The lengths to repeat the data by
32
- attr_reader :lengths
33
-
34
- #
35
- # Initializes a new Repeater.
36
- #
37
- # @param [Enumerable, Integer] lengths
38
- # The lengths to repeat the data by.
39
- #
40
- # @raise [TypeError]
41
- # `lengths` must either be Enumerable or an Integer.
42
- #
43
- def initialize(lengths)
44
- @lengths = case lengths
45
- when Integer
46
- [lengths]
47
- when Enumerable
48
- lengths
49
- else
50
- raise(TypeError,"argument must be Enumerable or an Integer")
51
- end
52
- end
53
-
54
- #
55
- # Enumerates through each length of repeated data.
56
- #
57
- # @param [#*] repeatable
58
- # The repeatable data.
59
- #
60
- # @yield [repeated]
61
- # The given block will be passed every repeated String.
62
- #
63
- # @yieldparam [String] repeated
64
- # A repeated version of the String.
65
- #
66
- # @return [Enumerator]
67
- # If no block is given, an Enumerator will be returned.
68
- #
69
- def each(repeatable)
70
- return enum_for(__method__,repeatable) unless block_given?
71
-
72
- @lengths.each do |length|
73
- yield(repeatable * length)
74
- end
75
-
76
- return nil
77
- end
78
-
79
- end
80
- end
81
- end