librex 0.0.68 → 0.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. checksums.yaml +15 -0
  2. data/README.markdown +1 -1
  3. data/Rakefile +18 -16
  4. data/lib/rex.rb +14 -10
  5. data/lib/rex/LICENSE +2 -2
  6. data/lib/rex/arch.rb +76 -76
  7. data/lib/rex/arch/sparc.rb +57 -58
  8. data/lib/rex/arch/x86.rb +506 -496
  9. data/lib/rex/assembly/nasm.rb +83 -84
  10. data/lib/rex/compat.rb +228 -173
  11. data/lib/rex/constants.rb +47 -37
  12. data/lib/rex/elfparsey.rb +0 -3
  13. data/lib/rex/elfparsey/elf.rb +107 -110
  14. data/lib/rex/elfparsey/elfbase.rb +244 -247
  15. data/lib/rex/elfparsey/exceptions.rb +0 -3
  16. data/lib/rex/elfscan.rb +0 -3
  17. data/lib/rex/elfscan/scanner.rb +184 -166
  18. data/lib/rex/elfscan/search.rb +35 -38
  19. data/lib/rex/encoder/alpha2.rb +1 -2
  20. data/lib/rex/encoder/alpha2/alpha_mixed.rb +52 -53
  21. data/lib/rex/encoder/alpha2/alpha_upper.rb +62 -63
  22. data/lib/rex/encoder/alpha2/generic.rb +77 -78
  23. data/lib/rex/encoder/alpha2/unicode_mixed.rb +101 -97
  24. data/lib/rex/encoder/alpha2/unicode_upper.rb +106 -107
  25. data/lib/rex/encoder/bloxor/bloxor.rb +326 -0
  26. data/lib/rex/encoder/ndr.rb +68 -68
  27. data/lib/rex/encoder/nonalpha.rb +50 -51
  28. data/lib/rex/encoder/nonupper.rb +50 -51
  29. data/lib/rex/encoder/xdr.rb +78 -78
  30. data/lib/rex/encoder/xor.rb +52 -53
  31. data/lib/rex/encoder/xor/dword.rb +1 -2
  32. data/lib/rex/encoder/xor/dword_additive.rb +1 -2
  33. data/lib/rex/encoders/xor_dword.rb +17 -18
  34. data/lib/rex/encoders/xor_dword_additive.rb +35 -36
  35. data/lib/rex/encoding/xor.rb +0 -1
  36. data/lib/rex/encoding/xor/byte.rb +3 -4
  37. data/lib/rex/encoding/xor/dword.rb +3 -4
  38. data/lib/rex/encoding/xor/dword_additive.rb +72 -73
  39. data/lib/rex/encoding/xor/exceptions.rb +2 -3
  40. data/lib/rex/encoding/xor/generic.rb +129 -130
  41. data/lib/rex/encoding/xor/qword.rb +3 -4
  42. data/lib/rex/encoding/xor/word.rb +3 -4
  43. data/lib/rex/exceptions.rb +100 -101
  44. data/lib/rex/exploitation/cmdstager.rb +3 -3
  45. data/lib/rex/exploitation/cmdstager/base.rb +170 -156
  46. data/lib/rex/exploitation/cmdstager/bourne.rb +105 -0
  47. data/lib/rex/exploitation/cmdstager/debug_asm.rb +110 -113
  48. data/lib/rex/exploitation/cmdstager/debug_write.rb +106 -109
  49. data/lib/rex/exploitation/cmdstager/echo.rb +164 -0
  50. data/lib/rex/exploitation/cmdstager/printf.rb +122 -0
  51. data/lib/rex/exploitation/cmdstager/tftp.rb +34 -27
  52. data/lib/rex/exploitation/cmdstager/vbs.rb +95 -98
  53. data/lib/rex/exploitation/egghunter.rb +359 -346
  54. data/lib/rex/exploitation/encryptjs.rb +60 -60
  55. data/lib/rex/exploitation/heaplib.rb +76 -76
  56. data/lib/rex/exploitation/js.rb +6 -0
  57. data/lib/rex/exploitation/js/detect.rb +69 -0
  58. data/lib/rex/exploitation/js/memory.rb +81 -0
  59. data/lib/rex/exploitation/js/network.rb +84 -0
  60. data/lib/rex/exploitation/js/utils.rb +33 -0
  61. data/lib/rex/exploitation/jsobfu.rb +448 -424
  62. data/lib/rex/exploitation/obfuscatejs.rb +301 -301
  63. data/lib/rex/exploitation/omelet.rb +257 -257
  64. data/lib/rex/exploitation/opcodedb.rb +699 -699
  65. data/lib/rex/exploitation/ropdb.rb +189 -0
  66. data/lib/rex/exploitation/seh.rb +68 -68
  67. data/lib/rex/file.rb +96 -49
  68. data/lib/rex/image_source.rb +0 -3
  69. data/lib/rex/image_source/disk.rb +45 -48
  70. data/lib/rex/image_source/image_source.rb +33 -36
  71. data/lib/rex/image_source/memory.rb +17 -20
  72. data/lib/rex/io/bidirectional_pipe.rb +118 -115
  73. data/lib/rex/io/datagram_abstraction.rb +13 -14
  74. data/lib/rex/io/ring_buffer.rb +273 -273
  75. data/lib/rex/io/stream.rb +284 -284
  76. data/lib/rex/io/stream_abstraction.rb +183 -181
  77. data/lib/rex/io/stream_server.rb +193 -193
  78. data/lib/rex/job_container.rb +167 -167
  79. data/lib/rex/logging.rb +0 -1
  80. data/lib/rex/logging/log_dispatcher.rb +113 -113
  81. data/lib/rex/logging/log_sink.rb +17 -17
  82. data/lib/rex/logging/sinks/flatfile.rb +36 -36
  83. data/lib/rex/logging/sinks/stderr.rb +27 -27
  84. data/lib/rex/mac_oui.rb +16572 -16571
  85. data/lib/rex/machparsey.rb +0 -1
  86. data/lib/rex/machparsey/exceptions.rb +0 -1
  87. data/lib/rex/machparsey/mach.rb +160 -161
  88. data/lib/rex/machparsey/machbase.rb +367 -368
  89. data/lib/rex/machscan.rb +0 -1
  90. data/lib/rex/machscan/scanner.rb +175 -176
  91. data/lib/rex/mime/encoding.rb +17 -0
  92. data/lib/rex/mime/header.rb +58 -58
  93. data/lib/rex/mime/message.rb +140 -137
  94. data/lib/rex/mime/part.rb +41 -12
  95. data/lib/rex/nop/opty2.rb +90 -90
  96. data/lib/rex/nop/opty2_tables.rb +273 -273
  97. data/lib/rex/ole.rb +0 -4
  98. data/lib/rex/ole/clsid.rb +26 -30
  99. data/lib/rex/ole/difat.rb +121 -125
  100. data/lib/rex/ole/directory.rb +205 -209
  101. data/lib/rex/ole/direntry.rb +217 -221
  102. data/lib/rex/ole/fat.rb +79 -83
  103. data/lib/rex/ole/header.rb +178 -182
  104. data/lib/rex/ole/minifat.rb +49 -53
  105. data/lib/rex/ole/propset.rb +113 -117
  106. data/lib/rex/ole/samples/create_ole.rb +8 -9
  107. data/lib/rex/ole/samples/dir.rb +10 -11
  108. data/lib/rex/ole/samples/dump_stream.rb +14 -15
  109. data/lib/rex/ole/samples/ole_info.rb +5 -6
  110. data/lib/rex/ole/storage.rb +372 -376
  111. data/lib/rex/ole/stream.rb +33 -37
  112. data/lib/rex/ole/substorage.rb +20 -24
  113. data/lib/rex/ole/util.rb +137 -141
  114. data/lib/rex/parser/acunetix_nokogiri.rb +398 -398
  115. data/lib/rex/parser/apple_backup_manifestdb.rb +116 -116
  116. data/lib/rex/parser/appscan_nokogiri.rb +359 -359
  117. data/lib/rex/parser/arguments.rb +88 -88
  118. data/lib/rex/parser/burp_session_nokogiri.rb +258 -258
  119. data/lib/rex/parser/ci_nokogiri.rb +184 -184
  120. data/lib/rex/parser/foundstone_nokogiri.rb +334 -333
  121. data/lib/rex/parser/fusionvm_nokogiri.rb +94 -94
  122. data/lib/rex/parser/ini.rb +167 -167
  123. data/lib/rex/parser/ip360_aspl_xml.rb +84 -84
  124. data/lib/rex/parser/ip360_xml.rb +77 -77
  125. data/lib/rex/parser/mbsa_nokogiri.rb +224 -224
  126. data/lib/rex/parser/nessus_xml.rb +100 -100
  127. data/lib/rex/parser/netsparker_xml.rb +89 -75
  128. data/lib/rex/parser/nexpose_raw_nokogiri.rb +677 -677
  129. data/lib/rex/parser/nexpose_simple_nokogiri.rb +322 -322
  130. data/lib/rex/parser/nexpose_xml.rb +105 -105
  131. data/lib/rex/parser/nmap_nokogiri.rb +386 -386
  132. data/lib/rex/parser/nmap_xml.rb +116 -116
  133. data/lib/rex/parser/nokogiri_doc_mixin.rb +223 -221
  134. data/lib/rex/parser/openvas_nokogiri.rb +162 -162
  135. data/lib/rex/parser/outpost24_nokogiri.rb +239 -0
  136. data/lib/rex/parser/retina_xml.rb +90 -90
  137. data/lib/rex/parser/unattend.rb +171 -0
  138. data/lib/rex/parser/wapiti_nokogiri.rb +89 -89
  139. data/lib/rex/payloads/win32/common.rb +14 -14
  140. data/lib/rex/payloads/win32/kernel.rb +36 -36
  141. data/lib/rex/payloads/win32/kernel/common.rb +32 -32
  142. data/lib/rex/payloads/win32/kernel/recovery.rb +27 -27
  143. data/lib/rex/payloads/win32/kernel/stager.rb +170 -170
  144. data/lib/rex/peparsey.rb +0 -3
  145. data/lib/rex/peparsey/exceptions.rb +0 -3
  146. data/lib/rex/peparsey/pe.rb +196 -199
  147. data/lib/rex/peparsey/pe_memdump.rb +35 -38
  148. data/lib/rex/peparsey/pebase.rb +1633 -1652
  149. data/lib/rex/peparsey/section.rb +115 -124
  150. data/lib/rex/pescan.rb +0 -3
  151. data/lib/rex/pescan/analyze.rb +351 -351
  152. data/lib/rex/pescan/scanner.rb +182 -182
  153. data/lib/rex/pescan/search.rb +59 -59
  154. data/lib/rex/platforms/windows.rb +37 -37
  155. data/lib/rex/poly.rb +111 -110
  156. data/lib/rex/poly/block.rb +419 -417
  157. data/lib/rex/poly/machine.rb +12 -0
  158. data/lib/rex/poly/machine/machine.rb +829 -0
  159. data/lib/rex/poly/machine/x86.rb +508 -0
  160. data/lib/rex/poly/register.rb +70 -70
  161. data/lib/rex/poly/register/x86.rb +22 -22
  162. data/lib/rex/post.rb +0 -1
  163. data/lib/rex/post/dir.rb +35 -36
  164. data/lib/rex/post/file.rb +140 -141
  165. data/lib/rex/post/file_stat.rb +198 -199
  166. data/lib/rex/post/io.rb +167 -168
  167. data/lib/rex/post/meterpreter.rb +1 -1
  168. data/lib/rex/post/meterpreter/channel.rb +389 -390
  169. data/lib/rex/post/meterpreter/channel_container.rb +33 -34
  170. data/lib/rex/post/meterpreter/channels/pool.rb +129 -130
  171. data/lib/rex/post/meterpreter/channels/pools/file.rb +35 -36
  172. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +72 -73
  173. data/lib/rex/post/meterpreter/channels/stream.rb +62 -63
  174. data/lib/rex/post/meterpreter/client.rb +442 -436
  175. data/lib/rex/post/meterpreter/client_core.rb +326 -310
  176. data/lib/rex/post/meterpreter/dependencies.rb +0 -1
  177. data/lib/rex/post/meterpreter/extension.rb +12 -13
  178. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +35 -36
  179. data/lib/rex/post/meterpreter/extensions/extapi/adsi/adsi.rb +71 -0
  180. data/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb +169 -0
  181. data/lib/rex/post/meterpreter/extensions/extapi/extapi.rb +45 -0
  182. data/lib/rex/post/meterpreter/extensions/extapi/service/service.rb +104 -0
  183. data/lib/rex/post/meterpreter/extensions/extapi/tlv.rb +77 -0
  184. data/lib/rex/post/meterpreter/extensions/extapi/window/window.rb +56 -0
  185. data/lib/rex/post/meterpreter/extensions/extapi/wmi/wmi.rb +75 -0
  186. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +70 -71
  187. data/lib/rex/post/meterpreter/extensions/kiwi/kiwi.rb +361 -0
  188. data/lib/rex/post/meterpreter/extensions/kiwi/tlv.rb +76 -0
  189. data/lib/rex/post/meterpreter/extensions/lanattacks/dhcp/dhcp.rb +78 -0
  190. data/lib/rex/post/meterpreter/extensions/lanattacks/lanattacks.rb +22 -78
  191. data/lib/rex/post/meterpreter/extensions/lanattacks/tftp/tftp.rb +49 -0
  192. data/lib/rex/post/meterpreter/extensions/lanattacks/tlv.rb +4 -4
  193. data/lib/rex/post/meterpreter/extensions/mimikatz/mimikatz.rb +128 -0
  194. data/lib/rex/post/meterpreter/extensions/mimikatz/tlv.rb +16 -0
  195. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +38 -39
  196. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +1 -1
  197. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +95 -96
  198. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +39 -40
  199. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +80 -85
  200. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +94 -95
  201. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +207 -147
  202. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +258 -259
  203. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +366 -301
  204. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +72 -73
  205. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +24 -25
  206. data/lib/rex/post/meterpreter/extensions/stdapi/net/arp.rb +59 -0
  207. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +227 -149
  208. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +107 -108
  209. data/lib/rex/post/meterpreter/extensions/stdapi/net/netstat.rb +97 -0
  210. data/lib/rex/post/meterpreter/extensions/stdapi/net/resolve.rb +106 -0
  211. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +41 -42
  212. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +102 -101
  213. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +151 -152
  214. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +142 -142
  215. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +185 -185
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +38118 -38117
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +7 -7
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +2086 -2084
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_crypt32.rb +15 -15
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +80 -80
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +3835 -3833
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +84 -28
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +151 -137
  224. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +15 -6
  225. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3155 -3155
  226. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_version.rb +41 -0
  227. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wlanapi.rb +70 -70
  228. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wldap32.rb +128 -0
  229. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +596 -596
  230. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +310 -301
  231. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +71 -61
  232. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +100 -100
  233. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb +14 -14
  234. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/mock_magic.rb +488 -488
  235. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +273 -264
  236. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb +5 -5
  237. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +240 -238
  238. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +17 -15
  239. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb +61 -61
  240. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +654 -635
  241. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +49 -49
  242. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +103 -102
  243. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +98 -68
  244. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +165 -166
  245. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +16 -17
  246. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +34 -36
  247. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +363 -364
  248. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +102 -103
  249. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +28 -29
  250. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +303 -304
  251. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +113 -114
  252. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +260 -261
  253. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +165 -166
  254. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +69 -70
  255. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb +160 -161
  256. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +143 -144
  257. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +29 -12
  258. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +230 -231
  259. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +181 -44
  260. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +12 -13
  261. data/lib/rex/post/meterpreter/object_aliases.rb +56 -57
  262. data/lib/rex/post/meterpreter/packet.rb +591 -592
  263. data/lib/rex/post/meterpreter/packet_dispatcher.rb +506 -496
  264. data/lib/rex/post/meterpreter/packet_parser.rb +72 -73
  265. data/lib/rex/post/meterpreter/packet_response_waiter.rb +56 -57
  266. data/lib/rex/post/meterpreter/ui/console.rb +112 -112
  267. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +53 -53
  268. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +911 -854
  269. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +86 -86
  270. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi.rb +65 -0
  271. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/adsi.rb +198 -0
  272. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb +444 -0
  273. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/service.rb +199 -0
  274. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/window.rb +118 -0
  275. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/wmi.rb +108 -0
  276. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +220 -220
  277. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/kiwi.rb +509 -0
  278. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks.rb +60 -0
  279. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/dhcp.rb +254 -0
  280. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/tftp.rb +159 -0
  281. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/mimikatz.rb +182 -0
  282. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +173 -173
  283. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +40 -40
  284. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +75 -77
  285. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +30 -30
  286. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +105 -105
  287. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +182 -182
  288. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +37 -37
  289. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +504 -482
  290. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +401 -330
  291. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +883 -581
  292. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +296 -299
  293. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +320 -153
  294. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +78 -78
  295. data/lib/rex/post/permission.rb +0 -1
  296. data/lib/rex/post/process.rb +39 -40
  297. data/lib/rex/post/thread.rb +41 -42
  298. data/lib/rex/post/ui.rb +35 -36
  299. data/lib/rex/proto/addp.rb +218 -0
  300. data/lib/rex/proto/dcerpc/client.rb +344 -344
  301. data/lib/rex/proto/dcerpc/exceptions.rb +128 -128
  302. data/lib/rex/proto/dcerpc/handle.rb +32 -32
  303. data/lib/rex/proto/dcerpc/ndr.rb +56 -56
  304. data/lib/rex/proto/dcerpc/packet.rb +249 -245
  305. data/lib/rex/proto/dcerpc/response.rb +170 -170
  306. data/lib/rex/proto/dcerpc/uuid.rb +65 -65
  307. data/lib/rex/proto/dcerpc/wdscp.rb +3 -0
  308. data/lib/rex/proto/dcerpc/wdscp/constants.rb +89 -0
  309. data/lib/rex/proto/dcerpc/wdscp/packet.rb +94 -0
  310. data/lib/rex/proto/dhcp.rb +0 -1
  311. data/lib/rex/proto/dhcp/constants.rb +0 -1
  312. data/lib/rex/proto/dhcp/server.rb +303 -304
  313. data/lib/rex/proto/drda/constants.rb +1 -1
  314. data/lib/rex/proto/drda/packet.rb +186 -186
  315. data/lib/rex/proto/drda/utils.rb +104 -104
  316. data/lib/rex/proto/http.rb +1 -0
  317. data/lib/rex/proto/http/client.rb +692 -820
  318. data/lib/rex/proto/http/client_request.rb +472 -0
  319. data/lib/rex/proto/http/handler.rb +25 -25
  320. data/lib/rex/proto/http/handler/erb.rb +104 -104
  321. data/lib/rex/proto/http/handler/proc.rb +37 -37
  322. data/lib/rex/proto/http/header.rb +149 -149
  323. data/lib/rex/proto/http/packet.rb +388 -382
  324. data/lib/rex/proto/http/request.rb +332 -335
  325. data/lib/rex/proto/http/response.rb +132 -72
  326. data/lib/rex/proto/http/server.rb +348 -338
  327. data/lib/rex/proto/iax2/call.rb +310 -310
  328. data/lib/rex/proto/iax2/client.rb +197 -197
  329. data/lib/rex/proto/iax2/codecs/alaw.rb +4 -4
  330. data/lib/rex/proto/iax2/codecs/mulaw.rb +4 -4
  331. data/lib/rex/proto/ipmi.rb +57 -0
  332. data/lib/rex/proto/ipmi/channel_auth_reply.rb +88 -0
  333. data/lib/rex/proto/ipmi/open_session_reply.rb +35 -0
  334. data/lib/rex/proto/ipmi/rakp2.rb +35 -0
  335. data/lib/rex/proto/ipmi/utils.rb +125 -0
  336. data/lib/rex/proto/natpmp.rb +1 -5
  337. data/lib/rex/proto/natpmp/constants.rb +4 -4
  338. data/lib/rex/proto/natpmp/packet.rb +25 -25
  339. data/lib/rex/proto/ntlm/base.rb +271 -271
  340. data/lib/rex/proto/ntlm/constants.rb +61 -61
  341. data/lib/rex/proto/ntlm/crypt.rb +348 -352
  342. data/lib/rex/proto/ntlm/exceptions.rb +3 -3
  343. data/lib/rex/proto/ntlm/message.rb +468 -471
  344. data/lib/rex/proto/ntlm/utils.rb +746 -746
  345. data/lib/rex/proto/pjl.rb +30 -0
  346. data/lib/rex/proto/pjl/client.rb +162 -0
  347. data/lib/rex/proto/proxy/socks4a.rb +440 -440
  348. data/lib/rex/proto/rfb.rb +1 -8
  349. data/lib/rex/proto/rfb/cipher.rb +46 -49
  350. data/lib/rex/proto/rfb/client.rb +179 -182
  351. data/lib/rex/proto/rfb/constants.rb +18 -21
  352. data/lib/rex/proto/smb/client.rb +1954 -1843
  353. data/lib/rex/proto/smb/constants.rb +533 -516
  354. data/lib/rex/proto/smb/crypt.rb +21 -21
  355. data/lib/rex/proto/smb/evasions.rb +43 -43
  356. data/lib/rex/proto/smb/exceptions.rb +791 -791
  357. data/lib/rex/proto/smb/simpleclient.rb +142 -286
  358. data/lib/rex/proto/smb/simpleclient/open_file.rb +106 -0
  359. data/lib/rex/proto/smb/simpleclient/open_pipe.rb +57 -0
  360. data/lib/rex/proto/smb/utils.rb +81 -81
  361. data/lib/rex/proto/sunrpc/client.rb +158 -158
  362. data/lib/rex/proto/tftp.rb +0 -1
  363. data/lib/rex/proto/tftp/client.rb +289 -289
  364. data/lib/rex/proto/tftp/constants.rb +9 -10
  365. data/lib/rex/proto/tftp/server.rb +466 -467
  366. data/lib/rex/random_identifier_generator.rb +176 -0
  367. data/lib/rex/registry.rb +1 -1
  368. data/lib/rex/registry/hive.rb +88 -88
  369. data/lib/rex/registry/lfkey.rb +25 -25
  370. data/lib/rex/registry/nodekey.rb +30 -30
  371. data/lib/rex/registry/regf.rb +10 -10
  372. data/lib/rex/registry/valuekey.rb +43 -43
  373. data/lib/rex/registry/valuelist.rb +13 -13
  374. data/lib/rex/ropbuilder/rop.rb +254 -253
  375. data/lib/rex/script.rb +21 -22
  376. data/lib/rex/script/base.rb +51 -50
  377. data/lib/rex/script/meterpreter.rb +2 -2
  378. data/lib/rex/service.rb +24 -24
  379. data/lib/rex/service_manager.rb +132 -132
  380. data/lib/rex/services/local_relay.rb +398 -398
  381. data/lib/rex/socket.rb +758 -763
  382. data/lib/rex/socket/comm.rb +95 -95
  383. data/lib/rex/socket/comm/local.rb +507 -440
  384. data/lib/rex/socket/ip.rb +118 -118
  385. data/lib/rex/socket/parameters.rb +351 -350
  386. data/lib/rex/socket/range_walker.rb +445 -368
  387. data/lib/rex/socket/ssl_tcp.rb +323 -317
  388. data/lib/rex/socket/ssl_tcp_server.rb +173 -158
  389. data/lib/rex/socket/subnet_walker.rb +48 -48
  390. data/lib/rex/socket/switch_board.rb +259 -259
  391. data/lib/rex/socket/tcp.rb +58 -56
  392. data/lib/rex/socket/tcp_server.rb +42 -42
  393. data/lib/rex/socket/udp.rb +152 -152
  394. data/lib/rex/sslscan/result.rb +200 -0
  395. data/lib/rex/sslscan/scanner.rb +205 -0
  396. data/lib/rex/struct2.rb +0 -1
  397. data/lib/rex/struct2/c_struct.rb +162 -163
  398. data/lib/rex/struct2/c_struct_template.rb +21 -22
  399. data/lib/rex/struct2/constant.rb +6 -7
  400. data/lib/rex/struct2/element.rb +30 -31
  401. data/lib/rex/struct2/generic.rb +60 -61
  402. data/lib/rex/struct2/restraint.rb +40 -41
  403. data/lib/rex/struct2/s_string.rb +60 -61
  404. data/lib/rex/struct2/s_struct.rb +97 -98
  405. data/lib/rex/sync.rb +0 -1
  406. data/lib/rex/sync/event.rb +62 -72
  407. data/lib/rex/sync/read_write_lock.rb +149 -149
  408. data/lib/rex/sync/ref.rb +42 -42
  409. data/lib/rex/sync/thread_safe.rb +59 -59
  410. data/lib/rex/text.rb +1803 -1315
  411. data/lib/rex/thread_factory.rb +25 -25
  412. data/lib/rex/time.rb +44 -44
  413. data/lib/rex/transformer.rb +91 -91
  414. data/lib/rex/ui/interactive.rb +265 -265
  415. data/lib/rex/ui/output.rb +66 -60
  416. data/lib/rex/ui/progress_tracker.rb +79 -79
  417. data/lib/rex/ui/subscriber.rb +144 -134
  418. data/lib/rex/ui/text/color.rb +76 -76
  419. data/lib/rex/ui/text/dispatcher_shell.rb +512 -505
  420. data/lib/rex/ui/text/input.rb +96 -96
  421. data/lib/rex/ui/text/input/buffer.rb +58 -58
  422. data/lib/rex/ui/text/input/readline.rb +114 -114
  423. data/lib/rex/ui/text/input/socket.rb +77 -77
  424. data/lib/rex/ui/text/input/stdio.rb +24 -24
  425. data/lib/rex/ui/text/irb_shell.rb +45 -41
  426. data/lib/rex/ui/text/output.rb +64 -60
  427. data/lib/rex/ui/text/output/buffer.rb +42 -42
  428. data/lib/rex/ui/text/output/buffer/stdout.rb +25 -0
  429. data/lib/rex/ui/text/output/file.rb +24 -24
  430. data/lib/rex/ui/text/output/socket.rb +24 -24
  431. data/lib/rex/ui/text/output/stdio.rb +29 -29
  432. data/lib/rex/ui/text/output/tee.rb +36 -36
  433. data/lib/rex/ui/text/progress_tracker.rb +37 -37
  434. data/lib/rex/ui/text/shell.rb +371 -361
  435. data/lib/rex/ui/text/table.rb +320 -284
  436. data/lib/rex/zip.rb +0 -1
  437. data/lib/rex/zip/archive.rb +115 -94
  438. data/lib/rex/zip/blocks.rb +101 -100
  439. data/lib/rex/zip/entry.rb +108 -99
  440. data/lib/rex/zip/jar.rb +261 -206
  441. data/lib/rex/zip/samples/comment.rb +1 -2
  442. data/lib/rex/zip/samples/mkwar.rb +12 -13
  443. data/lib/rex/zip/samples/mkzip.rb +1 -2
  444. data/lib/rex/zip/samples/recursive.rb +29 -30
  445. metadata +424 -446
  446. data/lib/rex/arch/sparc.rb.ut.rb +0 -19
  447. data/lib/rex/arch/x86.rb.ut.rb +0 -94
  448. data/lib/rex/assembly/nasm.rb.ut.rb +0 -23
  449. data/lib/rex/encoder/ndr.rb.ut.rb +0 -45
  450. data/lib/rex/encoder/xdr.rb.ut.rb +0 -30
  451. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -13
  452. data/lib/rex/encoding/xor.rb.ts.rb +0 -15
  453. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -22
  454. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -16
  455. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -16
  456. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -121
  457. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -14
  458. data/lib/rex/exceptions.rb.ut.rb +0 -45
  459. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -28
  460. data/lib/rex/exploitation/javascriptosdetect.js +0 -1014
  461. data/lib/rex/exploitation/javascriptosdetect.rb +0 -43
  462. data/lib/rex/exploitation/omelet.rb.ut.rb +0 -27
  463. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -280
  464. data/lib/rex/exploitation/seh.rb.ut.rb +0 -20
  465. data/lib/rex/file.rb.ut.rb +0 -17
  466. data/lib/rex/io/ring_buffer.rb.ut.rb +0 -135
  467. data/lib/rex/nop/opty2.rb.ut.rb +0 -24
  468. data/lib/rex/parser/arguments.rb.ut.rb +0 -68
  469. data/lib/rex/parser/ini.rb.ut.rb +0 -30
  470. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +0 -18
  471. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +0 -39
  472. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +0 -37
  473. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb.ut.rb +0 -52
  474. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +0 -43
  475. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +0 -128
  476. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb.ut.rb +0 -64
  477. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb.ut.rb +0 -29
  478. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb.ut.rb +0 -155
  479. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb.ut.rb +0 -128
  480. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +0 -124
  481. data/lib/rex/proto.rb.ts.rb +0 -9
  482. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -10
  483. data/lib/rex/proto/dcerpc/client.rb.ut.rb +0 -492
  484. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -86
  485. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -42
  486. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -57
  487. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -16
  488. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -47
  489. data/lib/rex/proto/drda.rb.ts.rb +0 -18
  490. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -24
  491. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -110
  492. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -85
  493. data/lib/rex/proto/http.rb.ts.rb +0 -13
  494. data/lib/rex/proto/http/client.rb.ut.rb +0 -96
  495. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -22
  496. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -1
  497. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -25
  498. data/lib/rex/proto/http/header.rb.ut.rb +0 -47
  499. data/lib/rex/proto/http/packet.rb.ut.rb +0 -166
  500. data/lib/rex/proto/http/request.rb.ut.rb +0 -215
  501. data/lib/rex/proto/http/response.rb.ut.rb +0 -150
  502. data/lib/rex/proto/http/server.rb.ut.rb +0 -80
  503. data/lib/rex/proto/ntlm.rb.ut.rb +0 -181
  504. data/lib/rex/proto/rfb.rb.ut.rb +0 -40
  505. data/lib/rex/proto/smb.rb.ts.rb +0 -9
  506. data/lib/rex/proto/smb/client.rb.ut.rb +0 -224
  507. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -19
  508. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -129
  509. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -21
  510. data/lib/rex/proto/tftp/server.rb.ut.rb +0 -29
  511. data/lib/rex/service_manager.rb.ut.rb +0 -33
  512. data/lib/rex/socket.rb.ut.rb +0 -108
  513. data/lib/rex/socket/comm/local.rb.ut.rb +0 -76
  514. data/lib/rex/socket/parameters.rb.ut.rb +0 -52
  515. data/lib/rex/socket/range_walker.rb.ut.rb +0 -56
  516. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -40
  517. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -62
  518. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -29
  519. data/lib/rex/socket/switch_board.rb.ut.rb +0 -53
  520. data/lib/rex/socket/tcp.rb.ut.rb +0 -65
  521. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -45
  522. data/lib/rex/socket/udp.rb.ut.rb +0 -45
  523. data/lib/rex/test.rb +0 -36
  524. data/lib/rex/text.rb.ut.rb +0 -193
  525. data/lib/rex/transformer.rb.ut.rb +0 -39
  526. data/lib/rex/ui/text/color.rb.ut.rb +0 -19
  527. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -35
  528. data/lib/rex/ui/text/table.rb.ut.rb +0 -56
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  # -*- coding: binary -*-
3
2
 
