librex 0.0.1

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 (370) hide show
  1. data/README +4 -0
  2. data/lib/rex.rb +101 -0
  3. data/lib/rex.rb.ts.rb +70 -0
  4. data/lib/rex/LICENSE +29 -0
  5. data/lib/rex/arch.rb +103 -0
  6. data/lib/rex/arch/sparc.rb +75 -0
  7. data/lib/rex/arch/sparc.rb.ut.rb +18 -0
  8. data/lib/rex/arch/x86.rb +513 -0
  9. data/lib/rex/arch/x86.rb.ut.rb +93 -0
  10. data/lib/rex/assembly/nasm.rb +100 -0
  11. data/lib/rex/assembly/nasm.rb.ut.rb +22 -0
  12. data/lib/rex/codepage.map +104 -0
  13. data/lib/rex/compat.rb +281 -0
  14. data/lib/rex/constants.rb +113 -0
  15. data/lib/rex/elfparsey.rb +11 -0
  16. data/lib/rex/elfparsey/elf.rb +123 -0
  17. data/lib/rex/elfparsey/elfbase.rb +260 -0
  18. data/lib/rex/elfparsey/exceptions.rb +27 -0
  19. data/lib/rex/elfscan.rb +12 -0
  20. data/lib/rex/elfscan/scanner.rb +207 -0
  21. data/lib/rex/elfscan/search.rb +46 -0
  22. data/lib/rex/encoder/alpha2.rb +31 -0
  23. data/lib/rex/encoder/alpha2/alpha_mixed.rb +68 -0
  24. data/lib/rex/encoder/alpha2/alpha_upper.rb +79 -0
  25. data/lib/rex/encoder/alpha2/generic.rb +113 -0
  26. data/lib/rex/encoder/alpha2/unicode_mixed.rb +117 -0
  27. data/lib/rex/encoder/alpha2/unicode_upper.rb +129 -0
  28. data/lib/rex/encoder/ndr.rb +89 -0
  29. data/lib/rex/encoder/ndr.rb.ut.rb +44 -0
  30. data/lib/rex/encoder/nonalpha.rb +61 -0
  31. data/lib/rex/encoder/nonupper.rb +64 -0
  32. data/lib/rex/encoder/xdr.rb +106 -0
  33. data/lib/rex/encoder/xdr.rb.ut.rb +29 -0
  34. data/lib/rex/encoder/xor.rb +69 -0
  35. data/lib/rex/encoder/xor/dword.rb +13 -0
  36. data/lib/rex/encoder/xor/dword_additive.rb +13 -0
  37. data/lib/rex/encoders/xor_dword.rb +35 -0
  38. data/lib/rex/encoders/xor_dword_additive.rb +53 -0
  39. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +12 -0
  40. data/lib/rex/encoding/xor.rb +20 -0
  41. data/lib/rex/encoding/xor.rb.ts.rb +14 -0
  42. data/lib/rex/encoding/xor/byte.rb +15 -0
  43. data/lib/rex/encoding/xor/byte.rb.ut.rb +21 -0
  44. data/lib/rex/encoding/xor/dword.rb +21 -0
  45. data/lib/rex/encoding/xor/dword.rb.ut.rb +15 -0
  46. data/lib/rex/encoding/xor/dword_additive.rb +92 -0
  47. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +15 -0
  48. data/lib/rex/encoding/xor/exceptions.rb +17 -0
  49. data/lib/rex/encoding/xor/generic.rb +146 -0
  50. data/lib/rex/encoding/xor/generic.rb.ut.rb +120 -0
  51. data/lib/rex/encoding/xor/qword.rb +15 -0
  52. data/lib/rex/encoding/xor/word.rb +21 -0
  53. data/lib/rex/encoding/xor/word.rb.ut.rb +13 -0
  54. data/lib/rex/exceptions.rb +275 -0
  55. data/lib/rex/exceptions.rb.ut.rb +44 -0
  56. data/lib/rex/exploitation/cmdstager.rb +133 -0
  57. data/lib/rex/exploitation/egghunter.rb +143 -0
  58. data/lib/rex/exploitation/egghunter.rb.ut.rb +25 -0
  59. data/lib/rex/exploitation/encryptjs.rb +77 -0
  60. data/lib/rex/exploitation/heaplib.js.b64 +331 -0
  61. data/lib/rex/exploitation/heaplib.rb +94 -0
  62. data/lib/rex/exploitation/javascriptosdetect.rb +735 -0
  63. data/lib/rex/exploitation/obfuscatejs.rb +335 -0
  64. data/lib/rex/exploitation/opcodedb.rb +818 -0
  65. data/lib/rex/exploitation/opcodedb.rb.ut.rb +279 -0
  66. data/lib/rex/exploitation/seh.rb +92 -0
  67. data/lib/rex/exploitation/seh.rb.ut.rb +19 -0
  68. data/lib/rex/file.rb +84 -0
  69. data/lib/rex/file.rb.ut.rb +16 -0
  70. data/lib/rex/image_source.rb +12 -0
  71. data/lib/rex/image_source/disk.rb +60 -0
  72. data/lib/rex/image_source/image_source.rb +46 -0
  73. data/lib/rex/image_source/memory.rb +37 -0
  74. data/lib/rex/io/bidirectional_pipe.rb +157 -0
  75. data/lib/rex/io/datagram_abstraction.rb +35 -0
  76. data/lib/rex/io/stream.rb +313 -0
  77. data/lib/rex/io/stream_abstraction.rb +186 -0
  78. data/lib/rex/io/stream_server.rb +211 -0
  79. data/lib/rex/job_container.rb +202 -0
  80. data/lib/rex/logging.rb +4 -0
  81. data/lib/rex/logging/log_dispatcher.rb +179 -0
  82. data/lib/rex/logging/log_sink.rb +42 -0
  83. data/lib/rex/logging/sinks/flatfile.rb +55 -0
  84. data/lib/rex/logging/sinks/stderr.rb +43 -0
  85. data/lib/rex/machparsey.rb +9 -0
  86. data/lib/rex/machparsey/exceptions.rb +34 -0
  87. data/lib/rex/machparsey/mach.rb +209 -0
  88. data/lib/rex/machparsey/machbase.rb +408 -0
  89. data/lib/rex/machscan.rb +9 -0
  90. data/lib/rex/machscan/scanner.rb +217 -0
  91. data/lib/rex/mime.rb +9 -0
  92. data/lib/rex/mime/header.rb +75 -0
  93. data/lib/rex/mime/message.rb +112 -0
  94. data/lib/rex/mime/part.rb +20 -0
  95. data/lib/rex/nop/opty2.rb +108 -0
  96. data/lib/rex/nop/opty2.rb.ut.rb +23 -0
  97. data/lib/rex/nop/opty2_tables.rb +300 -0
  98. data/lib/rex/ole.rb +128 -0
  99. data/lib/rex/ole/clsid.rb +47 -0
  100. data/lib/rex/ole/difat.rb +141 -0
  101. data/lib/rex/ole/directory.rb +230 -0
  102. data/lib/rex/ole/direntry.rb +240 -0
  103. data/lib/rex/ole/fat.rb +99 -0
  104. data/lib/rex/ole/header.rb +204 -0
  105. data/lib/rex/ole/minifat.rb +77 -0
  106. data/lib/rex/ole/samples/create_ole.rb +27 -0
  107. data/lib/rex/ole/samples/dir.rb +35 -0
  108. data/lib/rex/ole/samples/dump_stream.rb +34 -0
  109. data/lib/rex/ole/samples/ole_info.rb +23 -0
  110. data/lib/rex/ole/storage.rb +395 -0
  111. data/lib/rex/ole/stream.rb +53 -0
  112. data/lib/rex/ole/substorage.rb +49 -0
  113. data/lib/rex/ole/util.rb +157 -0
  114. data/lib/rex/parser/arguments.rb +97 -0
  115. data/lib/rex/parser/arguments.rb.ut.rb +67 -0
  116. data/lib/rex/parser/ini.rb +185 -0
  117. data/lib/rex/parser/ini.rb.ut.rb +29 -0
  118. data/lib/rex/parser/nmap_xml.rb +111 -0
  119. data/lib/rex/payloads.rb +1 -0
  120. data/lib/rex/payloads/win32.rb +2 -0
  121. data/lib/rex/payloads/win32/common.rb +26 -0
  122. data/lib/rex/payloads/win32/kernel.rb +53 -0
  123. data/lib/rex/payloads/win32/kernel/common.rb +54 -0
  124. data/lib/rex/payloads/win32/kernel/migration.rb +12 -0
  125. data/lib/rex/payloads/win32/kernel/recovery.rb +50 -0
  126. data/lib/rex/payloads/win32/kernel/stager.rb +171 -0
  127. data/lib/rex/peparsey.rb +12 -0
  128. data/lib/rex/peparsey/exceptions.rb +32 -0
  129. data/lib/rex/peparsey/pe.rb +188 -0
  130. data/lib/rex/peparsey/pe_memdump.rb +63 -0
  131. data/lib/rex/peparsey/pebase.rb +1655 -0
  132. data/lib/rex/peparsey/section.rb +136 -0
  133. data/lib/rex/pescan.rb +13 -0
  134. data/lib/rex/pescan/analyze.rb +309 -0
  135. data/lib/rex/pescan/scanner.rb +206 -0
  136. data/lib/rex/pescan/search.rb +56 -0
  137. data/lib/rex/platforms.rb +1 -0
  138. data/lib/rex/platforms/windows.rb +51 -0
  139. data/lib/rex/poly.rb +132 -0
  140. data/lib/rex/poly/block.rb +468 -0
  141. data/lib/rex/poly/register.rb +100 -0
  142. data/lib/rex/poly/register/x86.rb +40 -0
  143. data/lib/rex/post.rb +8 -0
  144. data/lib/rex/post/dir.rb +51 -0
  145. data/lib/rex/post/file.rb +172 -0
  146. data/lib/rex/post/file_stat.rb +220 -0
  147. data/lib/rex/post/gen.pl +13 -0
  148. data/lib/rex/post/io.rb +182 -0
  149. data/lib/rex/post/meterpreter.rb +4 -0
  150. data/lib/rex/post/meterpreter/channel.rb +438 -0
  151. data/lib/rex/post/meterpreter/channel_container.rb +54 -0
  152. data/lib/rex/post/meterpreter/channels/pool.rb +160 -0
  153. data/lib/rex/post/meterpreter/channels/pools/file.rb +62 -0
  154. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +103 -0
  155. data/lib/rex/post/meterpreter/channels/stream.rb +87 -0
  156. data/lib/rex/post/meterpreter/client.rb +335 -0
  157. data/lib/rex/post/meterpreter/client_core.rb +274 -0
  158. data/lib/rex/post/meterpreter/dependencies.rb +3 -0
  159. data/lib/rex/post/meterpreter/extension.rb +32 -0
  160. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +58 -0
  161. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +16 -0
  162. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +94 -0
  163. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +21 -0
  164. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +118 -0
  165. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +61 -0
  166. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +104 -0
  167. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +28 -0
  168. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +100 -0
  169. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +24 -0
  170. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +333 -0
  171. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +273 -0
  172. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +235 -0
  173. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +103 -0
  174. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +48 -0
  175. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +144 -0
  176. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +73 -0
  177. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +56 -0
  178. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +137 -0
  179. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +167 -0
  180. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +167 -0
  181. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +192 -0
  182. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +139 -0
  183. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +97 -0
  184. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +184 -0
  185. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +41 -0
  186. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +61 -0
  187. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +361 -0
  188. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +129 -0
  189. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +55 -0
  190. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +336 -0
  191. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +141 -0
  192. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +279 -0
  193. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +182 -0
  194. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +102 -0
  195. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +174 -0
  196. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +185 -0
  197. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +227 -0
  198. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +30 -0
  199. data/lib/rex/post/meterpreter/object_aliases.rb +83 -0
  200. data/lib/rex/post/meterpreter/packet.rb +596 -0
  201. data/lib/rex/post/meterpreter/packet_dispatcher.rb +409 -0
  202. data/lib/rex/post/meterpreter/packet_parser.rb +94 -0
  203. data/lib/rex/post/meterpreter/packet_response_waiter.rb +83 -0
  204. data/lib/rex/post/meterpreter/ui/console.rb +135 -0
  205. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +62 -0
  206. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +595 -0
  207. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +108 -0
  208. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +241 -0
  209. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +61 -0
  210. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +98 -0
  211. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +51 -0
  212. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +132 -0
  213. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +187 -0
  214. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +63 -0
  215. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +376 -0
  216. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +270 -0
  217. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +484 -0
  218. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +315 -0
  219. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +95 -0
  220. data/lib/rex/post/permission.rb +26 -0
  221. data/lib/rex/post/process.rb +57 -0
  222. data/lib/rex/post/thread.rb +57 -0
  223. data/lib/rex/post/ui.rb +52 -0
  224. data/lib/rex/proto.rb +12 -0
  225. data/lib/rex/proto.rb.ts.rb +8 -0
  226. data/lib/rex/proto/dcerpc.rb +6 -0
  227. data/lib/rex/proto/dcerpc.rb.ts.rb +9 -0
  228. data/lib/rex/proto/dcerpc/client.rb +358 -0
  229. data/lib/rex/proto/dcerpc/client.rb.ut.rb +491 -0
  230. data/lib/rex/proto/dcerpc/exceptions.rb +150 -0
  231. data/lib/rex/proto/dcerpc/handle.rb +47 -0
  232. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +85 -0
  233. data/lib/rex/proto/dcerpc/ndr.rb +72 -0
  234. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +41 -0
  235. data/lib/rex/proto/dcerpc/packet.rb +253 -0
  236. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +56 -0
  237. data/lib/rex/proto/dcerpc/response.rb +186 -0
  238. data/lib/rex/proto/dcerpc/response.rb.ut.rb +15 -0
  239. data/lib/rex/proto/dcerpc/uuid.rb +84 -0
  240. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +46 -0
  241. data/lib/rex/proto/drda.rb +5 -0
  242. data/lib/rex/proto/drda.rb.ts.rb +17 -0
  243. data/lib/rex/proto/drda/constants.rb +49 -0
  244. data/lib/rex/proto/drda/constants.rb.ut.rb +23 -0
  245. data/lib/rex/proto/drda/packet.rb +252 -0
  246. data/lib/rex/proto/drda/packet.rb.ut.rb +109 -0
  247. data/lib/rex/proto/drda/utils.rb +123 -0
  248. data/lib/rex/proto/drda/utils.rb.ut.rb +84 -0
  249. data/lib/rex/proto/http.rb +5 -0
  250. data/lib/rex/proto/http.rb.ts.rb +12 -0
  251. data/lib/rex/proto/http/client.rb +817 -0
  252. data/lib/rex/proto/http/client.rb.ut.rb +93 -0
  253. data/lib/rex/proto/http/handler.rb +46 -0
  254. data/lib/rex/proto/http/handler/erb.rb +128 -0
  255. data/lib/rex/proto/http/handler/erb.rb.ut.rb +21 -0
  256. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +1 -0
  257. data/lib/rex/proto/http/handler/proc.rb +54 -0
  258. data/lib/rex/proto/http/handler/proc.rb.ut.rb +24 -0
  259. data/lib/rex/proto/http/header.rb +161 -0
  260. data/lib/rex/proto/http/header.rb.ut.rb +46 -0
  261. data/lib/rex/proto/http/packet.rb +394 -0
  262. data/lib/rex/proto/http/packet.rb.ut.rb +165 -0
  263. data/lib/rex/proto/http/request.rb +356 -0
  264. data/lib/rex/proto/http/request.rb.ut.rb +214 -0
  265. data/lib/rex/proto/http/response.rb +85 -0
  266. data/lib/rex/proto/http/response.rb.ut.rb +149 -0
  267. data/lib/rex/proto/http/server.rb +367 -0
  268. data/lib/rex/proto/http/server.rb.ut.rb +79 -0
  269. data/lib/rex/proto/smb.rb +7 -0
  270. data/lib/rex/proto/smb.rb.ts.rb +8 -0
  271. data/lib/rex/proto/smb/client.rb +1733 -0
  272. data/lib/rex/proto/smb/client.rb.ut.rb +223 -0
  273. data/lib/rex/proto/smb/constants.rb +1062 -0
  274. data/lib/rex/proto/smb/constants.rb.ut.rb +18 -0
  275. data/lib/rex/proto/smb/crypt.rb +95 -0
  276. data/lib/rex/proto/smb/crypt.rb.ut.rb +20 -0
  277. data/lib/rex/proto/smb/evasions.rb +65 -0
  278. data/lib/rex/proto/smb/exceptions.rb +846 -0
  279. data/lib/rex/proto/smb/simpleclient.rb +292 -0
  280. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +128 -0
  281. data/lib/rex/proto/smb/utils.rb +514 -0
  282. data/lib/rex/proto/smb/utils.rb.ut.rb +20 -0
  283. data/lib/rex/proto/sunrpc.rb +1 -0
  284. data/lib/rex/proto/sunrpc/client.rb +195 -0
  285. data/lib/rex/script.rb +42 -0
  286. data/lib/rex/script/base.rb +59 -0
  287. data/lib/rex/script/meterpreter.rb +9 -0
  288. data/lib/rex/script/shell.rb +9 -0
  289. data/lib/rex/service.rb +48 -0
  290. data/lib/rex/service_manager.rb +141 -0
  291. data/lib/rex/service_manager.rb.ut.rb +32 -0
  292. data/lib/rex/services/local_relay.rb +423 -0
  293. data/lib/rex/socket.rb +586 -0
  294. data/lib/rex/socket.rb.ut.rb +86 -0
  295. data/lib/rex/socket/comm.rb +119 -0
  296. data/lib/rex/socket/comm/local.rb +409 -0
  297. data/lib/rex/socket/comm/local.rb.ut.rb +75 -0
  298. data/lib/rex/socket/ip.rb +129 -0
  299. data/lib/rex/socket/parameters.rb +345 -0
  300. data/lib/rex/socket/parameters.rb.ut.rb +51 -0
  301. data/lib/rex/socket/range_walker.rb +295 -0
  302. data/lib/rex/socket/range_walker.rb.ut.rb +55 -0
  303. data/lib/rex/socket/ssl_tcp.rb +184 -0
  304. data/lib/rex/socket/ssl_tcp.rb.ut.rb +39 -0
  305. data/lib/rex/socket/ssl_tcp_server.rb +122 -0
  306. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +51 -0
  307. data/lib/rex/socket/subnet_walker.rb +75 -0
  308. data/lib/rex/socket/subnet_walker.rb.ut.rb +28 -0
  309. data/lib/rex/socket/switch_board.rb +272 -0
  310. data/lib/rex/socket/switch_board.rb.ut.rb +52 -0
  311. data/lib/rex/socket/tcp.rb +76 -0
  312. data/lib/rex/socket/tcp.rb.ut.rb +64 -0
  313. data/lib/rex/socket/tcp_server.rb +67 -0
  314. data/lib/rex/socket/tcp_server.rb.ut.rb +44 -0
  315. data/lib/rex/socket/udp.rb +157 -0
  316. data/lib/rex/socket/udp.rb.ut.rb +44 -0
  317. data/lib/rex/struct2.rb +5 -0
  318. data/lib/rex/struct2/c_struct.rb +181 -0
  319. data/lib/rex/struct2/c_struct_template.rb +39 -0
  320. data/lib/rex/struct2/constant.rb +26 -0
  321. data/lib/rex/struct2/element.rb +44 -0
  322. data/lib/rex/struct2/generic.rb +73 -0
  323. data/lib/rex/struct2/restraint.rb +54 -0
  324. data/lib/rex/struct2/s_string.rb +72 -0
  325. data/lib/rex/struct2/s_struct.rb +111 -0
  326. data/lib/rex/sync.rb +6 -0
  327. data/lib/rex/sync/event.rb +94 -0
  328. data/lib/rex/sync/read_write_lock.rb +176 -0
  329. data/lib/rex/sync/ref.rb +57 -0
  330. data/lib/rex/sync/thread_safe.rb +82 -0
  331. data/lib/rex/test.rb +35 -0
  332. data/lib/rex/text.rb +1029 -0
  333. data/lib/rex/text.rb.ut.rb +168 -0
  334. data/lib/rex/time.rb +65 -0
  335. data/lib/rex/transformer.rb +115 -0
  336. data/lib/rex/transformer.rb.ut.rb +38 -0
  337. data/lib/rex/ui.rb +21 -0
  338. data/lib/rex/ui/interactive.rb +252 -0
  339. data/lib/rex/ui/output.rb +80 -0
  340. data/lib/rex/ui/output/none.rb +18 -0
  341. data/lib/rex/ui/progress_tracker.rb +96 -0
  342. data/lib/rex/ui/subscriber.rb +149 -0
  343. data/lib/rex/ui/text/color.rb +97 -0
  344. data/lib/rex/ui/text/color.rb.ut.rb +18 -0
  345. data/lib/rex/ui/text/dispatcher_shell.rb +382 -0
  346. data/lib/rex/ui/text/input.rb +117 -0
  347. data/lib/rex/ui/text/input/buffer.rb +75 -0
  348. data/lib/rex/ui/text/input/readline.rb +129 -0
  349. data/lib/rex/ui/text/input/socket.rb +95 -0
  350. data/lib/rex/ui/text/input/stdio.rb +45 -0
  351. data/lib/rex/ui/text/irb_shell.rb +55 -0
  352. data/lib/rex/ui/text/output.rb +80 -0
  353. data/lib/rex/ui/text/output/buffer.rb +65 -0
  354. data/lib/rex/ui/text/output/file.rb +37 -0
  355. data/lib/rex/ui/text/output/socket.rb +43 -0
  356. data/lib/rex/ui/text/output/stdio.rb +40 -0
  357. data/lib/rex/ui/text/progress_tracker.rb +56 -0
  358. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +34 -0
  359. data/lib/rex/ui/text/shell.rb +321 -0
  360. data/lib/rex/ui/text/table.rb +254 -0
  361. data/lib/rex/ui/text/table.rb.ut.rb +55 -0
  362. data/lib/rex/zip.rb +93 -0
  363. data/lib/rex/zip/archive.rb +91 -0
  364. data/lib/rex/zip/blocks.rb +182 -0
  365. data/lib/rex/zip/entry.rb +95 -0
  366. data/lib/rex/zip/samples/comment.rb +32 -0
  367. data/lib/rex/zip/samples/mkwar.rb +138 -0
  368. data/lib/rex/zip/samples/mkzip.rb +19 -0
  369. data/lib/rex/zip/samples/recursive.rb +58 -0
  370. metadata +435 -0
