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.
- data/README +4 -0
- data/lib/rex.rb +101 -0
- data/lib/rex.rb.ts.rb +70 -0
- data/lib/rex/LICENSE +29 -0
- data/lib/rex/arch.rb +103 -0
- data/lib/rex/arch/sparc.rb +75 -0
- data/lib/rex/arch/sparc.rb.ut.rb +18 -0
- data/lib/rex/arch/x86.rb +513 -0
- data/lib/rex/arch/x86.rb.ut.rb +93 -0
- data/lib/rex/assembly/nasm.rb +100 -0
- data/lib/rex/assembly/nasm.rb.ut.rb +22 -0
- data/lib/rex/codepage.map +104 -0
- data/lib/rex/compat.rb +281 -0
- data/lib/rex/constants.rb +113 -0
- data/lib/rex/elfparsey.rb +11 -0
- data/lib/rex/elfparsey/elf.rb +123 -0
- data/lib/rex/elfparsey/elfbase.rb +260 -0
- data/lib/rex/elfparsey/exceptions.rb +27 -0
- data/lib/rex/elfscan.rb +12 -0
- data/lib/rex/elfscan/scanner.rb +207 -0
- data/lib/rex/elfscan/search.rb +46 -0
- data/lib/rex/encoder/alpha2.rb +31 -0
- data/lib/rex/encoder/alpha2/alpha_mixed.rb +68 -0
- data/lib/rex/encoder/alpha2/alpha_upper.rb +79 -0
- data/lib/rex/encoder/alpha2/generic.rb +113 -0
- data/lib/rex/encoder/alpha2/unicode_mixed.rb +117 -0
- data/lib/rex/encoder/alpha2/unicode_upper.rb +129 -0
- data/lib/rex/encoder/ndr.rb +89 -0
- data/lib/rex/encoder/ndr.rb.ut.rb +44 -0
- data/lib/rex/encoder/nonalpha.rb +61 -0
- data/lib/rex/encoder/nonupper.rb +64 -0
- data/lib/rex/encoder/xdr.rb +106 -0
- data/lib/rex/encoder/xdr.rb.ut.rb +29 -0
- data/lib/rex/encoder/xor.rb +69 -0
- data/lib/rex/encoder/xor/dword.rb +13 -0
- data/lib/rex/encoder/xor/dword_additive.rb +13 -0
- data/lib/rex/encoders/xor_dword.rb +35 -0
- data/lib/rex/encoders/xor_dword_additive.rb +53 -0
- data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +12 -0
- data/lib/rex/encoding/xor.rb +20 -0
- data/lib/rex/encoding/xor.rb.ts.rb +14 -0
- data/lib/rex/encoding/xor/byte.rb +15 -0
- data/lib/rex/encoding/xor/byte.rb.ut.rb +21 -0
- data/lib/rex/encoding/xor/dword.rb +21 -0
- data/lib/rex/encoding/xor/dword.rb.ut.rb +15 -0
- data/lib/rex/encoding/xor/dword_additive.rb +92 -0
- data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +15 -0
- data/lib/rex/encoding/xor/exceptions.rb +17 -0
- data/lib/rex/encoding/xor/generic.rb +146 -0
- data/lib/rex/encoding/xor/generic.rb.ut.rb +120 -0
- data/lib/rex/encoding/xor/qword.rb +15 -0
- data/lib/rex/encoding/xor/word.rb +21 -0
- data/lib/rex/encoding/xor/word.rb.ut.rb +13 -0
- data/lib/rex/exceptions.rb +275 -0
- data/lib/rex/exceptions.rb.ut.rb +44 -0
- data/lib/rex/exploitation/cmdstager.rb +133 -0
- data/lib/rex/exploitation/egghunter.rb +143 -0
- data/lib/rex/exploitation/egghunter.rb.ut.rb +25 -0
- data/lib/rex/exploitation/encryptjs.rb +77 -0
- data/lib/rex/exploitation/heaplib.js.b64 +331 -0
- data/lib/rex/exploitation/heaplib.rb +94 -0
- data/lib/rex/exploitation/javascriptosdetect.rb +735 -0
- data/lib/rex/exploitation/obfuscatejs.rb +335 -0
- data/lib/rex/exploitation/opcodedb.rb +818 -0
- data/lib/rex/exploitation/opcodedb.rb.ut.rb +279 -0
- data/lib/rex/exploitation/seh.rb +92 -0
- data/lib/rex/exploitation/seh.rb.ut.rb +19 -0
- data/lib/rex/file.rb +84 -0
- data/lib/rex/file.rb.ut.rb +16 -0
- data/lib/rex/image_source.rb +12 -0
- data/lib/rex/image_source/disk.rb +60 -0
- data/lib/rex/image_source/image_source.rb +46 -0
- data/lib/rex/image_source/memory.rb +37 -0
- data/lib/rex/io/bidirectional_pipe.rb +157 -0
- data/lib/rex/io/datagram_abstraction.rb +35 -0
- data/lib/rex/io/stream.rb +313 -0
- data/lib/rex/io/stream_abstraction.rb +186 -0
- data/lib/rex/io/stream_server.rb +211 -0
- data/lib/rex/job_container.rb +202 -0
- data/lib/rex/logging.rb +4 -0
- data/lib/rex/logging/log_dispatcher.rb +179 -0
- data/lib/rex/logging/log_sink.rb +42 -0
- data/lib/rex/logging/sinks/flatfile.rb +55 -0
- data/lib/rex/logging/sinks/stderr.rb +43 -0
- data/lib/rex/machparsey.rb +9 -0
- data/lib/rex/machparsey/exceptions.rb +34 -0
- data/lib/rex/machparsey/mach.rb +209 -0
- data/lib/rex/machparsey/machbase.rb +408 -0
- data/lib/rex/machscan.rb +9 -0
- data/lib/rex/machscan/scanner.rb +217 -0
- data/lib/rex/mime.rb +9 -0
- data/lib/rex/mime/header.rb +75 -0
- data/lib/rex/mime/message.rb +112 -0
- data/lib/rex/mime/part.rb +20 -0
- data/lib/rex/nop/opty2.rb +108 -0
- data/lib/rex/nop/opty2.rb.ut.rb +23 -0
- data/lib/rex/nop/opty2_tables.rb +300 -0
- data/lib/rex/ole.rb +128 -0
- data/lib/rex/ole/clsid.rb +47 -0
- data/lib/rex/ole/difat.rb +141 -0
- data/lib/rex/ole/directory.rb +230 -0
- data/lib/rex/ole/direntry.rb +240 -0
- data/lib/rex/ole/fat.rb +99 -0
- data/lib/rex/ole/header.rb +204 -0
- data/lib/rex/ole/minifat.rb +77 -0
- data/lib/rex/ole/samples/create_ole.rb +27 -0
- data/lib/rex/ole/samples/dir.rb +35 -0
- data/lib/rex/ole/samples/dump_stream.rb +34 -0
- data/lib/rex/ole/samples/ole_info.rb +23 -0
- data/lib/rex/ole/storage.rb +395 -0
- data/lib/rex/ole/stream.rb +53 -0
- data/lib/rex/ole/substorage.rb +49 -0
- data/lib/rex/ole/util.rb +157 -0
- data/lib/rex/parser/arguments.rb +97 -0
- data/lib/rex/parser/arguments.rb.ut.rb +67 -0
- data/lib/rex/parser/ini.rb +185 -0
- data/lib/rex/parser/ini.rb.ut.rb +29 -0
- data/lib/rex/parser/nmap_xml.rb +111 -0
- data/lib/rex/payloads.rb +1 -0
- data/lib/rex/payloads/win32.rb +2 -0
- data/lib/rex/payloads/win32/common.rb +26 -0
- data/lib/rex/payloads/win32/kernel.rb +53 -0
- data/lib/rex/payloads/win32/kernel/common.rb +54 -0
- data/lib/rex/payloads/win32/kernel/migration.rb +12 -0
- data/lib/rex/payloads/win32/kernel/recovery.rb +50 -0
- data/lib/rex/payloads/win32/kernel/stager.rb +171 -0
- data/lib/rex/peparsey.rb +12 -0
- data/lib/rex/peparsey/exceptions.rb +32 -0
- data/lib/rex/peparsey/pe.rb +188 -0
- data/lib/rex/peparsey/pe_memdump.rb +63 -0
- data/lib/rex/peparsey/pebase.rb +1655 -0
- data/lib/rex/peparsey/section.rb +136 -0
- data/lib/rex/pescan.rb +13 -0
- data/lib/rex/pescan/analyze.rb +309 -0
- data/lib/rex/pescan/scanner.rb +206 -0
- data/lib/rex/pescan/search.rb +56 -0
- data/lib/rex/platforms.rb +1 -0
- data/lib/rex/platforms/windows.rb +51 -0
- data/lib/rex/poly.rb +132 -0
- data/lib/rex/poly/block.rb +468 -0
- data/lib/rex/poly/register.rb +100 -0
- data/lib/rex/poly/register/x86.rb +40 -0
- data/lib/rex/post.rb +8 -0
- data/lib/rex/post/dir.rb +51 -0
- data/lib/rex/post/file.rb +172 -0
- data/lib/rex/post/file_stat.rb +220 -0
- data/lib/rex/post/gen.pl +13 -0
- data/lib/rex/post/io.rb +182 -0
- data/lib/rex/post/meterpreter.rb +4 -0
- data/lib/rex/post/meterpreter/channel.rb +438 -0
- data/lib/rex/post/meterpreter/channel_container.rb +54 -0
- data/lib/rex/post/meterpreter/channels/pool.rb +160 -0
- data/lib/rex/post/meterpreter/channels/pools/file.rb +62 -0
- data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +103 -0
- data/lib/rex/post/meterpreter/channels/stream.rb +87 -0
- data/lib/rex/post/meterpreter/client.rb +335 -0
- data/lib/rex/post/meterpreter/client_core.rb +274 -0
- data/lib/rex/post/meterpreter/dependencies.rb +3 -0
- data/lib/rex/post/meterpreter/extension.rb +32 -0
- data/lib/rex/post/meterpreter/extensions/espia/espia.rb +58 -0
- data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +16 -0
- data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +94 -0
- data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +21 -0
- data/lib/rex/post/meterpreter/extensions/priv/fs.rb +118 -0
- data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +61 -0
- data/lib/rex/post/meterpreter/extensions/priv/priv.rb +104 -0
- data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +28 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +100 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +24 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +333 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +273 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +235 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +103 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +48 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +144 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +73 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +56 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +137 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +167 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +167 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +192 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +139 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +97 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +184 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +41 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +61 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +361 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +129 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +55 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +336 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +141 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +279 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +182 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +102 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +174 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +185 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +227 -0
- data/lib/rex/post/meterpreter/inbound_packet_handler.rb +30 -0
- data/lib/rex/post/meterpreter/object_aliases.rb +83 -0
- data/lib/rex/post/meterpreter/packet.rb +596 -0
- data/lib/rex/post/meterpreter/packet_dispatcher.rb +409 -0
- data/lib/rex/post/meterpreter/packet_parser.rb +94 -0
- data/lib/rex/post/meterpreter/packet_response_waiter.rb +83 -0
- data/lib/rex/post/meterpreter/ui/console.rb +135 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +62 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +595 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +108 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +241 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +61 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +98 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +51 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +132 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +187 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +63 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +376 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +270 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +484 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +315 -0
- data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +95 -0
- data/lib/rex/post/permission.rb +26 -0
- data/lib/rex/post/process.rb +57 -0
- data/lib/rex/post/thread.rb +57 -0
- data/lib/rex/post/ui.rb +52 -0
- data/lib/rex/proto.rb +12 -0
- data/lib/rex/proto.rb.ts.rb +8 -0
- data/lib/rex/proto/dcerpc.rb +6 -0
- data/lib/rex/proto/dcerpc.rb.ts.rb +9 -0
- data/lib/rex/proto/dcerpc/client.rb +358 -0
- data/lib/rex/proto/dcerpc/client.rb.ut.rb +491 -0
- data/lib/rex/proto/dcerpc/exceptions.rb +150 -0
- data/lib/rex/proto/dcerpc/handle.rb +47 -0
- data/lib/rex/proto/dcerpc/handle.rb.ut.rb +85 -0
- data/lib/rex/proto/dcerpc/ndr.rb +72 -0
- data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +41 -0
- data/lib/rex/proto/dcerpc/packet.rb +253 -0
- data/lib/rex/proto/dcerpc/packet.rb.ut.rb +56 -0
- data/lib/rex/proto/dcerpc/response.rb +186 -0
- data/lib/rex/proto/dcerpc/response.rb.ut.rb +15 -0
- data/lib/rex/proto/dcerpc/uuid.rb +84 -0
- data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +46 -0
- data/lib/rex/proto/drda.rb +5 -0
- data/lib/rex/proto/drda.rb.ts.rb +17 -0
- data/lib/rex/proto/drda/constants.rb +49 -0
- data/lib/rex/proto/drda/constants.rb.ut.rb +23 -0
- data/lib/rex/proto/drda/packet.rb +252 -0
- data/lib/rex/proto/drda/packet.rb.ut.rb +109 -0
- data/lib/rex/proto/drda/utils.rb +123 -0
- data/lib/rex/proto/drda/utils.rb.ut.rb +84 -0
- data/lib/rex/proto/http.rb +5 -0
- data/lib/rex/proto/http.rb.ts.rb +12 -0
- data/lib/rex/proto/http/client.rb +817 -0
- data/lib/rex/proto/http/client.rb.ut.rb +93 -0
- data/lib/rex/proto/http/handler.rb +46 -0
- data/lib/rex/proto/http/handler/erb.rb +128 -0
- data/lib/rex/proto/http/handler/erb.rb.ut.rb +21 -0
- data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +1 -0
- data/lib/rex/proto/http/handler/proc.rb +54 -0
- data/lib/rex/proto/http/handler/proc.rb.ut.rb +24 -0
- data/lib/rex/proto/http/header.rb +161 -0
- data/lib/rex/proto/http/header.rb.ut.rb +46 -0
- data/lib/rex/proto/http/packet.rb +394 -0
- data/lib/rex/proto/http/packet.rb.ut.rb +165 -0
- data/lib/rex/proto/http/request.rb +356 -0
- data/lib/rex/proto/http/request.rb.ut.rb +214 -0
- data/lib/rex/proto/http/response.rb +85 -0
- data/lib/rex/proto/http/response.rb.ut.rb +149 -0
- data/lib/rex/proto/http/server.rb +367 -0
- data/lib/rex/proto/http/server.rb.ut.rb +79 -0
- data/lib/rex/proto/smb.rb +7 -0
- data/lib/rex/proto/smb.rb.ts.rb +8 -0
- data/lib/rex/proto/smb/client.rb +1733 -0
- data/lib/rex/proto/smb/client.rb.ut.rb +223 -0
- data/lib/rex/proto/smb/constants.rb +1062 -0
- data/lib/rex/proto/smb/constants.rb.ut.rb +18 -0
- data/lib/rex/proto/smb/crypt.rb +95 -0
- data/lib/rex/proto/smb/crypt.rb.ut.rb +20 -0
- data/lib/rex/proto/smb/evasions.rb +65 -0
- data/lib/rex/proto/smb/exceptions.rb +846 -0
- data/lib/rex/proto/smb/simpleclient.rb +292 -0
- data/lib/rex/proto/smb/simpleclient.rb.ut.rb +128 -0
- data/lib/rex/proto/smb/utils.rb +514 -0
- data/lib/rex/proto/smb/utils.rb.ut.rb +20 -0
- data/lib/rex/proto/sunrpc.rb +1 -0
- data/lib/rex/proto/sunrpc/client.rb +195 -0
- data/lib/rex/script.rb +42 -0
- data/lib/rex/script/base.rb +59 -0
- data/lib/rex/script/meterpreter.rb +9 -0
- data/lib/rex/script/shell.rb +9 -0
- data/lib/rex/service.rb +48 -0
- data/lib/rex/service_manager.rb +141 -0
- data/lib/rex/service_manager.rb.ut.rb +32 -0
- data/lib/rex/services/local_relay.rb +423 -0
- data/lib/rex/socket.rb +586 -0
- data/lib/rex/socket.rb.ut.rb +86 -0
- data/lib/rex/socket/comm.rb +119 -0
- data/lib/rex/socket/comm/local.rb +409 -0
- data/lib/rex/socket/comm/local.rb.ut.rb +75 -0
- data/lib/rex/socket/ip.rb +129 -0
- data/lib/rex/socket/parameters.rb +345 -0
- data/lib/rex/socket/parameters.rb.ut.rb +51 -0
- data/lib/rex/socket/range_walker.rb +295 -0
- data/lib/rex/socket/range_walker.rb.ut.rb +55 -0
- data/lib/rex/socket/ssl_tcp.rb +184 -0
- data/lib/rex/socket/ssl_tcp.rb.ut.rb +39 -0
- data/lib/rex/socket/ssl_tcp_server.rb +122 -0
- data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +51 -0
- data/lib/rex/socket/subnet_walker.rb +75 -0
- data/lib/rex/socket/subnet_walker.rb.ut.rb +28 -0
- data/lib/rex/socket/switch_board.rb +272 -0
- data/lib/rex/socket/switch_board.rb.ut.rb +52 -0
- data/lib/rex/socket/tcp.rb +76 -0
- data/lib/rex/socket/tcp.rb.ut.rb +64 -0
- data/lib/rex/socket/tcp_server.rb +67 -0
- data/lib/rex/socket/tcp_server.rb.ut.rb +44 -0
- data/lib/rex/socket/udp.rb +157 -0
- data/lib/rex/socket/udp.rb.ut.rb +44 -0
- data/lib/rex/struct2.rb +5 -0
- data/lib/rex/struct2/c_struct.rb +181 -0
- data/lib/rex/struct2/c_struct_template.rb +39 -0
- data/lib/rex/struct2/constant.rb +26 -0
- data/lib/rex/struct2/element.rb +44 -0
- data/lib/rex/struct2/generic.rb +73 -0
- data/lib/rex/struct2/restraint.rb +54 -0
- data/lib/rex/struct2/s_string.rb +72 -0
- data/lib/rex/struct2/s_struct.rb +111 -0
- data/lib/rex/sync.rb +6 -0
- data/lib/rex/sync/event.rb +94 -0
- data/lib/rex/sync/read_write_lock.rb +176 -0
- data/lib/rex/sync/ref.rb +57 -0
- data/lib/rex/sync/thread_safe.rb +82 -0
- data/lib/rex/test.rb +35 -0
- data/lib/rex/text.rb +1029 -0
- data/lib/rex/text.rb.ut.rb +168 -0
- data/lib/rex/time.rb +65 -0
- data/lib/rex/transformer.rb +115 -0
- data/lib/rex/transformer.rb.ut.rb +38 -0
- data/lib/rex/ui.rb +21 -0
- data/lib/rex/ui/interactive.rb +252 -0
- data/lib/rex/ui/output.rb +80 -0
- data/lib/rex/ui/output/none.rb +18 -0
- data/lib/rex/ui/progress_tracker.rb +96 -0
- data/lib/rex/ui/subscriber.rb +149 -0
- data/lib/rex/ui/text/color.rb +97 -0
- data/lib/rex/ui/text/color.rb.ut.rb +18 -0
- data/lib/rex/ui/text/dispatcher_shell.rb +382 -0
- data/lib/rex/ui/text/input.rb +117 -0
- data/lib/rex/ui/text/input/buffer.rb +75 -0
- data/lib/rex/ui/text/input/readline.rb +129 -0
- data/lib/rex/ui/text/input/socket.rb +95 -0
- data/lib/rex/ui/text/input/stdio.rb +45 -0
- data/lib/rex/ui/text/irb_shell.rb +55 -0
- data/lib/rex/ui/text/output.rb +80 -0
- data/lib/rex/ui/text/output/buffer.rb +65 -0
- data/lib/rex/ui/text/output/file.rb +37 -0
- data/lib/rex/ui/text/output/socket.rb +43 -0
- data/lib/rex/ui/text/output/stdio.rb +40 -0
- data/lib/rex/ui/text/progress_tracker.rb +56 -0
- data/lib/rex/ui/text/progress_tracker.rb.ut.rb +34 -0
- data/lib/rex/ui/text/shell.rb +321 -0
- data/lib/rex/ui/text/table.rb +254 -0
- data/lib/rex/ui/text/table.rb.ut.rb +55 -0
- data/lib/rex/zip.rb +93 -0
- data/lib/rex/zip/archive.rb +91 -0
- data/lib/rex/zip/blocks.rb +182 -0
- data/lib/rex/zip/entry.rb +95 -0
- data/lib/rex/zip/samples/comment.rb +32 -0
- data/lib/rex/zip/samples/mkwar.rb +138 -0
- data/lib/rex/zip/samples/mkzip.rb +19 -0
- data/lib/rex/zip/samples/recursive.rb +58 -0
- 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
|