4
3
  require 'tempfile'
@@ -15,89 +14,89 @@ module Assembly
15
14
  ###
16
15
  class Nasm
17
16
 
18
- @@nasm_path = 'nasm'
19
- @@ndisasm_path = 'ndisasm'
20
-
21
- #
22
- # Ensures that the nasm environment is sane.
23
- #
24
- def self.check
25
- @@nasm_path =
26
- Rex::FileUtils.find_full_path('nasm') ||
27
- Rex::FileUtils.find_full_path('nasm.exe') ||
28
- Rex::FileUtils.find_full_path('nasmw.exe') ||
29
- raise(RuntimeError, "No nasm installation was found.")
30
-
31
- @@ndisasm_path =
32
- Rex::FileUtils.find_full_path('ndisasm') ||
33
- Rex::FileUtils.find_full_path('ndisasm.exe') ||
34
- Rex::FileUtils.find_full_path('ndisasmw.exe') ||
35
- raise(RuntimeError, "No ndisasm installation was found.")
36
- end
37
-
38
- #
39
- # Assembles the supplied assembly and returns the raw opcodes.
40
- #
41
- def self.assemble(assembly, bits=32)
42
- check
43
-
44
- # Open the temporary file
45
- tmp = Tempfile.new('nasmXXXX')
46
- tmp.binmode
47
-
48
- tpath = tmp.path
49
- opath = tmp.path + '.out'
50
-
51
- # Write the assembly data to a file
52
- tmp.write("BITS #{bits}\n" + assembly)
53
- tmp.flush()
54
- tmp.seek(0)
55
-
56
- # Run nasm
57
- if (system(@@nasm_path, '-f', 'bin', '-o', opath, tpath) == false)
58
- raise RuntimeError, "Assembler did not complete successfully: #{$?.exitstatus}"
59
- end
60
-
61
- # Read the assembled text
62
- rv = ::IO.read(opath)
63
-
64
- # Remove temporary files
65
- File.unlink(opath)
66
- tmp.close(true)
67
-
68
- rv
69
- end
70
-
71
- #
72
- # Disassembles the supplied raw opcodes
73
- #
74
- def self.disassemble(raw, bits=32)
75
- check
76
-
77
- tmp = Tempfile.new('nasmout')
78
- tmp.binmode
79
-
80
- tfd = File.open(tmp.path, "wb")
81
-
82
- tfd.write(raw)
83
- tfd.flush()
84
- tfd.close
85
-
86
- p = ::IO.popen("\"#{@@ndisasm_path}\" -b #{bits} \"#{tmp.path}\"")
87
- o = ''
88
-
89
- begin
90
- until p.eof?
91
- o += p.read
92
- end
93
- ensure
94
- p.close
95
- end
96
-
97
- tmp.close(true)
98
-
99
- o
100
- end
17
+ @@nasm_path = 'nasm'
18
+ @@ndisasm_path = 'ndisasm'
19
+
20
+ #
21
+ # Ensures that the nasm environment is sane.
22
+ #
23
+ def self.check
24
+ @@nasm_path =
25
+ Rex::FileUtils.find_full_path('nasm') ||
26
+ Rex::FileUtils.find_full_path('nasm.exe') ||
27
+ Rex::FileUtils.find_full_path('nasmw.exe') ||
28
+ raise(RuntimeError, "No nasm installation was found.")
29
+
30
+ @@ndisasm_path =
31
+ Rex::FileUtils.find_full_path('ndisasm') ||
32
+ Rex::FileUtils.find_full_path('ndisasm.exe') ||
33
+ Rex::FileUtils.find_full_path('ndisasmw.exe') ||
34
+ raise(RuntimeError, "No ndisasm installation was found.")
35
+ end
36
+
37
+ #
38
+ # Assembles the supplied assembly and returns the raw opcodes.
39
+ #
40
+ def self.assemble(assembly, bits=32)
41
+ check
42
+
43
+ # Open the temporary file
44
+ tmp = Tempfile.new('nasmXXXX')
45
+ tmp.binmode
46
+
47
+ tpath = tmp.path
48
+ opath = tmp.path + '.out'
49
+
50
+ # Write the assembly data to a file
51
+ tmp.write("BITS #{bits}\n" + assembly)
52
+ tmp.flush()
53
+ tmp.seek(0)
54
+
55
+ # Run nasm
56
+ if (system(@@nasm_path, '-f', 'bin', '-o', opath, tpath) == false)
57
+ raise RuntimeError, "Assembler did not complete successfully: #{$?.exitstatus}"
58
+ end
59
+
60
+ # Read the assembled text
61
+ rv = ::IO.read(opath)
62
+
63
+ # Remove temporary files
64
+ File.unlink(opath)
65
+ tmp.close(true)
66
+
67
+ rv
68
+ end
69
+
70
+ #
71
+ # Disassembles the supplied raw opcodes
72
+ #
73
+ def self.disassemble(raw, bits=32)
74
+ check
75
+
76
+ tmp = Tempfile.new('nasmout')
77
+ tmp.binmode
78
+
79
+ tfd = File.open(tmp.path, "wb")
80
+
81
+ tfd.write(raw)
82
+ tfd.flush()
83
+ tfd.close
84
+
85
+ p = ::IO.popen("\"#{@@ndisasm_path}\" -b #{bits} \"#{tmp.path}\"")
86
+ o = ''
87
+
88
+ begin
89
+ until p.eof?
90
+ o += p.read
91
+ end
92
+ ensure
93
+ p.close
94
+ end
95
+
96
+ tmp.close(true)
97
+
98
+ o
99
+ end
101
100
 
