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,113 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Log severities
|
|
3
|
+
#
|
|
4
|
+
LOG_ERROR = 'error'
|
|
5
|
+
LOG_DEBUG = 'debug'
|
|
6
|
+
LOG_INFO = 'info'
|
|
7
|
+
LOG_WARN = 'warn'
|
|
8
|
+
LOG_RAW = 'raw'
|
|
9
|
+
|
|
10
|
+
##
|
|
11
|
+
#
|
|
12
|
+
# Log levels
|
|
13
|
+
#
|
|
14
|
+
##
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# LEV_0 - Default
|
|
18
|
+
#
|
|
19
|
+
# This log level is the default log level if none is specified. It should be
|
|
20
|
+
# used when a log message should always be displayed when logging is enabled.
|
|
21
|
+
# Very few log messages should occur at this level aside from necessary
|
|
22
|
+
# information logging and error/warning logging. Debug logging at level zero
|
|
23
|
+
# is not advised.
|
|
24
|
+
#
|
|
25
|
+
LEV_0 = 0
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# LEV_1 - Extra
|
|
29
|
+
#
|
|
30
|
+
# This log level should be used when extra information may be needed to
|
|
31
|
+
# understand the cause of an error or warning message or to get debugging
|
|
32
|
+
# information that might give clues as to why something is happening. This
|
|
33
|
+
# log level should be used only when information may be useful to understanding
|
|
34
|
+
# the behavior of something at a basic level. This log level should not be
|
|
35
|
+
# used in an exhaustively verbose fashion.
|
|
36
|
+
#
|
|
37
|
+
LEV_1 = 1
|
|
38
|
+
|
|
39
|
+
#
|
|
40
|
+
# LEV_2 - Verbose
|
|
41
|
+
#
|
|
42
|
+
# This log level should be used when verbose information may be needed to
|
|
43
|
+
# analyze the behavior of the framework. This should be the default log
|
|
44
|
+
# level for all detailed information not falling into LEV_0 or LEV_1.
|
|
45
|
+
# It is recommended that this log level be used by default if you are
|
|
46
|
+
# unsure.
|
|
47
|
+
#
|
|
48
|
+
LEV_2 = 2
|
|
49
|
+
|
|
50
|
+
#
|
|
51
|
+
# LEV_3 - Insanity
|
|
52
|
+
#
|
|
53
|
+
# This log level should contain very verbose information about the
|
|
54
|
+
# behavior of the framework, such as detailed information about variable
|
|
55
|
+
# states at certain phases including, but not limited to, loop iterations,
|
|
56
|
+
# function calls, and so on. This log level will rarely be displayed,
|
|
57
|
+
# but when it is the information provided should make it easy to analyze
|
|
58
|
+
# any problem.
|
|
59
|
+
#
|
|
60
|
+
LEV_3 = 3
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
#
|
|
64
|
+
# Architecture constants
|
|
65
|
+
#
|
|
66
|
+
ARCH_ANY = '_any_'
|
|
67
|
+
ARCH_X86 = 'x86'
|
|
68
|
+
ARCH_X86_64 = 'x86_64'
|
|
69
|
+
ARCH_X64 = 'x64' # To be used for compatability with ARCH_X86_64
|
|
70
|
+
ARCH_MIPS = 'mips'
|
|
71
|
+
ARCH_MIPSLE = 'mipsle'
|
|
72
|
+
ARCH_MIPSBE = 'mipsbe'
|
|
73
|
+
ARCH_PPC = 'ppc'
|
|
74
|
+
ARCH_PPC64 = 'ppc64'
|
|
75
|
+
ARCH_CBEA = 'cbea'
|
|
76
|
+
ARCH_CBEA64 = 'cbea64'
|
|
77
|
+
ARCH_SPARC = 'sparc'
|
|
78
|
+
ARCH_CMD = 'cmd'
|
|
79
|
+
ARCH_PHP = 'php'
|
|
80
|
+
ARCH_TTY = 'tty'
|
|
81
|
+
ARCH_ARMLE = 'armle'
|
|
82
|
+
ARCH_ARMBE = 'armbe'
|
|
83
|
+
ARCH_JAVA = 'java'
|
|
84
|
+
ARCH_TYPES =
|
|
85
|
+
[
|
|
86
|
+
ARCH_X86,
|
|
87
|
+
ARCH_X86_64,
|
|
88
|
+
ARCH_MIPS,
|
|
89
|
+
ARCH_MIPSLE,
|
|
90
|
+
ARCH_MIPSBE,
|
|
91
|
+
ARCH_PPC,
|
|
92
|
+
ARCH_PPC64,
|
|
93
|
+
ARCH_CBEA,
|
|
94
|
+
ARCH_CBEA64,
|
|
95
|
+
ARCH_SPARC,
|
|
96
|
+
ARCH_ARMLE,
|
|
97
|
+
ARCH_ARMBE,
|
|
98
|
+
ARCH_CMD,
|
|
99
|
+
ARCH_PHP,
|
|
100
|
+
ARCH_TTY,
|
|
101
|
+
ARCH_JAVA
|
|
102
|
+
]
|
|
103
|
+
|
|
104
|
+
ARCH_ALL = ARCH_TYPES
|
|
105
|
+
|
|
106
|
+
#
|
|
107
|
+
# Endian constants
|
|
108
|
+
#
|
|
109
|
+
ENDIAN_LITTLE = 0
|
|
110
|
+
ENDIAN_BIG = 1
|
|
111
|
+
|
|
112
|
+
IS_ENDIAN_LITTLE = ( [1].pack('s') == "\x01\x00" ) ? true : false
|
|
113
|
+
IS_ENDIAN_BIG = ( not IS_ENDIAN_LITTLE )
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# $Id: elf.rb 6615 2009-06-03 01:39:54Z hdm $
|
|
4
|
+
|
|
5
|
+
require 'rex/elfparsey/elfbase'
|
|
6
|
+
require 'rex/elfparsey/exceptions'
|
|
7
|
+
require 'rex/image_source'
|
|
8
|
+
|
|
9
|
+
module Rex
|
|
10
|
+
module ElfParsey
|
|
11
|
+
class Elf < ElfBase
|
|
12
|
+
|
|
13
|
+
attr_accessor :elf_header, :program_header, :base_addr, :isource
|
|
14
|
+
|
|
15
|
+
def initialize(isource)
|
|
16
|
+
offset = 0
|
|
17
|
+
base_addr = 0
|
|
18
|
+
|
|
19
|
+
# ELF Header
|
|
20
|
+
elf_header = ElfHeader.new(isource.read(offset, ELF_HEADER_SIZE))
|
|
21
|
+
|
|
22
|
+
# Data encoding
|
|
23
|
+
ei_data = elf_header.e_ident[EI_DATA,1].unpack("C")[0]
|
|
24
|
+
|
|
25
|
+
e_phoff = elf_header.e_phoff
|
|
26
|
+
e_phentsize = elf_header.e_phentsize
|
|
27
|
+
e_phnum = elf_header.e_phnum
|
|
28
|
+
|
|
29
|
+
# Program Header Table
|
|
30
|
+
program_header = []
|
|
31
|
+
|
|
32
|
+
e_phnum.times do |i|
|
|
33
|
+
offset = e_phoff + (e_phentsize * i)
|
|
34
|
+
|
|
35
|
+
program_header << ProgramHeader.new(
|
|
36
|
+
isource.read(offset, PROGRAM_HEADER_SIZE), ei_data
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
if program_header[-1].p_type == PT_LOAD && base_addr == 0
|
|
40
|
+
base_addr = program_header[-1].p_vaddr
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
self.elf_header = elf_header
|
|
46
|
+
self.program_header = program_header
|
|
47
|
+
self.base_addr = base_addr
|
|
48
|
+
self.isource = isource
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def self.new_from_file(filename, disk_backed = false)
|
|
52
|
+
|
|
53
|
+
file = ::File.new(filename)
|
|
54
|
+
# file.binmode # windows... :\
|
|
55
|
+
|
|
56
|
+
if disk_backed
|
|
57
|
+
return self.new(ImageSource::Disk.new(file))
|
|
58
|
+
else
|
|
59
|
+
obj = new_from_string(file.read)
|
|
60
|
+
file.close
|
|
61
|
+
return obj
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def self.new_from_string(data)
|
|
66
|
+
return self.new(ImageSource::Memory.new(data))
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
#
|
|
70
|
+
# Returns true if this binary is for a 64-bit architecture.
|
|
71
|
+
#
|
|
72
|
+
def ptr_64?
|
|
73
|
+
unless [ ELFCLASS32, ELFCLASS64 ].include?(
|
|
74
|
+
elf_header.e_ident[EI_CLASS,1].unpack("C*")[0])
|
|
75
|
+
raise ElfHeaderError, 'Invalid class', caller
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
elf_header.e_ident[EI_CLASS,1].unpack("C*")[0] == ELFCLASS64
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
#
|
|
82
|
+
# Returns true if this binary is for a 32-bit architecture.
|
|
83
|
+
# This check does not take into account 16-bit binaries at the moment.
|
|
84
|
+
#
|
|
85
|
+
def ptr_32?
|
|
86
|
+
ptr_64? == false
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
#
|
|
90
|
+
# Converts a virtual address to a string representation based on the
|
|
91
|
+
# underlying architecture.
|
|
92
|
+
#
|
|
93
|
+
def ptr_s(rva)
|
|
94
|
+
(ptr_32?) ? ("0x%.8x" % rva) : ("0x%.16x" % rva)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def offset_to_rva(offset)
|
|
98
|
+
base_addr + offset
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def rva_to_offset(rva)
|
|
102
|
+
rva - base_addr
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def read(offset, len)
|
|
106
|
+
isource.read(offset, len)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def read_rva(rva, len)
|
|
110
|
+
isource.read(rva_to_offset(rva), len)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def index(*args)
|
|
114
|
+
isource.index(*args)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def close
|
|
118
|
+
isource.close
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# $Id: elfbase.rb 6615 2009-06-03 01:39:54Z hdm $
|
|
4
|
+
|
|
5
|
+
require 'rex/struct2'
|
|
6
|
+
|
|
7
|
+
module Rex
|
|
8
|
+
module ElfParsey
|
|
9
|
+
class ElfBase
|
|
10
|
+
|
|
11
|
+
# ELF Header
|
|
12
|
+
|
|
13
|
+
ELF_HEADER_SIZE = 52
|
|
14
|
+
|
|
15
|
+
EI_NIDENT = 16
|
|
16
|
+
|
|
17
|
+
ELF32_EHDR_LSB = Rex::Struct2::CStructTemplate.new(
|
|
18
|
+
[ 'string', 'e_ident', EI_NIDENT, '' ],
|
|
19
|
+
[ 'uint16v', 'e_type', 0 ],
|
|
20
|
+
[ 'uint16v', 'e_machine', 0 ],
|
|
21
|
+
[ 'uint32v', 'e_version', 0 ],
|
|
22
|
+
[ 'uint32v', 'e_entry', 0 ],
|
|
23
|
+
[ 'uint32v', 'e_phoff', 0 ],
|
|
24
|
+
[ 'uint32v', 'e_shoff', 0 ],
|
|
25
|
+
[ 'uint32v', 'e_flags', 0 ],
|
|
26
|
+
[ 'uint16v', 'e_ehsize', 0 ],
|
|
27
|
+
[ 'uint16v', 'e_phentsize', 0 ],
|
|
28
|
+
[ 'uint16v', 'e_phnum', 0 ],
|
|
29
|
+
[ 'uint16v', 'e_shentsize', 0 ],
|
|
30
|
+
[ 'uint16v', 'e_shnum', 0 ],
|
|
31
|
+
[ 'uint16v', 'e_shstrndx', 0 ]
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
ELF32_EHDR_MSB = Rex::Struct2::CStructTemplate.new(
|
|
35
|
+
[ 'string', 'e_ident', EI_NIDENT, '' ],
|
|
36
|
+
[ 'uint16n', 'e_type', 0 ],
|
|
37
|
+
[ 'uint16n', 'e_machine', 0 ],
|
|
38
|
+
[ 'uint32n', 'e_version', 0 ],
|
|
39
|
+
[ 'uint32n', 'e_entry', 0 ],
|
|
40
|
+
[ 'uint32n', 'e_phoff', 0 ],
|
|
41
|
+
[ 'uint32n', 'e_shoff', 0 ],
|
|
42
|
+
[ 'uint32n', 'e_flags', 0 ],
|
|
43
|
+
[ 'uint16n', 'e_ehsize', 0 ],
|
|
44
|
+
[ 'uint16n', 'e_phentsize', 0 ],
|
|
45
|
+
[ 'uint16n', 'e_phnum', 0 ],
|
|
46
|
+
[ 'uint16n', 'e_shentsize', 0 ],
|
|
47
|
+
[ 'uint16n', 'e_shnum', 0 ],
|
|
48
|
+
[ 'uint16n', 'e_shstrndx', 0 ]
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
# e_type This member identifies the object file type
|
|
52
|
+
|
|
53
|
+
ET_NONE = 0 # No file type
|
|
54
|
+
ET_REL = 1 # Relocatable file
|
|
55
|
+
ET_EXEC = 2 # Executable file
|
|
56
|
+
ET_DYN = 3 # Shared object file
|
|
57
|
+
ET_CORE = 4 # Core file
|
|
58
|
+
ET_LOPROC = 0xff00 # Processor-specific
|
|
59
|
+
ET_HIPROC = 0xffff # Processor-specific
|
|
60
|
+
|
|
61
|
+
#
|
|
62
|
+
# e_machine This member's value specifies the required architecture for an
|
|
63
|
+
# individual file.
|
|
64
|
+
#
|
|
65
|
+
|
|
66
|
+
# ET_NONE = 0 # No machine
|
|
67
|
+
EM_M32 = 1 # AT&T WE 32100
|
|
68
|
+
EM_SPARC = 2 # SPARC
|
|
69
|
+
EM_386 = 3 # Intel Architecture
|
|
70
|
+
EM_68K = 4 # Motorola 68000
|
|
71
|
+
EM_88K = 5 # Motorola 88000
|
|
72
|
+
EM_860 = 7 # Intel 80860
|
|
73
|
+
EM_MIPS = 8 # MIPS RS3000 Big-Endian
|
|
74
|
+
EM_MIPS_RS4_BE = 10 # MIPS RS4000 Big-Endian
|
|
75
|
+
|
|
76
|
+
# e_version This member identifies the object file version
|
|
77
|
+
|
|
78
|
+
EV_NONE = 0 # Invalid version
|
|
79
|
+
EV_CURRENT = 1 # Current version
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
# ELF Identification
|
|
83
|
+
|
|
84
|
+
# e_ident[] Identification indexes
|
|
85
|
+
|
|
86
|
+
EI_MAG0 = 0 # File identification
|
|
87
|
+
EI_MAG1 = 1 # File identification
|
|
88
|
+
EI_MAG2 = 2 # File identification
|
|
89
|
+
EI_MAG3 = 3 # File identification
|
|
90
|
+
EI_CLASS = 4 # File class
|
|
91
|
+
EI_DATA = 5 # Data encoding
|
|
92
|
+
EI_VERSION = 6 # File version
|
|
93
|
+
EI_PAD = 7 # Start of padding bytes
|
|
94
|
+
# EI_NIDENT = 16 # Size of e_ident[]
|
|
95
|
+
|
|
96
|
+
#
|
|
97
|
+
# EI_MAG0 to EI_MAG3 A file's first 4 bytes hold a "magic number",
|
|
98
|
+
# identifying the file as an ELF object file.
|
|
99
|
+
#
|
|
100
|
+
|
|
101
|
+
ELFMAG0 = 0x7f # e_ident[EI_MAG0]
|
|
102
|
+
ELFMAG1 = ?E # e_ident[EI_MAG1]
|
|
103
|
+
ELFMAG2 = ?L # e_ident[EI_MAG2]
|
|
104
|
+
ELFMAG3 = ?F # e_ident[EI_MAG3]
|
|
105
|
+
|
|
106
|
+
ELFMAG = ELFMAG0.chr + ELFMAG1.chr + ELFMAG2.chr + ELFMAG3.chr
|
|
107
|
+
|
|
108
|
+
# EI_CLASS Identifies the file's class, or capacity
|
|
109
|
+
|
|
110
|
+
ELFCLASSNONE = 0 # Invalid class
|
|
111
|
+
ELFCLASS32 = 1 # 32-bit objects
|
|
112
|
+
ELFCLASS64 = 2 # 64-bit objects
|
|
113
|
+
|
|
114
|
+
#
|
|
115
|
+
# EI_DATA Specifies the data encoding of the processor-specific data in
|
|
116
|
+
# the object file. The following encodings are currently defined.
|
|
117
|
+
#
|
|
118
|
+
|
|
119
|
+
ELFDATANONE = 0 # Invalid data encoding
|
|
120
|
+
ELFDATA2LSB = 1 # Least significant byte first
|
|
121
|
+
ELFDATA2MSB = 2 # Most significant byte first
|
|
122
|
+
|
|
123
|
+
class GenericStruct
|
|
124
|
+
attr_accessor :struct
|
|
125
|
+
def initialize(_struct)
|
|
126
|
+
self.struct = _struct
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# The following methods are just pass-throughs for struct
|
|
130
|
+
|
|
131
|
+
# Access a value
|
|
132
|
+
def v
|
|
133
|
+
struct.v
|
|
134
|
+
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Access a value by array
|
|
138
|
+
def [](*args)
|
|
139
|
+
struct[*args]
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Obtain an array of all fields
|
|
143
|
+
def keys
|
|
144
|
+
struct.keys
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def method_missing(meth, *args)
|
|
148
|
+
v[meth.to_s] || (raise NoMethodError.new, meth)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
class GenericHeader < GenericStruct
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
class ElfHeader < GenericHeader
|
|
156
|
+
def initialize(rawdata)
|
|
157
|
+
|
|
158
|
+
# Identify the data encoding and parse ELF Header
|
|
159
|
+
elf_header = ELF32_EHDR_LSB.make_struct
|
|
160
|
+
|
|
161
|
+
if !elf_header.from_s(rawdata)
|
|
162
|
+
raise ElfHeaderError, "Couldn't parse ELF Header", caller
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
if elf_header.v['e_ident'][EI_DATA,1].unpack('C')[0] == ELFDATA2MSB
|
|
166
|
+
elf_header = ELF32_EHDR_MSB.make_struct
|
|
167
|
+
|
|
168
|
+
if !elf_header.from_s(rawdata)
|
|
169
|
+
raise ElfHeaderError, "Couldn't parse ELF Header", caller
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
unless [ ELFDATA2LSB, ELFDATA2MSB ].include?(
|
|
174
|
+
elf_header.v['e_ident'][EI_DATA,1].unpack('C')[0])
|
|
175
|
+
raise ElfHeaderError, "Invalid data encoding", caller
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Identify the file as an ELF object file
|
|
179
|
+
unless elf_header.v['e_ident'][EI_MAG0, 4] == ELFMAG
|
|
180
|
+
raise ElfHeaderError, 'Invalid magic number', caller
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
self.struct = elf_header
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def e_ident
|
|
187
|
+
struct.v['e_ident']
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
# Program Header
|
|
194
|
+
|
|
195
|
+
PROGRAM_HEADER_SIZE = 36
|
|
196
|
+
|
|
197
|
+
ELF32_PHDR_LSB = Rex::Struct2::CStructTemplate.new(
|
|
198
|
+
[ 'uint32v', 'p_type', 0 ],
|
|
199
|
+
[ 'uint32v', 'p_offset', 0 ],
|
|
200
|
+
[ 'uint32v', 'p_vaddr', 0 ],
|
|
201
|
+
[ 'uint32v', 'p_paddr', 0 ],
|
|
202
|
+
[ 'uint32v', 'p_filesz', 0 ],
|
|
203
|
+
[ 'uint32v', 'p_filesz', 0 ],
|
|
204
|
+
[ 'uint32v', 'p_memsz', 0 ],
|
|
205
|
+
[ 'uint32v', 'p_flags', 0 ],
|
|
206
|
+
[ 'uint32v', 'p_align', 0 ]
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
ELF32_PHDR_MSB = Rex::Struct2::CStructTemplate.new(
|
|
210
|
+
[ 'uint32n', 'p_type', 0 ],
|
|
211
|
+
[ 'uint32n', 'p_offset', 0 ],
|
|
212
|
+
[ 'uint32n', 'p_vaddr', 0 ],
|
|
213
|
+
[ 'uint32n', 'p_paddr', 0 ],
|
|
214
|
+
[ 'uint32n', 'p_filesz', 0 ],
|
|
215
|
+
[ 'uint32n', 'p_filesz', 0 ],
|
|
216
|
+
[ 'uint32n', 'p_memsz', 0 ],
|
|
217
|
+
[ 'uint32n', 'p_flags', 0 ],
|
|
218
|
+
[ 'uint32n', 'p_align', 0 ]
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
#
|
|
222
|
+
# p_type This member tells what kind of segment this array element
|
|
223
|
+
# describes or how to interpret the array element's information.
|
|
224
|
+
#
|
|
225
|
+
|
|
226
|
+
# Segment Types
|
|
227
|
+
|
|
228
|
+
PT_NULL = 0
|
|
229
|
+
PT_LOAD = 1
|
|
230
|
+
PT_DYNAMIC = 2
|
|
231
|
+
PT_INTERP = 3
|
|
232
|
+
PT_NOTE = 4
|
|
233
|
+
PT_SHLIB = 5
|
|
234
|
+
PT_PHDR = 6
|
|
235
|
+
PT_LOPROC = 0x70000000
|
|
236
|
+
PT_HIPROC = 0x7fffffff
|
|
237
|
+
|
|
238
|
+
class ProgramHeader < GenericHeader
|
|
239
|
+
def initialize(rawdata, ei_data)
|
|
240
|
+
# Identify the data encoding and parse Program Header
|
|
241
|
+
if ei_data == ELFDATA2LSB
|
|
242
|
+
program_header = ELF32_PHDR_LSB.make_struct
|
|
243
|
+
elsif ei_data == ELFDATA2MSB
|
|
244
|
+
program_header = ELF32_PHDR_MSB.make_struct
|
|
245
|
+
else
|
|
246
|
+
raise ElfHeaderError, "Invalid data encoding", caller
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
if !program_header.from_s(rawdata)
|
|
250
|
+
raise ProgramHeaderError, "Couldn't parse Program Header", caller
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
self.struct = program_header
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
end
|