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,254 @@
1
+ module Rex
2
+ module Ui
3
+ module Text
4
+
5
+ ###
6
+ #
7
+ # Prints text in a tablized format. Pretty lame at the moment, but
8
+ # whatever.
9
+ #
10
+ ###
11
+ class Table
12
+
13
+ #
14
+ # Initializes a text table instance using the supplied properties. The
15
+ # Table class supports the following hash attributes:
16
+ #
17
+ # Header
18
+ #
19
+ # The string to display as a heading above the table. If none is
20
+ # specified, no header will be displayed.
21
+ #
22
+ # HeaderIndent
23
+ #
24
+ # The amount of space to indent the header. The default is zero.
25
+ #
26
+ # Columns
27
+ #
28
+ # The array of columns that will exist within the table.
29
+ #
30
+ # Rows
31
+ #
32
+ # The array of rows that will exist.
33
+ #
34
+ # Width
35
+ #
36
+ # The maximum width of the table in characters.
37
+ #
38
+ # Indent
39
+ #
40
+ # The number of characters to indent the table.
41
+ #
42
+ # CellPad
43
+ #
44
+ # The number of characters to put between each horizontal cell.
45
+ #
46
+ # Prefix
47
+ #
48
+ # The text to prefix before the table.
49
+ #
50
+ # Postfix
51
+ #
52
+ # The text to affix to the end of the table.
53
+ #
54
+ def initialize(opts = {})
55
+ self.header = opts['Header']
56
+ self.headeri = opts['HeaderIndent'] || 0
57
+ self.columns = opts['Columns'] || []
58
+ self.rows = opts['Rows'] || []
59
+
60
+ self.width = opts['Width'] || 80
61
+ self.indent = opts['Indent'] || 0
62
+ self.cellpad = opts['CellPad'] || 2
63
+ self.prefix = opts['Prefix'] || ''
64
+ self.postfix = opts['Postfix'] || ''
65
+ self.colprops = []
66
+
67
+ # Default column properties
68
+ self.columns.length.times { |idx|
69
+ self.colprops[idx] = {}
70
+ self.colprops[idx]['MaxWidth'] = self.columns[idx].length
71
+ }
72
+
73
+ # Merge in options
74
+ if (opts['ColProps'])
75
+ opts['ColProps'].each_key { |col|
76
+ idx = self.columns.index(col)
77
+
78
+ if (idx)
79
+ self.colprops[idx].merge!(opts['ColProps'][col])
80
+ end
81
+ }
82
+ end
83
+
84
+ end
85
+
86
+ #
87
+ # Converts table contents to a string.
88
+ #
89
+ def to_s
90
+ str = prefix
91
+ str << header_to_s || ''
92
+ str << columns_to_s || ''
93
+ str << hr_to_s || ''
94
+
95
+ rows.each { |row|
96
+ if (is_hr(row))
97
+ str << hr_to_s
98
+ else
99
+ str << row_to_s(row)
100
+ end
101
+ }
102
+
103
+ str << postfix
104
+
105
+ return str
106
+ end
107
+
108
+ #
109
+ #
110
+ # Returns the header string.
111
+ #
112
+ def header_to_s # :nodoc:
113
+ if (header)
114
+ pad = " " * headeri
115
+
116
+ return pad + header + "\n" + pad + "=" * header.length + "\n\n"
117
+ end
118
+
119
+ return ''
120
+ end
121
+
122
+ #
123
+ # Prints the contents of the table.
124
+ #
125
+ def print
126
+ puts to_s
127
+ end
128
+
129
+ #
130
+ # Adds a row using the supplied fields.
131
+ #
132
+ def <<(fields)
133
+ add_row(fields)
134
+ end
135
+
136
+ #
137
+ # Adds a row with the supplied fields.
138
+ #
139
+ def add_row(fields = [])
140
+ fields.each_with_index { |field, idx|
141
+ if (colprops[idx]['MaxWidth'] < field.to_s.length)
142
+ colprops[idx]['MaxWidth'] = field.to_s.length
143
+ end
144
+ }
145
+
146
+ rows << fields
147
+ end
148
+
149
+ #
150
+ # Adds a horizontal line.
151
+ #
152
+ def add_hr
153
+ rows << '__hr__'
154
+ end
155
+
156
+ alias p print
157
+
158
+ attr_accessor :header, :headeri # :nodoc:
159
+ attr_accessor :columns, :rows, :colprops # :nodoc:
160
+ attr_accessor :width, :indent, :cellpad # :nodoc:
161
+ attr_accessor :prefix, :postfix # :nodoc:
162
+
163
+ protected
164
+
165
+ #
166
+ # Defaults cell widths and alignments.
167
+ #
168
+ def defaults # :nodoc:
169
+ self.columns.length.times { |idx|
170
+ }
171
+ end
172
+
173
+ #
174
+ # Checks to see if the row is an hr.
175
+ #
176
+ def is_hr(row) # :nodoc:
177
+ return ((row.kind_of?(String)) && (row == '__hr__'))
178
+ end
179
+
180
+ #
181
+ # Converts the columns to a string.
182
+ #
183
+ def columns_to_s # :nodoc:
184
+ nameline = ' ' * indent
185
+ barline = nameline.dup
186
+ last_col = nil
187
+ last_idx = nil
188
+ columns.each_with_index { |col,idx|
189
+ if (last_col)
190
+ nameline << pad(' ', last_col, last_idx)
191
+
192
+ remainder = colprops[last_idx]['MaxWidth'] - last_col.length
193
+ if (remainder < 0)
194
+ remainder = 0
195
+ end
196
+ barline << (' ' * (cellpad + remainder))
197
+ end
198
+ nameline << col
199
+ barline << ('-' * col.length)
200
+
201
+ last_col = col
202
+ last_idx = idx
203
+ }
204
+
205
+ return "#{nameline}\n#{barline}"
206
+ end
207
+
208
+ #
209
+ # Converts an hr to a string.
210
+ #
211
+ def hr_to_s # :nodoc:
212
+ return "\n"
213
+ end
214
+
215
+ #
216
+ # Converts a row to a string.
217
+ #
218
+ def row_to_s(row) # :nodoc:
219
+ line = ' ' * indent
220
+ last_cell = nil
221
+ last_idx = nil
222
+ row.each_with_index { |cell, idx|
223
+ if (last_cell)
224
+ line << pad(' ', last_cell.to_s, last_idx)
225
+ end
226
+ line << cell.to_s
227
+ # line << pad(' ', cell.to_s, idx)
228
+ last_cell = cell
229
+ last_idx = idx
230
+ }
231
+
232
+ return line + "\n"
233
+ end
234
+
235
+ #
236
+ # Pads out with the supplied character for the remainder of the space given
237
+ # some text and a column index.
238
+ #
239
+ def pad(chr, buf, colidx, use_cell_pad = true) # :nodoc:
240
+ remainder = colprops[colidx]['MaxWidth'] - buf.length
241
+ val = chr * remainder;
242
+
243
+ if (use_cell_pad)
244
+ val << ' ' * cellpad
245
+ end
246
+
247
+ return val
248
+ end
249
+
250
+ end
251
+
252
+ end
253
+ end
254
+ end
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
4
+
5
+ require 'test/unit'
6
+ require 'rex/ui/text/table'
7
+
8
+ class Rex::Ui::Text::Table::UnitTest < Test::Unit::TestCase
9
+
10
+ def new_table(opts = {})
11
+ if (opts['Columns'] == nil)
12
+ opts['Columns'] =
13
+ [
14
+ 'col1',
15
+ 'col2',
16
+ 'col3'
17
+ ]
18
+ end
19
+
20
+ tbl = Rex::Ui::Text::Table.new(opts)
21
+
22
+ tbl << [ "r1cell1", "r1cell2", "r1cell3" ]
23
+ tbl << [ "r2cell1", "r2cell2", "r2cell3" ]
24
+
25
+ return tbl
26
+ end
27
+
28
+ def test_basic
29
+ tbl = new_table
30
+
31
+ dstr = <<End
32
+ col1 col2 col3
33
+ ---- ---- ----
34
+ r1cell1 r1cell2 r1cell3
35
+ r2cell1 r2cell2 r2cell3
36
+ End
37
+
38
+ assert_equal(tbl.to_s, dstr)
39
+ end
40
+
41
+ def test_indent
42
+ tbl = new_table(
43
+ 'Indent' => 4)
44
+
45
+ dstr = <<End
46
+ col1 col2 col3
47
+ ---- ---- ----
48
+ r1cell1 r1cell2 r1cell3
49
+ r2cell1 r2cell2 r2cell3
50
+ End
51
+
52
+ assert_equal(tbl.to_s, dstr)
53
+ end
54
+
55
+ end
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Zip library
4
+ #
5
+ # Written by Joshua J. Drake <jduck [at] metasploit.com>
6
+ #
7
+ # Based on code contributed by bannedit, and the following SPEC:
8
+ # Reference: http://www.pkware.com/documents/casestudies/APPNOTE.TXT
9
+ #
10
+
11
+ require 'zlib'
12
+
13
+ module Rex
14
+ module Zip
15
+
16
+ ZIP_VERSION = 0x14
17
+
18
+ # general purpose bit flag values
19
+ #
20
+ # bit 0
21
+ GPBF_ENCRYPTED = 0x0001
22
+ # bits 1 & 2
23
+ # implode only
24
+ GPBF_IMP_8KDICT = 0x0002
25
+ GPBF_IMP_3SFT = 0x0004
26
+ # deflate only
27
+ GPBF_DEF_MAX = 0x0002
28
+ GPBF_DEF_FAST = 0x0004
29
+ GPBF_DEF_SUPERFAST = 0x0006
30
+ # lzma only
31
+ GPBF_LZMA_EOSUSED = 0x0002
32
+ # bit 3
33
+ GPBF_USE_DATADESC = 0x0008
34
+ # bit 4
35
+ GPBF_DEF_ENHANCED = 0x0010
36
+ # bit 5
37
+ GPBF_COMP_PATHCED = 0x0020
38
+ # bit 6
39
+ GPBF_STRONG_ENC = 0x0040
40
+ # bit 7-10 unused
41
+ # bit 11
42
+ GPBF_STRS_UTF8 = 0x0800
43
+ # bit 12 (reserved)
44
+ # bit 13
45
+ GPBF_DIR_ENCRYPTED = 0x2000
46
+ # bit 14,15 (reserved)
47
+
48
+
49
+ # compression methods
50
+ CM_STORE = 0
51
+ CM_SHRINK = 1
52
+ CM_REDUCE1 = 2
53
+ CM_REDUCE2 = 3
54
+ CM_REDUCE3 = 4
55
+ CM_REDUCE4 = 5
56
+ CM_IMPLODE = 6
57
+ CM_TOKENIZE = 7
58
+ CM_DEFLATE = 8
59
+ CM_DEFLATE64 = 9
60
+ CM_PKWARE_IMPLODE = 10
61
+ # 11 - reserved
62
+ CM_BZIP2 = 12
63
+ # 13 - reserved
64
+ CM_LZMA_EFS = 14
65
+ # 15-17 reserved
66
+ CM_IBM_TERSE = 18
67
+ CM_IBM_LZ77 = 19
68
+ # 20-96 reserved
69
+ CM_WAVPACK = 97
70
+ CM_PPMD_V1R1 = 98
71
+
72
+
73
+ # internal file attributes
74
+ IFA_ASCII = 0x0001
75
+ # bits 2 & 3 are reserved
76
+ IFA_MAINFRAME_MODE = 0x0002 # ??
77
+
78
+
79
+ # external file attributes
80
+ EFA_ISDIR = 0x0001
81
+
82
+
83
+ # various parts of the structure
84
+ require 'rex/zip/blocks'
85
+
86
+ # an entry in a zip file
87
+ require 'rex/zip/entry'
88
+
89
+ # the archive class
90
+ require 'rex/zip/archive'
91
+
92
+ end
93
+ end
@@ -0,0 +1,91 @@
1
+ ##
2
+ # $Id: archive.rb 8439 2010-02-10 17:27:40Z jduck $
3
+ ##
4
+
5
+ module Rex
6
+ module Zip
7
+
8
+ #
9
+ # This represents an entire archive.
10
+ #
11
+ class Archive
12
+
13
+ def initialize(compmeth=CM_DEFLATE)
14
+ @compmeth = compmeth
15
+ @entries = []
16
+ end
17
+
18
+
19
+ def add_file(fname, fdata=nil, xtra=nil, comment=nil)
20
+ if (not fdata)
21
+ begin
22
+ st = File.stat(fname)
23
+ rescue
24
+ return nil
25
+ end
26
+
27
+ ts = st.mtime
28
+ if (st.directory?)
29
+ attrs = EFA_ISDIR
30
+ fname += '/'
31
+ else
32
+ f = File.open(fname, 'rb')
33
+ fdata = f.read(f.stat.size)
34
+ f.close
35
+ end
36
+ end
37
+
38
+ @entries << Entry.new(fname, fdata, @compmeth, ts, attrs, xtra, comment)
39
+ end
40
+
41
+
42
+ def set_comment(comment)
43
+ @comment = comment
44
+ end
45
+
46
+
47
+ def save_to(fname)
48
+ f = File.open(fname, 'wb')
49
+ f.write(pack)
50
+ f.close
51
+ end
52
+
53
+
54
+ def pack
55
+ ret = ''
56
+
57
+ # save the offests
58
+ offsets = []
59
+
60
+ # file 1 .. file n
61
+ @entries.each { |ent|
62
+ offsets << ret.length
63
+ ret << ent.pack
64
+ }
65
+
66
+ # archive decryption header (unsupported)
67
+ # archive extra data record (unsupported)
68
+
69
+ # central directory
70
+ cfd_offset = ret.length
71
+ idx = 0
72
+ @entries.each { |ent|
73
+ cfd = CentralDir.new(ent, offsets[idx])
74
+ ret << cfd.pack
75
+ idx += 1
76
+ }
77
+
78
+ # zip64 end of central dir record (unsupported)
79
+ # zip64 end of central dir locator (unsupported)
80
+
81
+ # end of central directory record
82
+ cur_offset = ret.length - cfd_offset
83
+ ret << CentralDirEnd.new(@entries.length, cur_offset, cfd_offset, @comment).pack
84
+
85
+ ret
86
+ end
87
+
88
+ end
89
+
90
+ end
91
+ end