102
101
  end
103
102
 
@@ -37,165 +37,220 @@ ENABLE_PROCESSED_INPUT = 1
37
37
 
38
38
 
39
39
  def self.is_windows
40
- return @@is_windows if @@is_windows
41
- @@is_windows = (RUBY_PLATFORM =~ /mswin(32|64)|mingw(32|64)/) ? true : false
40
+ return @@is_windows if @@is_windows
41
+ @@is_windows = (RUBY_PLATFORM =~ /mswin(32|64)|mingw(32|64)/) ? true : false
42
42
  end
43
43
 
44
44
  def self.is_cygwin
45
- return @@is_cygwin if @@is_cygwin
46
- @@is_cygwin = (RUBY_PLATFORM =~ /cygwin/) ? true : false
45
+ return @@is_cygwin if @@is_cygwin
46
+ @@is_cygwin = (RUBY_PLATFORM =~ /cygwin/) ? true : false
47
47
  end
48
48
 
49
49
  def self.is_macosx
50
- return @@is_macosx if @@is_macosx
51
- @@is_macosx = (RUBY_PLATFORM =~ /darwin/) ? true : false
50
+ return @@is_macosx if @@is_macosx
51
+ @@is_macosx = (RUBY_PLATFORM =~ /darwin/) ? true : false
52
52
  end
