librex 0.0.20 → 0.0.21
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/Rakefile +1 -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 +104 -0
- data/lib/rex/assembly/nasm.rb.ut.rb +22 -0
- data/lib/rex/codepage.map +104 -0
- data/lib/rex/compat.rb +311 -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 +258 -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 +114 -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 +9 -0
- data/lib/rex/exploitation/cmdstager/base.rb +175 -0
- data/lib/rex/exploitation/cmdstager/debug_asm.rb +142 -0
- data/lib/rex/exploitation/cmdstager/debug_write.rb +136 -0
- data/lib/rex/exploitation/cmdstager/tftp.rb +63 -0
- data/lib/rex/exploitation/cmdstager/vbs.rb +128 -0
- data/lib/rex/exploitation/egghunter.rb +277 -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 +897 -0
- data/lib/rex/exploitation/obfuscatejs.rb +335 -0
- data/lib/rex/exploitation/omelet.rb +320 -0
- data/lib/rex/exploitation/omelet.rb.ut.rb +13 -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 +112 -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/ring_buffer.rb +364 -0
- data/lib/rex/io/stream.rb +319 -0
- data/lib/rex/io/stream_abstraction.rb +197 -0
- data/lib/rex/io/stream_server.rb +211 -0
- data/lib/rex/job_container.rb +187 -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 +77 -0
- data/lib/rex/mime/message.rb +144 -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 +205 -0
- data/lib/rex/ole/clsid.rb +47 -0
- data/lib/rex/ole/difat.rb +141 -0
- data/lib/rex/ole/directory.rb +231 -0
- data/lib/rex/ole/direntry.rb +240 -0
- data/lib/rex/ole/docs/dependencies.txt +8 -0
- data/lib/rex/ole/docs/references.txt +1 -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/propset.rb +144 -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/ip360_aspl_xml.rb +102 -0
- data/lib/rex/parser/ip360_xml.rb +97 -0
- data/lib/rex/parser/nessus_xml.rb +118 -0
- data/lib/rex/parser/netsparker_xml.rb +94 -0
- data/lib/rex/parser/nexpose_xml.rb +136 -0
- data/lib/rex/parser/nmap_xml.rb +137 -0
- data/lib/rex/parser/retina_xml.rb +109 -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 +194 -0
- data/lib/rex/peparsey.rb +12 -0
- data/lib/rex/peparsey/exceptions.rb +32 -0
- data/lib/rex/peparsey/pe.rb +212 -0
- data/lib/rex/peparsey/pe_memdump.rb +63 -0
- data/lib/rex/peparsey/pebase.rb +1680 -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 +477 -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 +445 -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 +364 -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/networkpug/networkpug.rb +57 -0
- data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +15 -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 +111 -0
- data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +28 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +101 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +26 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +333 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +282 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +266 -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 +180 -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 +208 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +6 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +38106 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +31 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +47 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +36 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +1818 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +96 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +3848 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +26 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +153 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +21 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3169 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +599 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +318 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +100 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +42 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +148 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +127 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +309 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +204 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +51 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +630 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +75 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +103 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +149 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +97 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +192 -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 +370 -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 +193 -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 +180 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +211 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +227 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +63 -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 +688 -0
- data/lib/rex/post/meterpreter/packet_dispatcher.rb +431 -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 +137 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +62 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +730 -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/networkpug.rb +231 -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 +65 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +442 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +298 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +486 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +315 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +157 -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 +13 -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 +361 -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 +187 -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/dhcp.rb +7 -0
- data/lib/rex/proto/dhcp/constants.rb +33 -0
- data/lib/rex/proto/dhcp/server.rb +292 -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 +821 -0
- data/lib/rex/proto/http/client.rb.ut.rb +95 -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 +60 -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 +407 -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 +90 -0
- data/lib/rex/proto/http/response.rb.ut.rb +149 -0
- data/lib/rex/proto/http/server.rb +369 -0
- data/lib/rex/proto/http/server.rb.ut.rb +79 -0
- data/lib/rex/proto/ntlm.rb +7 -0
- data/lib/rex/proto/ntlm.rb.ut.rb +177 -0
- data/lib/rex/proto/ntlm/base.rb +326 -0
- data/lib/rex/proto/ntlm/constants.rb +74 -0
- data/lib/rex/proto/ntlm/crypt.rb +415 -0
- data/lib/rex/proto/ntlm/exceptions.rb +16 -0
- data/lib/rex/proto/ntlm/message.rb +536 -0
- data/lib/rex/proto/ntlm/utils.rb +764 -0
- data/lib/rex/proto/proxy/socks4a.rb +440 -0
- data/lib/rex/proto/rfb.rb +19 -0
- data/lib/rex/proto/rfb.rb.ut.rb +37 -0
- data/lib/rex/proto/rfb/cipher.rb +84 -0
- data/lib/rex/proto/rfb/client.rb +207 -0
- data/lib/rex/proto/rfb/constants.rb +52 -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 +1952 -0
- data/lib/rex/proto/smb/client.rb.ut.rb +223 -0
- data/lib/rex/proto/smb/constants.rb +1047 -0
- data/lib/rex/proto/smb/constants.rb.ut.rb +18 -0
- data/lib/rex/proto/smb/crypt.rb +36 -0
- data/lib/rex/proto/smb/evasions.rb +66 -0
- data/lib/rex/proto/smb/exceptions.rb +858 -0
- data/lib/rex/proto/smb/simpleclient.rb +306 -0
- data/lib/rex/proto/smb/simpleclient.rb.ut.rb +128 -0
- data/lib/rex/proto/smb/utils.rb +103 -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/proto/tftp.rb +12 -0
- data/lib/rex/proto/tftp/constants.rb +39 -0
- data/lib/rex/proto/tftp/server.rb +497 -0
- data/lib/rex/proto/tftp/server.rb.ut.rb +28 -0
- data/lib/rex/script.rb +42 -0
- data/lib/rex/script/base.rb +59 -0
- data/lib/rex/script/meterpreter.rb +15 -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 +684 -0
- data/lib/rex/socket.rb.ut.rb +107 -0
- data/lib/rex/socket/comm.rb +119 -0
- data/lib/rex/socket/comm/local.rb +412 -0
- data/lib/rex/socket/comm/local.rb.ut.rb +75 -0
- data/lib/rex/socket/ip.rb +130 -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 +346 -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 +61 -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 +278 -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 +66 -0
- data/lib/rex/socket/tcp_server.rb.ut.rb +44 -0
- data/lib/rex/socket/udp.rb +164 -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 +1163 -0
- data/lib/rex/text.rb.ut.rb +190 -0
- data/lib/rex/thread_factory.rb +42 -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 +298 -0
- data/lib/rex/ui/output.rb +78 -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 +467 -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 +57 -0
- data/lib/rex/ui/text/output.rb +80 -0
- data/lib/rex/ui/text/output/buffer.rb +61 -0
- data/lib/rex/ui/text/output/file.rb +43 -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 +328 -0
- data/lib/rex/ui/text/table.rb +279 -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 +184 -0
- data/lib/rex/zip/blocks.rb +182 -0
- data/lib/rex/zip/entry.rb +104 -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 +434 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rex/encoding/xor/generic'
|
|
4
|
+
|
|
5
|
+
#
|
|
6
|
+
# Routine for xor encoding a buffer by a 2-byte (intel word) key. The perl
|
|
7
|
+
# version used to pad this buffer out to a 2-byte boundary, but I can't think
|
|
8
|
+
# of a good reason to do that anymore, so this doesn't.
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
module Rex
|
|
12
|
+
module Encoding
|
|
13
|
+
module Xor
|
|
14
|
+
|
|
15
|
+
class Word < Generic
|
|
16
|
+
|
|
17
|
+
def Word.keysize
|
|
18
|
+
2
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end end end end # Word/Xor/Encoding/Rex
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
|
|
4
|
+
|
|
5
|
+
require 'rex/encoding/xor/word'
|
|
6
|
+
require 'rex/encoding/xor/byte.rb.ut'
|
|
7
|
+
|
|
8
|
+
class Rex::Encoding::Xor::Word::UnitTest < Rex::Encoding::Xor::Byte::UnitTest
|
|
9
|
+
|
|
10
|
+
def enc
|
|
11
|
+
Rex::Encoding::Xor::Word
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
|
|
5
|
+
###
|
|
6
|
+
#
|
|
7
|
+
# Base mixin for all exceptions that can be thrown from inside Rex.
|
|
8
|
+
#
|
|
9
|
+
###
|
|
10
|
+
module Exception
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
###
|
|
14
|
+
#
|
|
15
|
+
# This exception is raised when a timeout occurs.
|
|
16
|
+
#
|
|
17
|
+
###
|
|
18
|
+
class TimeoutError < Interrupt
|
|
19
|
+
include Exception
|
|
20
|
+
|
|
21
|
+
def to_s
|
|
22
|
+
"Operation timed out."
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
###
|
|
27
|
+
#
|
|
28
|
+
# This exception is raised when a method is called or a feature is used that
|
|
29
|
+
# is not implemented.
|
|
30
|
+
#
|
|
31
|
+
###
|
|
32
|
+
class NotImplementedError < ::NotImplementedError
|
|
33
|
+
include Exception
|
|
34
|
+
|
|
35
|
+
def to_s
|
|
36
|
+
"The requested method is not implemented."
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
###
|
|
41
|
+
#
|
|
42
|
+
# This exception is raised when a generalized runtime error occurs.
|
|
43
|
+
#
|
|
44
|
+
###
|
|
45
|
+
class RuntimeError < ::RuntimeError
|
|
46
|
+
include Exception
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
###
|
|
50
|
+
#
|
|
51
|
+
# This exception is raised when an invalid argument is supplied to a method.
|
|
52
|
+
#
|
|
53
|
+
###
|
|
54
|
+
class ArgumentError < ::ArgumentError
|
|
55
|
+
include Exception
|
|
56
|
+
|
|
57
|
+
def initialize(message = nil)
|
|
58
|
+
@message = message
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def to_s
|
|
62
|
+
str = 'An invalid argument was specified.'
|
|
63
|
+
if @message
|
|
64
|
+
str << " #{@message}"
|
|
65
|
+
end
|
|
66
|
+
str
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
###
|
|
71
|
+
#
|
|
72
|
+
# This exception is raised when an argument that was supplied to a method
|
|
73
|
+
# could not be parsed correctly.
|
|
74
|
+
#
|
|
75
|
+
###
|
|
76
|
+
class ArgumentParseError < ::ArgumentError
|
|
77
|
+
include Exception
|
|
78
|
+
|
|
79
|
+
def to_s
|
|
80
|
+
"The argument could not be parsed correctly."
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
###
|
|
85
|
+
#
|
|
86
|
+
# This exception is raised when an argument is ambiguous.
|
|
87
|
+
#
|
|
88
|
+
###
|
|
89
|
+
class AmbiguousArgumentError < ::RuntimeError
|
|
90
|
+
include Exception
|
|
91
|
+
|
|
92
|
+
def initialize(name = nil)
|
|
93
|
+
@name = name
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def to_s
|
|
97
|
+
"The name #{@name} is ambiguous."
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
###
|
|
102
|
+
#
|
|
103
|
+
# This error is thrown when a stream is detected as being closed.
|
|
104
|
+
#
|
|
105
|
+
###
|
|
106
|
+
class StreamClosedError < ::IOError
|
|
107
|
+
include Exception
|
|
108
|
+
|
|
109
|
+
def initialize(stream)
|
|
110
|
+
@stream = stream
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def stream
|
|
114
|
+
@stream
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def to_s
|
|
118
|
+
"Stream #{@stream} is closed."
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
##
|
|
123
|
+
#
|
|
124
|
+
# Socket exceptions
|
|
125
|
+
#
|
|
126
|
+
##
|
|
127
|
+
|
|
128
|
+
###
|
|
129
|
+
#
|
|
130
|
+
# This exception is raised when a general socket error occurs.
|
|
131
|
+
#
|
|
132
|
+
###
|
|
133
|
+
module SocketError
|
|
134
|
+
include Exception
|
|
135
|
+
|
|
136
|
+
def to_s
|
|
137
|
+
"A socket error occurred."
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
###
|
|
142
|
+
#
|
|
143
|
+
# This exception is raised when there is some kind of error related to
|
|
144
|
+
# communication with a host.
|
|
145
|
+
#
|
|
146
|
+
###
|
|
147
|
+
module HostCommunicationError
|
|
148
|
+
def initialize(addr = nil, port = nil)
|
|
149
|
+
self.host = addr
|
|
150
|
+
self.port = port
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
#
|
|
154
|
+
# This method returns a printable address and optional port associated
|
|
155
|
+
# with the host that triggered the exception.
|
|
156
|
+
#
|
|
157
|
+
def addr_to_s
|
|
158
|
+
if host and port
|
|
159
|
+
"(#{host}:#{port})"
|
|
160
|
+
elsif host
|
|
161
|
+
"(#{host})"
|
|
162
|
+
else
|
|
163
|
+
""
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
attr_accessor :host, :port
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
###
|
|
172
|
+
#
|
|
173
|
+
# This exception is raised when a connection attempt fails because the remote
|
|
174
|
+
# side refused the connection.
|
|
175
|
+
#
|
|
176
|
+
###
|
|
177
|
+
|
|
178
|
+
class ConnectionError < ::IOError
|
|
179
|
+
include SocketError
|
|
180
|
+
include HostCommunicationError
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
###
|
|
184
|
+
#
|
|
185
|
+
# This exception is raised when a connection attempt fails because the remote
|
|
186
|
+
# side refused the connection.
|
|
187
|
+
#
|
|
188
|
+
###
|
|
189
|
+
class ConnectionRefused < ConnectionError
|
|
190
|
+
def to_s
|
|
191
|
+
"The connection was refused by the remote host #{addr_to_s}."
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
###
|
|
196
|
+
#
|
|
197
|
+
# This exception is raised when a connection attempt fails because the remote
|
|
198
|
+
# side is unreachable.
|
|
199
|
+
#
|
|
200
|
+
###
|
|
201
|
+
class HostUnreachable < ConnectionError
|
|
202
|
+
def to_s
|
|
203
|
+
"The host #{addr_to_s} was unreachable."
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
###
|
|
208
|
+
#
|
|
209
|
+
# This exception is raised when a connection attempt times out.
|
|
210
|
+
#
|
|
211
|
+
###
|
|
212
|
+
class ConnectionTimeout < ConnectionError
|
|
213
|
+
def to_s
|
|
214
|
+
"The connection timed out #{addr_to_s}."
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
###
|
|
220
|
+
#
|
|
221
|
+
# This exception is raised when an attempt to use an address or port that is
|
|
222
|
+
# already in use occurs, such as binding to a host on a given port that is
|
|
223
|
+
# already in use.
|
|
224
|
+
#
|
|
225
|
+
###
|
|
226
|
+
class AddressInUse < ::RuntimeError
|
|
227
|
+
include SocketError
|
|
228
|
+
include HostCommunicationError
|
|
229
|
+
|
|
230
|
+
def to_s
|
|
231
|
+
"The address is already in use #{addr_to_s}."
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
###
|
|
236
|
+
#
|
|
237
|
+
# This exception is raised when an unsupported internet protocol is specified.
|
|
238
|
+
#
|
|
239
|
+
###
|
|
240
|
+
class UnsupportedProtocol < ::ArgumentError
|
|
241
|
+
include SocketError
|
|
242
|
+
|
|
243
|
+
def initialize(proto = nil)
|
|
244
|
+
self.proto = proto
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def to_s
|
|
248
|
+
"The protocol #{proto} is not supported."
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
attr_accessor :proto
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
###
|
|
256
|
+
#
|
|
257
|
+
# This exception is raised when a proxy fails to pass a connection
|
|
258
|
+
#
|
|
259
|
+
###
|
|
260
|
+
class ConnectionProxyError < ConnectionError
|
|
261
|
+
def initialize(host,port,ptype,reason)
|
|
262
|
+
super(host,port)
|
|
263
|
+
self.ptype = ptype
|
|
264
|
+
self.reason = reason
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def to_s
|
|
268
|
+
self.ptype + ": " + self.reason
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
attr_accessor :ptype, :reason
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
end
|
|
275
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..'))
|
|
4
|
+
|
|
5
|
+
require 'test/unit'
|
|
6
|
+
require 'rex/exceptions'
|
|
7
|
+
|
|
8
|
+
module Rex
|
|
9
|
+
module Exceptions
|
|
10
|
+
|
|
11
|
+
class UnitTest < Test::Unit::TestCase
|
|
12
|
+
|
|
13
|
+
def test_exceptions
|
|
14
|
+
Rex.constants.each { |const|
|
|
15
|
+
mod = Rex.const_get(const)
|
|
16
|
+
|
|
17
|
+
if ((mod.kind_of?(Class) == false) ||
|
|
18
|
+
(mod.ancestors.include?(Rex::Exception) == false))
|
|
19
|
+
next
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
begin
|
|
23
|
+
raise mod.new
|
|
24
|
+
rescue ::ArgumentError
|
|
25
|
+
rescue mod => detail
|
|
26
|
+
assert_respond_to(detail, 'to_s', "#{mod} does not implement to_s")
|
|
27
|
+
assert_not_nil(detail.to_s, "invalid to_s")
|
|
28
|
+
end
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# Test communication error detail strings
|
|
32
|
+
begin
|
|
33
|
+
raise ConnectionRefused.new('127.0.0.1', 4444)
|
|
34
|
+
rescue HostCommunicationError => detail
|
|
35
|
+
assert_match(/^The connection(.*)\(127.0.0.1:4444\)/, detail.to_s)
|
|
36
|
+
assert_equal('127.0.0.1', detail.host)
|
|
37
|
+
assert_equal(4444, detail.port)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
##
|
|
2
|
+
# $Id: cmdstager.rb 9375 2010-05-26 22:39:56Z jduck $
|
|
3
|
+
##
|
|
4
|
+
|
|
5
|
+
require 'rex/exploitation/cmdstager/base'
|
|
6
|
+
require 'rex/exploitation/cmdstager/vbs'
|
|
7
|
+
require 'rex/exploitation/cmdstager/debug_write'
|
|
8
|
+
require 'rex/exploitation/cmdstager/debug_asm'
|
|
9
|
+
require 'rex/exploitation/cmdstager/tftp'
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
require 'rex/text'
|
|
2
|
+
require 'rex/arch'
|
|
3
|
+
require 'msf/core/framework'
|
|
4
|
+
|
|
5
|
+
module Rex
|
|
6
|
+
module Exploitation
|
|
7
|
+
|
|
8
|
+
###
|
|
9
|
+
#
|
|
10
|
+
# This class provides an interface to generating cmdstagers.
|
|
11
|
+
#
|
|
12
|
+
###
|
|
13
|
+
|
|
14
|
+
class CmdStagerBase
|
|
15
|
+
|
|
16
|
+
def initialize(exe)
|
|
17
|
+
@linemax = 2047 # covers most likely cases
|
|
18
|
+
@exe = exe
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
#
|
|
22
|
+
# Generates the cmd payload including the h2bv2 decoder and encoded payload.
|
|
23
|
+
# The resulting commands also perform cleanup, removing any left over files
|
|
24
|
+
#
|
|
25
|
+
def generate(opts = {})
|
|
26
|
+
# Allow temporary directory override
|
|
27
|
+
@tempdir = opts[:temp]
|
|
28
|
+
@tempdir ||= "%TEMP%\\"
|
|
29
|
+
if (@tempdir == '.')
|
|
30
|
+
@tempdir = ''
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
opts[:linemax] ||= @linemax
|
|
34
|
+
|
|
35
|
+
generate_cmds(opts)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
#
|
|
40
|
+
# This does the work of actually building an array of commands that
|
|
41
|
+
# when executed will create and run an executable payload.
|
|
42
|
+
#
|
|
43
|
+
def generate_cmds(opts)
|
|
44
|
+
|
|
45
|
+
# Initialize an arry of commands to execute
|
|
46
|
+
cmds = []
|
|
47
|
+
|
|
48
|
+
# Add the exe building commands
|
|
49
|
+
cmds += generate_cmds_payload(opts)
|
|
50
|
+
|
|
51
|
+
# Add the decoder script building commands
|
|
52
|
+
cmds += generate_cmds_decoder(opts)
|
|
53
|
+
|
|
54
|
+
compress_commands(cmds, opts)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
#
|
|
59
|
+
# Generate the commands to create an encoded version of the
|
|
60
|
+
# payload file
|
|
61
|
+
#
|
|
62
|
+
def generate_cmds_payload(opts)
|
|
63
|
+
|
|
64
|
+
# First encode the payload
|
|
65
|
+
encoded = encode_payload(opts)
|
|
66
|
+
|
|
67
|
+
# Now split it up into usable pieces
|
|
68
|
+
parts = slice_up_payload(encoded, opts)
|
|
69
|
+
|
|
70
|
+
# Turn each part into a valid command
|
|
71
|
+
parts_to_commands(parts, opts)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
#
|
|
75
|
+
# This method is intended to be override by the child class
|
|
76
|
+
#
|
|
77
|
+
def encode_payload(opts)
|
|
78
|
+
# Defaults to nothing
|
|
79
|
+
""
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
#
|
|
83
|
+
# We take a string of data and turn it into an array of parts.
|
|
84
|
+
#
|
|
85
|
+
# We save opts[:extra] bytes out of every opts[:linemax] for the parts
|
|
86
|
+
# appended and prepended to the resulting elements.
|
|
87
|
+
#
|
|
88
|
+
def slice_up_payload(encoded, opts)
|
|
89
|
+
tmp = encoded.dup
|
|
90
|
+
|
|
91
|
+
parts = []
|
|
92
|
+
xtra_len = opts[:extra]
|
|
93
|
+
xtra_len ||= 0
|
|
94
|
+
while (tmp.length > 0)
|
|
95
|
+
parts << tmp.slice!(0, (opts[:linemax] - xtra_len))
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
parts
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
#
|
|
102
|
+
# Combine the parts of the encoded file with the stuff that goes
|
|
103
|
+
# before / after it -- example "echo " and " >>file"
|
|
104
|
+
#
|
|
105
|
+
def parts_to_commands(parts, opts)
|
|
106
|
+
# Return as-is
|
|
107
|
+
parts
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
#
|
|
113
|
+
# Generate the commands that will decode the file we just created
|
|
114
|
+
#
|
|
115
|
+
def generate_cmds_decoder(opts)
|
|
116
|
+
# Defaults to no commands.
|
|
117
|
+
[]
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
#
|
|
123
|
+
# Compress commands into as few lines as possible. Minimizes the number of
|
|
124
|
+
# commands to execute while maximizing the number of commands per execution.
|
|
125
|
+
#
|
|
126
|
+
def compress_commands(cmds, opts)
|
|
127
|
+
new_cmds = []
|
|
128
|
+
line = ''
|
|
129
|
+
concat = cmd_concat_operator
|
|
130
|
+
|
|
131
|
+
# We cannot compress commands if there is no way to combine commands on
|
|
132
|
+
# a single line.
|
|
133
|
+
return cmds if not concat
|
|
134
|
+
|
|
135
|
+
cmds.each { |cmd|
|
|
136
|
+
|
|
137
|
+
# If this command will fit, concat it and move on.
|
|
138
|
+
if ((line.length + cmd.length + concat.length) < opts[:linemax])
|
|
139
|
+
line << concat if line.length > 0
|
|
140
|
+
line << cmd
|
|
141
|
+
next
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# The command wont fit concat'd to this line, if we have something,
|
|
145
|
+
# we have to add it to the array now.
|
|
146
|
+
if (line.length > 0)
|
|
147
|
+
new_cmds << line
|
|
148
|
+
line = ''
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# If it won't fit even after emptying the current line, error out..
|
|
152
|
+
if (cmd.length > opts[:linemax])
|
|
153
|
+
raise RuntimeError, 'Line too long - %u bytes, max %u' % [cmd.length, opts[:linemax]]
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# It will indeed fit by itself, lets add it.
|
|
157
|
+
line << cmd
|
|
158
|
+
|
|
159
|
+
}
|
|
160
|
+
new_cmds << line if (line.length > 0)
|
|
161
|
+
|
|
162
|
+
# Return the final array.
|
|
163
|
+
new_cmds
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
#
|
|
167
|
+
# Can be overriden. For exmaple, use for unix use ";" instead
|
|
168
|
+
#
|
|
169
|
+
def cmd_concat_operator
|
|
170
|
+
nil
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|