@@ -0,0 +1,80 @@
1
+ require 'rex/ui'
2
+
3
+ module Rex
4
+ module Ui
5
+
6
+ ###
7
+ #
8
+ # This class acts as a generic base class for outputing data. It
9
+ # only provides stubs for the simplest form of outputing information.
10
+ #
11
+ ###
12
+ class Output
13
+
14
+ # General output
15
+ require 'rex/ui/output/none'
16
+
17
+ # Text-based output
18
+ require 'rex/ui/text/output'
19
+
20
+ attr_accessor :on_print_proc
21
+
22
+ #
23
+ # Prints an error message.
24
+ #
25
+ def print_error(msg='')
26
+ end
27
+
28
+ #
29
+ # Prints a 'good' message.
30
+ #
31
+ def print_good(msg='')
32
+ end
33
+
34
+ def print_debug(msg='')
35
+ end
36
+
37
+ #
38
+ # Prints a status line.
39
+ #
40
+ def print_status(msg='')
41
+ end
42
+
43
+ #
44
+ # Prints an undecorated line of information.
45
+ #
46
+ def print_line(msg='')
47
+ end
48
+
49
+ #
50
+ # Prints a message with no decoration.
51
+ #
52
+ def print(msg='')
53
+ end
54
+
55
+ #
56
+ # Flushes any buffered output.
57
+ #
58
+ def flush
59
+ end
60
+
61
+ #
62
+ # Called to tell the output medium that we're at a prompt.
63
+ # This is used to allow the output medium to display an extra
64
+ # carriage return
65
+ #
66
+ def prompting(v = true)
67
+ @at_prompt = v
68
+ end
69
+
70
+ #
71
+ # Returns whether or not we're at a prompt currently
72
+ #
73
+ def prompting?
74
+ @at_prompt
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,18 @@
1
+ require 'rex/ui'
2
+
3
+ module Rex
4
+ module Ui
5
+
6
+ ###
7
+ #
8
+ # This output medium implements all the required output routines but does not
9
+ # back them against any sort of device. This is basically meant to be put in
10
+ # place of something that expects to be able to deal with a functional output
11
+ # device when one does not actually exist.
12
+ #
13
+ ###
14
+ class Output::None < Rex::Ui::Output
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,96 @@
1
+ module Rex
2
+ module Ui
3
+
4
+ ###
5
+ #
6
+ # This module tracks the progress of an arbitrary task in a generic fashion.
7
+ # The actual implementation is left up to the thing that derives from this
8
+ # module.
9
+ #
10
+ ###
11
+ class ProgressTracker
12
+
13
+ require 'rex/ui/text/progress_tracker'
14
+
15
+ def initialize
16
+ self.start = 0
17
+ self.stop = 0
18
+ self.pos = 0
19
+ end
20
+
21
+ #
22
+ # Sets start and step using a range.
23
+ #
24
+ def range=(rng)
25
+ self.start = rng.begin
26
+ self.stop = rng.end
27
+ end
28
+
29
+ #
30
+ # Sets the start and resets the position.
31
+ #
32
+ def start=(start)
33
+ @start = start
34
+ self.pos = start
35
+ end
36
+
37
+ #
38
+ # Steps with a given message and step size.
39
+ #
40
+ def step(status = nil, n = 1)
41
+ self.pos += n if (self.pos + n <= self.stop)
42
+
43
+ step_status(status)
44
+
45
+ self.pos
46
+ end
47
+
48
+ #
49
+ # Resets the current step location.
50
+ #
51
+ def reset(n = self.start)
52
+ self.pos = n
53
+ end
54
+
55
+ #
56
+ # Passes a generic status message that isn't necessarily associated
57
+ # with a step event.
58
+ #
59
+ def status(msg = nil)
60
+ end
61
+
62
+ #
63
+ # Updates the status associated with the current step.
64
+ #
65
+ def step_status(msg = nil)
66
+ end
67
+
68
+ #
69
+ # An error occurred that may result in aborting the progress.
70
+ #
71
+ def error(msg = nil)
72
+ end
73
+
74
+ #
75
+ # Progress has been aborted, the reason is supplied in msg.
76
+ #
77
+ def abort(msg = nil)
78
+ end
79
+
80
+ #
81
+ # The start of the progress.
82
+ #
83
+ attr_reader :start
84
+ #
85
+ # The last position in the progress.
86
+ #
87
+ attr_accessor :stop
88
+ #
89
+ # The current position in the progress.
90
+ #
91
+ attr_accessor :pos
92
+
93
+ end
94
+
95
+ end
96
+ end
@@ -0,0 +1,149 @@
1
+ module Rex
2
+ module Ui
3
+
4
+ ###
5
+ #
6
+ # This module provides a subscriber interface to input/output.
7
+ #
8
+ ###
9
+ module Subscriber
10
+
11
+ ##
12
+ #
13
+ # Subscribes to the output half of the user interface.
14
+ #
15
+ ##
16
+ module Output
17
+
18
+ #
19
+ # Wraps user_output.print_line
20
+ #
21
+ def print_line(msg='')
22
+ if (user_output)
23
+ print_blank_line if user_output.prompting?
24
+ user_output.print_line(msg)
25
+ end
26
+ end
27
+
28
+ #
29
+ # Wraps user_output.print_status
30
+ #
31
+ def print_status(msg='')
32
+ if (user_output)
33
+ print_blank_line if user_output.prompting?
34
+ user_output.print_status(msg)
35
+ end
36
+ end
37
+
38
+ #
39
+ # Wraps user_output.print_error
40
+ #
41
+ def print_error(msg='')
42
+ if (user_output)
43
+ print_blank_line if user_output.prompting?
44
+ user_output.print_error(msg)
45
+ end
46
+ end
47
+
48
+ #
49
+ # Wraps user_output.print_good
50
+ #
51
+ def print_good(msg='')
52
+ if (user_output)
53
+ print_blank_line if user_output.prompting?
54
+ user_output.print_good(msg)
55
+ end
56
+ end
57
+
58
+ #
59
+ # Wraps user_output.print_debug
60
+ #
61
+ def print_debug(msg='')
62
+ if (user_output)
63
+ print_blank_line if user_output.prompting?
64
+ user_output.print_debug(msg)
65
+ end
66
+ end
67
+
68
+ #
69
+ # Wraps user_output.print
70
+ #
71
+ def print(msg='')
72
+ user_output.print(msg) if (user_output)
73
+ end
74
+
75
+ #
76
+ # Wraps user_output.flush
77
+ #
78
+ def flush
79
+ user_output.flush if (user_output)
80
+ end
81
+
82
+ #
83
+ # The user output handle.
84
+ #
85
+ attr_accessor :user_output
86
+
87
+ protected
88
+
89
+ #
90
+ # Prints a blank line. Used when the input is prompting.
91
+ #
92
+ def print_blank_line
93
+ user_output.prompting(false)
94
+ user_output.print_line
95
+ end
96
+
97
+ end
98
+
99
+ ##
100
+ #
101
+ # Subscribes to the input half of the user interface.
102
+ #
103
+ ##
104
+ module Input
105
+
106
+ #
107
+ # Gets a line of input from the user_input handle by calling gets.
108
+ #
109
+ def gets
110
+ user_input.gets if (user_input)
111
+ end
112
+
113
+ #
114
+ # The user intput handle.
115
+ #
116
+ attr_accessor :user_input
117
+
118
+ end
119
+
120
+ include Output
121
+ include Input
122
+
123
+ #
124
+ # Sets the input and output handles.
125
+ #
126
+ def init_ui(input = nil, output = nil)
127
+ self.user_input = input
128
+ self.user_output = output
129
+ end
130
+
131
+ #
132
+ # Disables input/output
133
+ #
134
+ def reset_ui
135
+ self.user_input = nil
136
+ self.user_output = nil
137
+ end
138
+
139
+ #
140
+ # Copy the user input and output handles from the supplied subscriber.
141
+ #
142
+ def copy_ui(subscriber)
143
+ init_ui(subscriber.user_input, subscriber.user_output)
144
+ end
145
+
146
+ end
147
+
148
+ end
149
+ end
@@ -0,0 +1,97 @@
1
+ module Rex
2
+ module Ui
3
+ module Text
4
+
5
+ ###
6
+ #
7
+ # This module provides an interface to getting ANSI color codes.
8
+ # It's taken mostly from perl's Term::ANSIColor by Russ Allbery
9
+ # <rra@stanford.edu> and Zenin <zenin@best.com>.
10
+ #
11
+ ###
12
+ module Color
13
+
14
+ AnsiAttributes =
15
+ {
16
+ 'clear' => 0,
17
+ 'reset' => 0,
18
+ 'bold' => 1,
19
+ 'dark' => 2,
20
+ 'underline' => 4,
21
+ 'underscore' => 4,
22
+ 'blink' => 5,
23
+ 'reverse' => 7,
24
+ 'concealed' => 8,
25
+ 'black' => 30, 'on_black' => 40,
26
+ 'red' => 31, 'on_red' => 41,
27
+ 'green' => 32, 'on_green' => 42,
28
+ 'yellow' => 33, 'on_yellow' => 43,
29
+ 'blue' => 34, 'on_blue' => 44,
30
+ 'magenta' => 35, 'on_magenta' => 45,
31
+ 'cyan' => 36, 'on_cyan' => 46,
32
+ 'white' => 37, 'on_white' => 47
33
+ }
34
+
35
+ #
36
+ # Return a string with ANSI codes substituted. Derived from code
37
+ # written by The FaerieMUD Consortium.
38
+ #
39
+ def ansi(*attrs)
40
+ attr = attrs.collect {|a| AnsiAttributes[a] ? AnsiAttributes[a] : nil}.compact.join(';')
41
+ attr = "\e[%sm" % attr if (attr.empty? == false)
42
+ return attr
43
+ end
44
+
45
+ #
46
+ # Colorize if this shell supports it
47
+ #
48
+ def colorize(*color)
49
+ supports_color?() ? ansi(*color) : ''
50
+ end
51
+
52
+ def substitute_colors(msg, in_prompt = nil)
53
+ str = msg.dup
54
+ pre_color = post_color = ''
55
+ if (in_prompt)
56
+ pre_color = "\x01" # RL_PROMPT_START_IGNORE
57
+ post_color = "\x02" # RL_PROMPT_END_IGNORE
58
+ end
59
+ str.gsub!(/%cya/, pre_color+colorize('cyan')+post_color)
60
+ str.gsub!(/%red/, pre_color+colorize('red')+post_color)
61
+ str.gsub!(/%grn/, pre_color+colorize('green')+post_color)
62
+ str.gsub!(/%blu/, pre_color+colorize('blue')+post_color)
63
+ str.gsub!(/%yel/, pre_color+colorize('yellow')+post_color)
64
+ str.gsub!(/%whi/, pre_color+colorize('white')+post_color)
65
+ str.gsub!(/%mag/, pre_color+colorize('magenta')+post_color)
66
+ str.gsub!(/%blk/, pre_color+colorize('black')+post_color)
67
+ str.gsub!(/%dred/, pre_color+colorize('dark', 'red')+post_color)
68
+ str.gsub!(/%dgrn/, pre_color+colorize('dark', 'green')+post_color)
69
+ str.gsub!(/%dblu/, pre_color+colorize('dark', 'blue')+post_color)
70
+ str.gsub!(/%dyel/, pre_color+colorize('dark', 'yellow')+post_color)
71
+ str.gsub!(/%dcya/, pre_color+colorize('dark', 'cyan')+post_color)
72
+ str.gsub!(/%dwhi/, pre_color+colorize('dark', 'white')+post_color)
73
+ str.gsub!(/%dmag/, pre_color+colorize('dark', 'magenta')+post_color)
74
+ str.gsub!(/%und/, pre_color+colorize('underline')+post_color)
75
+ str.gsub!(/%bld/, pre_color+colorize('bold')+post_color)
76
+ str.gsub!(/%clr/, pre_color+colorize('clear')+post_color)
77
+
78
+ str
79
+ end
80
+
81
+ #
82
+ # Resets coloring so that it's back to normal.
83
+ #
84
+ def reset_color
85
+ return if not supports_color?
86
+ print(colorize('clear'))
87
+ end
88
+
89
+ #
90
+ # Colorize if this shell supports it
91
+ #
92
+ def do_colorize(*color)
93
+ supports_color?() ? ansi(*color) : ''
94
+ end
95
+ end
96
+
97
+ end end end
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
4
+
5
+ require 'test/unit'
6
+ require 'rex/ui/text/color'
7
+
8
+ class Rex::Ui::Text::Color::UnitTest < Test::Unit::TestCase
9
+
10
+ def test_color
11
+ color = Rex::Ui::Text::Color.new.ansi('bold', 'red')
12
+ color += 'hey sup'
13
+ color += Rex::Ui::Text::Color.new.ansi('clear')
14
+
15
+ assert_equal("\e[1;31mhey sup\e[0m", color)
16
+ end
17
+
18
+ end