53
53
 
54
54
  def self.is_linux
55
- return @@is_linux if @@is_linux
56
- @@is_linux = (RUBY_PLATFORM =~ /linux/) ? true : false
55
+ return @@is_linux if @@is_linux
56
+ @@is_linux = (RUBY_PLATFORM =~ /linux/) ? true : false
57
57
  end
58
58
 
59
59
  def self.is_bsdi
60
- return @@is_bsdi if @@is_bsdi
61
- @@is_bsdi = (RUBY_PLATFORM =~ /bsdi/i) ? true : false
60
+ return @@is_bsdi if @@is_bsdi
61
+ @@is_bsdi = (RUBY_PLATFORM =~ /bsdi/i) ? true : false
62
62
  end
63
63
 
64
64
  def self.is_netbsd
65
- return @@is_netbsd if @@is_netbsd
66
- @@is_netbsd = (RUBY_PLATFORM =~ /netbsd/) ? true : false
65
+ return @@is_netbsd if @@is_netbsd
66
+ @@is_netbsd = (RUBY_PLATFORM =~ /netbsd/) ? true : false
67
67
  end
68
68
 
69
69
  def self.is_freebsd
70
- return @@is_freebsd if @@is_freebsd
71
- @@is_freebsd = (RUBY_PLATFORM =~ /freebsd/) ? true : false
70
+ return @@is_freebsd if @@is_freebsd
71
+ @@is_freebsd = (RUBY_PLATFORM =~ /freebsd/) ? true : false
72
72
  end
73
73
 
74
74
  def self.is_openbsd
75
- return @@is_openbsd if @@is_openbsd
76
- @@is_openbsd = (RUBY_PLATFORM =~ /openbsd/) ? true : false
75
+ return @@is_openbsd if @@is_openbsd
76
+ @@is_openbsd = (RUBY_PLATFORM =~ /openbsd/) ? true : false
77
77
  end
78
78
 
79
79
  def self.is_java
80
- return @@is_java if @@is_java
81
- @@is_java = (RUBY_PLATFORM =~ /java/) ? true : false
80
+ return @@is_java if @@is_java
81
+ @@is_java = (RUBY_PLATFORM =~ /java/) ? true : false
82
82
  end
83
83
 
84
84
  def self.is_wow64
85
- return false if not is_windows
86
- is64 = false
87
- begin
88
- buff = "\x00" * 4
89
- Win32API.new("kernel32","IsWow64Process",['L','P'],'L').call(-1, buff)
90
- is64 = (buff.unpack("V")[0]) == 1 ? true : false
91
- rescue ::Exception
92
- end
93
- is64
85
+ return false if not is_windows
86
+ is64 = false
87
+ begin
88
+ buff = "\x00" * 4
89
+ Win32API.new("kernel32","IsWow64Process",['L','P'],'L').call(-1, buff)
90
+ is64 = (buff.unpack("V")[0]) == 1 ? true : false
91
+ rescue ::Exception
92
+ end
93
+ is64
94
94
  end
95
95
 
96
96
  def self.cygwin_to_win32(path)
97
- if(path !~ /^\/cygdrive/)
98
- return ::IO.popen("cygpath -w #{path}", "rb").read.strip
99
- end
100
- dir = path.split("/")
101
- dir.shift
102
- dir.shift
103
- dir[0] = dir[0] + ":"
104
- dir.join("\\")
97
+ if(path !~ /^\/cygdrive/)
98
+ return ::IO.popen("cygpath -w #{path}", "rb").read.strip
99
+ end
100
+ dir = path.split("/")
101
+ dir.shift
102
+ dir.shift
103
+ dir[0] = dir[0] + ":"
104
+ dir.join("\\")
105
105
  end
106
106
 
107
107
  def self.open_file(url='')
108
- case RUBY_PLATFORM
109
- when /cygwin/
110
- path = self.cygwin_to_win32(url)
111
- system(["cmd", "cmd"], "/c", "explorer", path)
112
- else
113
- self.open_browser(url)
114
- end
108
+ case RUBY_PLATFORM
109
+ when /cygwin/
110
+ path = self.cygwin_to_win32(url)
111
+ system(["cmd", "cmd"], "/c", "explorer", path)
112
+ else
113
+ self.open_browser(url)
114
+ end
115
115
  end
116
116
 
117
- def self.open_browser(url='http://metasploit.com/')
118
- case RUBY_PLATFORM
119
- when /cygwin/
120
- if(url[0,1] == "/")
121
- self.open_file(url)
122
- end
123
- return if not @@loaded_win32api
124
- Win32API.new("shell32.dll", "ShellExecute", ["PPPPPL"], "L").call(nil, "open", url, nil, nil, 0)
125
- when /mswin32|mingw/
126
- return if not @@loaded_win32api
127
- Win32API.new("shell32.dll", "ShellExecute", ["PPPPPL"], "L").call(nil, "open", url, nil, nil, 0)
128
- when /darwin/
129
- system("open #{url}")
130
- else
131
- # Search through the PATH variable (if it exists) and chose a browser
132
- # We are making an assumption about the nature of "PATH" so tread lightly
133
- if defined? ENV['PATH']
134
- # "sensible-browser" opens the "default" browser in Ubuntu and others, so try that first
135
- # but also provide fallbacks
136
- ['sensible-browser', 'firefox', 'opera', 'chromium-browser', 'konqueror'].each do |browser|
137
- ENV['PATH'].split(':').each do |path|
138
- # Does the browser exists?
139
- if File.exists?("#{path}/#{browser}")
140
- system("#{browser} #{url} &")
141
- return
142
- end
143
- end
144
- end
145
- end
146
-
147
- # If nothing else worked, default to firefox
148
- system("firefox #{url} &")
149
- end
117
+ def self.open_browser(url='http://google.com/')
118
+ case RUBY_PLATFORM
119
+ when /cygwin/
120
+ if(url[0,1] == "/")
121
+ self.open_file(url)
122
+ end
123
+ return if not @@loaded_win32api
124
+ Win32API.new("shell32.dll", "ShellExecute", ["PPPPPL"], "L").call(nil, "open", url, nil, nil, 0)
125
+ when /mswin32|mingw/
126
+ return if not @@loaded_win32api
127
+ Win32API.new("shell32.dll", "ShellExecute", ["PPPPPL"], "L").call(nil, "open", url, nil, nil, 0)
128
+ when /darwin/
129
+ system("open #{url}")
130
+ else
131
+ # Search through the PATH variable (if it exists) and chose a browser
132
+ # We are making an assumption about the nature of "PATH" so tread lightly
133
+ if defined? ENV['PATH']
134
+ # "xdg-open" is more general than "sensible-browser" and can be useful for lots of
135
+ # file types -- text files, pcaps, or URLs. It's nearly always
136
+ # going to use the application the user is expecting. If we're not
137
+ # on something Debian-based, fall back to likely browsers.
138
+ ['xdg-open', 'sensible-browser', 'firefox', 'firefox-bin', 'opera', 'konqueror', 'chromium-browser'].each do |browser|
139
+ ENV['PATH'].split(':').each do |path|
140
+ # Does the browser exists?
141
+ if File.exists?("#{path}/#{browser}")
142
+ system("#{browser} #{url} &")
143
+ return
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
150
+
151
+ def self.open_webrtc_browser(url='http://google.com/')
152
+ found_browser = false
153
+
154
+ case RUBY_PLATFORM
155
+ when /mswin2|mingw|cygwin/
156
+ paths = [
157
+ "Google\\Chrome\\Application\\chrome.exe",
158
+ "Mozilla Firefox\\firefox.exe",
159
+ "Opera\\launcher.exe"
160
+ ]
161
+
162
+ prog_files = ENV['ProgramFiles']
163
+ paths = paths.map { |p| "#{prog_files}\\#{p}" }
164
+
165
+ # Old chrome path
166
+ app_data = ENV['APPDATA']
167
+ paths << "#{app_data}\\Google\\Chrome\\Application\\chrome.exe"
168
+
169
+ paths.each do |p|
170
+ if File.exists?(p)
171
+ args = (p =~ /chrome\.exe/) ? "--allow-file-access-from-files" : ""
172
+ system("#{path} #{args} #{url}")
173
+ found_browser = true
174
+ break
175
+ end
176
+ end
177
+
178
+ when /darwin/
179
+ ['Google Chrome.app', 'Firefox.app'].each do |browser|
180
+ browser_path = "/Applications/#{browser}"
181
+ if File.directory?(browser_path)
182
+ args = (browser_path =~ /Chrome/) ? "--args --allow-file-access-from-files" : ""
183
+
184
+ system("open #{url} -a \"#{browser_path}\" #{args} &")
185
+ found_browser = true
186
+ break
187
+ end
188
+ end
189
+ else
190
+ if defined? ENV['PATH']
191
+ ['chrome', 'chromium', 'firefox', 'opera'].each do |browser|
192
+ ENV['PATH'].split(':').each do |path|
193
+ browser_path = "#{path}/#{browser}"
194
+ if File.exists?(browser_path)
195
+ args = (browser_path =~ /Chrome/) ? "--allow-file-access-from-files" : ""
196
+ system("#{browser_path} #{args} #{url} &")
197
+ found_browser = true
198
+ end
199
+ end
200
+ end
201
+ end
202
+ end
203
+
204
+ found_browser
150
205
  end
151
206
 
152
207
  def self.open_email(addr)
153
- case RUBY_PLATFORM
154
- when /mswin32|cygwin/
155
- return if not @@loaded_win32api
156
- Win32API.new("shell32.dll", "ShellExecute", ["PPPPPL"], "L").call(nil, "open", "mailto:"+addr, nil, nil, 0)
157
- when /darwin/
158
- system("open mailto:#{addr}")
159
- else
160
- # ?
161
- end
208
+ case RUBY_PLATFORM
209
+ when /mswin32|cygwin/
210
+ return if not @@loaded_win32api
211
+ Win32API.new("shell32.dll", "ShellExecute", ["PPPPPL"], "L").call(nil, "open", "mailto:"+addr, nil, nil, 0)
212
+ when /darwin/
213
+ system("open mailto:#{addr}")
214
+ else
215
+ # ?
216
+ end
162
217
  end
163
218
 
164
219
  def self.play_sound(path)
165
- case RUBY_PLATFORM
166
- when /cygwin/
167
- path = self.cygwin_to_win32(path)
168
- return if not @@loaded_win32api
169
- Win32API.new("winmm.dll", "sndPlaySoundA", ["SI"], "I").call(path, 0x20000)
170
- when /mswin32/
171
- return if not @@loaded_win32api
172
- Win32API.new("winmm.dll", "sndPlaySoundA", ["SI"], "I").call(path, 0x20000)
173
- when /darwin/
174
- system("afplay #{path} >/dev/null 2>&1")
175
- else
176
- system("aplay #{path} >/dev/null 2>&1")
177
- end
220
+ case RUBY_PLATFORM
221
+ when /cygwin/
222
+ path = self.cygwin_to_win32(path)
223
+ return if not @@loaded_win32api
224
+ Win32API.new("winmm.dll", "sndPlaySoundA", ["SI"], "I").call(path, 0x20000)
225
+ when /mswin32/
226
+ return if not @@loaded_win32api
227
+ Win32API.new("winmm.dll", "sndPlaySoundA", ["SI"], "I").call(path, 0x20000)
228
+ when /darwin/
229
+ system("afplay #{path} >/dev/null 2>&1")
230
+ else
231
+ system("aplay #{path} >/dev/null 2>&1")
232
+ end
178
233
  end
179
234
 
180
235
  def self.getenv(var)
181
- if (is_windows and @@loaded_win32api)
182
- f = Win32API.new("kernel32", "GetEnvironmentVariable", ["P", "P", "I"], "I")
183
- buff = "\x00" * 16384
184
- sz = f.call(var, buff, buff.length)
185
- return nil if sz == 0
186
- buff[0,sz]
187
- else
188
- ENV[var]
189
- end
236
+ if (is_windows and @@loaded_win32api)
237
+ f = Win32API.new("kernel32", "GetEnvironmentVariable", ["P", "P", "I"], "I")
238
+ buff = "\x00" * 16384
239
+ sz = f.call(var, buff, buff.length)
240
+ return nil if sz == 0
241
+ buff[0,sz]
242
+ else
243
+ ENV[var]
244
+ end
190
245
  end
191
246
 
192
247
  def self.setenv(var,val)
193
- if (is_windows and @@loaded_win32api)
194
- f = Win32API.new("kernel32", "SetEnvironmentVariable", ["P", "P"], "I")
195
- f.call(var, val + "\x00")
196
- else
197
- ENV[var]= val
198
- end
248
+ if (is_windows and @@loaded_win32api)
249
+ f = Win32API.new("kernel32", "SetEnvironmentVariable", ["P", "P"], "I")
250
+ f.call(var, val + "\x00")
251
+ else
252
+ ENV[var]= val
253
+ end
199
254
  end
200
255
 
201
256
 
@@ -203,44 +258,44 @@ end
203
258
  # Obtain the path to our interpreter
204
259
  #
205
260
  def self.win32_ruby_path
206
- return nil if ! (is_windows and @@loaded_win32api)
207
- gmh = Win32API.new("kernel32", "GetModuleHandle", ["P"], "L")
208
- gmf = Win32API.new("kernel32", "GetModuleFileName", ["LPL"], "L")
209
- mod = gmh.call(nil)
210
- inf = "\x00" * 1024
211
- gmf.call(mod, inf, 1024)
212
- inf.unpack("Z*")[0]
261
+ return nil if ! (is_windows and @@loaded_win32api)
262
+ gmh = Win32API.new("kernel32", "GetModuleHandle", ["P"], "L")
263
+ gmf = Win32API.new("kernel32", "GetModuleFileName", ["LPL"], "L")
264
+ mod = gmh.call(nil)
265
+ inf = "\x00" * 1024
266
+ gmf.call(mod, inf, 1024)
267
+ inf.unpack("Z*")[0]
213
268
  end
214
269
 
215
270
  #
216
271
  # Call WinExec (equiv to system("cmd &"))
217
272
  #
218
273
  def self.win32_winexec(cmd)
219
- return nil if ! (is_windows and @@loaded_win32api)
220
- exe = Win32API.new("kernel32", "WinExec", ["PL"], "L")
221
- exe.call(cmd, 0)
274
+ return nil if ! (is_windows and @@loaded_win32api)
275
+ exe = Win32API.new("kernel32", "WinExec", ["PL"], "L")
276
+ exe.call(cmd, 0)
222
277
  end
223
278
 
224
279
  #
225
280
  # Verify the Console2 environment
226
281
  #
227
282
  def self.win32_console2_verify
228
- return nil if ! (is_windows and @@loaded_win32api)
229
- buf = "\x00" * 512
230
- out = Win32API.new("kernel32", "GetStdHandle", ["L"], "L").call(STD_OUTPUT_HANDLE)
231
- res = Win32API.new("kernel32","GetConsoleTitle", ["PL"], "L").call(buf, buf.length-1) rescue 0
232
- ( res > 0 and buf.index("Console2 command").nil? ) ? false : true
283
+ return nil if ! (is_windows and @@loaded_win32api)
284
+ buf = "\x00" * 512
285
+ out = Win32API.new("kernel32", "GetStdHandle", ["L"], "L").call(STD_OUTPUT_HANDLE)
286
+ res = Win32API.new("kernel32","GetConsoleTitle", ["PL"], "L").call(buf, buf.length-1) rescue 0
287
+ ( res > 0 and buf.index("Console2 command").nil? ) ? false : true
233
288
  end
234
289
 
235
290
  #
236
291
  # Expand a 8.3 path to a full path
237
292
  #
238
293
  def self.win32_expand_path(path)
239
- return nil if ! (is_windows and @@loaded_win32api)
240
- glp = Win32API.new('kernel32', 'GetLongPathName', 'PPL', 'L')
241
- buf = "\x00" * 260
242
- len = glp.call(path, buf, buf.length)
243
- buf[0, len]
294
+ return nil if ! (is_windows and @@loaded_win32api)
295
+ glp = Win32API.new('kernel32', 'GetLongPathName', 'PPL', 'L')
296
+ buf = "\x00" * 260
297
+ len = glp.call(path, buf, buf.length)
298
+ buf[0, len]
244
299
  end
245
300
 
246
301
  #
@@ -248,31 +303,31 @@ end
248
303
  #
249
304
  def self.pipe
250
305
 
251
- if (! is_windows())
252
- # Standard pipes should be fine
253
- return ::IO.pipe
254
- end
306
+ if (! is_windows())
307
+ # Standard pipes should be fine
308
+ return ::IO.pipe
309
+ end
255
310
 
256
- # Create a socket connection for Windows
257
- serv = nil
258
- port = 1024
311
+ # Create a socket connection for Windows
312
+ serv = nil
313
+ port = 1024
259
314
 
260
- while (! serv and port < 65535)
261
- begin
262
- serv = TCPServer.new('127.0.0.1', (port += 1))
263
- rescue ::Exception
264
- end
265
- end
315
+ while (! serv and port < 65535)
316
+ begin
317
+ serv = TCPServer.new('127.0.0.1', (port += 1))
318
+ rescue ::Exception
319
+ end
320
+ end
266
321
 
267
- pipe1 = TCPSocket.new('127.0.0.1', port)
322
+ pipe1 = TCPSocket.new('127.0.0.1', port)
268
323
 
269
- # Accept the forked child
270
- pipe2 = serv.accept
324
+ # Accept the forked child
325
+ pipe2 = serv.accept
271
326
 
272
- # Shutdown the server
273
- serv.close
327
+ # Shutdown the server
328
+ serv.close
274
329
 
275
- return [pipe1, pipe2]
330
+ return [pipe1, pipe2]
276
331
  end
277
332
 
278
333
  #
@@ -280,14 +335,14 @@ end
280
335
  #
281
336
 
282
337
  def self.temp_copy(path)
283
- raise RuntimeError,"missing Tempfile" if not @@loaded_tempfile
284
- fd = File.open(path, "rb")
285
- tp = Tempfile.new("msftemp")
286
- tp.binmode
287
- tp.write(fd.read(File.size(path)))
288
- tp.close
289
- fd.close
290
- tp
338
+ raise RuntimeError,"missing Tempfile" if not @@loaded_tempfile
339
+ fd = File.open(path, "rb")
340
+ tp = Tempfile.new("msftemp")
341
+ tp.binmode
342
+ tp.write(fd.read(File.size(path)))
343
+ tp.close
344
+ fd.close
345
+ tp
291
346
  end
292
347
 
293
348
  #
@@ -295,11 +350,11 @@ end
295
350
  #
296
351
 
297
352
  def self.temp_delete(tp)
298
- raise RuntimeError,"missing FileUtils" if not @@loaded_fileutils
299
- begin
300
- FileUtils.rm(tp.path)
301
- rescue
302
- end
353
+ raise RuntimeError,"missing FileUtils" if not @@loaded_fileutils
354
+ begin
355
+ FileUtils.rm(tp.path)
356
+ rescue
357
+ end
303
358
  end
304
359
 
305
360
 
@@ -308,22 +363,22 @@ end
308
363
  #
309
364
 
310
365
  if(is_windows or is_cygwin)
311
- begin
312
- require "Win32API"
313
- @@loaded_win32api = true
314
- rescue ::Exception
315
- end
366
+ begin
367
+ require "Win32API"
368
+ @@loaded_win32api = true
369
+ rescue ::Exception
370
+ end
316
371
  end
317
372
 
318
373
  begin
319
- require "tempfile"
320
- @@loaded_tempfile = true
374
+ require "tempfile"
375
+ @@loaded_tempfile = true
321
376
  rescue ::Exception
322
377
  end
323
378
 
324
379
  begin
325
- require "fileutils"
326
- @@loaded_fileutils = true
380
+ require "fileutils"
381
+ @@loaded_fileutils = true
327
382
  rescue ::Exception
328
383
  end
329
384