librex 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. data/README +4 -0
  2. data/lib/rex.rb +101 -0
  3. data/lib/rex.rb.ts.rb +70 -0
  4. data/lib/rex/LICENSE +29 -0
  5. data/lib/rex/arch.rb +103 -0
  6. data/lib/rex/arch/sparc.rb +75 -0
  7. data/lib/rex/arch/sparc.rb.ut.rb +18 -0
  8. data/lib/rex/arch/x86.rb +513 -0
  9. data/lib/rex/arch/x86.rb.ut.rb +93 -0
  10. data/lib/rex/assembly/nasm.rb +100 -0
  11. data/lib/rex/assembly/nasm.rb.ut.rb +22 -0
  12. data/lib/rex/codepage.map +104 -0
  13. data/lib/rex/compat.rb +281 -0
  14. data/lib/rex/constants.rb +113 -0
  15. data/lib/rex/elfparsey.rb +11 -0
  16. data/lib/rex/elfparsey/elf.rb +123 -0
  17. data/lib/rex/elfparsey/elfbase.rb +260 -0
  18. data/lib/rex/elfparsey/exceptions.rb +27 -0
  19. data/lib/rex/elfscan.rb +12 -0
  20. data/lib/rex/elfscan/scanner.rb +207 -0
  21. data/lib/rex/elfscan/search.rb +46 -0
  22. data/lib/rex/encoder/alpha2.rb +31 -0
  23. data/lib/rex/encoder/alpha2/alpha_mixed.rb +68 -0
  24. data/lib/rex/encoder/alpha2/alpha_upper.rb +79 -0
  25. data/lib/rex/encoder/alpha2/generic.rb +113 -0
  26. data/lib/rex/encoder/alpha2/unicode_mixed.rb +117 -0
  27. data/lib/rex/encoder/alpha2/unicode_upper.rb +129 -0
  28. data/lib/rex/encoder/ndr.rb +89 -0
  29. data/lib/rex/encoder/ndr.rb.ut.rb +44 -0
  30. data/lib/rex/encoder/nonalpha.rb +61 -0
  31. data/lib/rex/encoder/nonupper.rb +64 -0
  32. data/lib/rex/encoder/xdr.rb +106 -0
  33. data/lib/rex/encoder/xdr.rb.ut.rb +29 -0
  34. data/lib/rex/encoder/xor.rb +69 -0
  35. data/lib/rex/encoder/xor/dword.rb +13 -0
  36. data/lib/rex/encoder/xor/dword_additive.rb +13 -0
  37. data/lib/rex/encoders/xor_dword.rb +35 -0
  38. data/lib/rex/encoders/xor_dword_additive.rb +53 -0
  39. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +12 -0
  40. data/lib/rex/encoding/xor.rb +20 -0
  41. data/lib/rex/encoding/xor.rb.ts.rb +14 -0
  42. data/lib/rex/encoding/xor/byte.rb +15 -0
  43. data/lib/rex/encoding/xor/byte.rb.ut.rb +21 -0
  44. data/lib/rex/encoding/xor/dword.rb +21 -0
  45. data/lib/rex/encoding/xor/dword.rb.ut.rb +15 -0
  46. data/lib/rex/encoding/xor/dword_additive.rb +92 -0
  47. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +15 -0
  48. data/lib/rex/encoding/xor/exceptions.rb +17 -0
  49. data/lib/rex/encoding/xor/generic.rb +146 -0
  50. data/lib/rex/encoding/xor/generic.rb.ut.rb +120 -0
  51. data/lib/rex/encoding/xor/qword.rb +15 -0
  52. data/lib/rex/encoding/xor/word.rb +21 -0
  53. data/lib/rex/encoding/xor/word.rb.ut.rb +13 -0
  54. data/lib/rex/exceptions.rb +275 -0
  55. data/lib/rex/exceptions.rb.ut.rb +44 -0
  56. data/lib/rex/exploitation/cmdstager.rb +133 -0
  57. data/lib/rex/exploitation/egghunter.rb +143 -0
  58. data/lib/rex/exploitation/egghunter.rb.ut.rb +25 -0
  59. data/lib/rex/exploitation/encryptjs.rb +77 -0
  60. data/lib/rex/exploitation/heaplib.js.b64 +331 -0
  61. data/lib/rex/exploitation/heaplib.rb +94 -0
  62. data/lib/rex/exploitation/javascriptosdetect.rb +735 -0
  63. data/lib/rex/exploitation/obfuscatejs.rb +335 -0
  64. data/lib/rex/exploitation/opcodedb.rb +818 -0
  65. data/lib/rex/exploitation/opcodedb.rb.ut.rb +279 -0
  66. data/lib/rex/exploitation/seh.rb +92 -0
  67. data/lib/rex/exploitation/seh.rb.ut.rb +19 -0
  68. data/lib/rex/file.rb +84 -0
  69. data/lib/rex/file.rb.ut.rb +16 -0
  70. data/lib/rex/image_source.rb +12 -0
  71. data/lib/rex/image_source/disk.rb +60 -0
  72. data/lib/rex/image_source/image_source.rb +46 -0
  73. data/lib/rex/image_source/memory.rb +37 -0
  74. data/lib/rex/io/bidirectional_pipe.rb +157 -0
  75. data/lib/rex/io/datagram_abstraction.rb +35 -0
  76. data/lib/rex/io/stream.rb +313 -0
  77. data/lib/rex/io/stream_abstraction.rb +186 -0
  78. data/lib/rex/io/stream_server.rb +211 -0
  79. data/lib/rex/job_container.rb +202 -0
  80. data/lib/rex/logging.rb +4 -0
  81. data/lib/rex/logging/log_dispatcher.rb +179 -0
  82. data/lib/rex/logging/log_sink.rb +42 -0
  83. data/lib/rex/logging/sinks/flatfile.rb +55 -0
  84. data/lib/rex/logging/sinks/stderr.rb +43 -0
  85. data/lib/rex/machparsey.rb +9 -0
  86. data/lib/rex/machparsey/exceptions.rb +34 -0
  87. data/lib/rex/machparsey/mach.rb +209 -0
  88. data/lib/rex/machparsey/machbase.rb +408 -0
  89. data/lib/rex/machscan.rb +9 -0
  90. data/lib/rex/machscan/scanner.rb +217 -0
  91. data/lib/rex/mime.rb +9 -0
  92. data/lib/rex/mime/header.rb +75 -0
  93. data/lib/rex/mime/message.rb +112 -0
  94. data/lib/rex/mime/part.rb +20 -0
  95. data/lib/rex/nop/opty2.rb +108 -0
  96. data/lib/rex/nop/opty2.rb.ut.rb +23 -0
  97. data/lib/rex/nop/opty2_tables.rb +300 -0
  98. data/lib/rex/ole.rb +128 -0
  99. data/lib/rex/ole/clsid.rb +47 -0
  100. data/lib/rex/ole/difat.rb +141 -0
  101. data/lib/rex/ole/directory.rb +230 -0
  102. data/lib/rex/ole/direntry.rb +240 -0
  103. data/lib/rex/ole/fat.rb +99 -0
  104. data/lib/rex/ole/header.rb +204 -0
  105. data/lib/rex/ole/minifat.rb +77 -0
  106. data/lib/rex/ole/samples/create_ole.rb +27 -0
  107. data/lib/rex/ole/samples/dir.rb +35 -0
  108. data/lib/rex/ole/samples/dump_stream.rb +34 -0
  109. data/lib/rex/ole/samples/ole_info.rb +23 -0
  110. data/lib/rex/ole/storage.rb +395 -0
  111. data/lib/rex/ole/stream.rb +53 -0
  112. data/lib/rex/ole/substorage.rb +49 -0
  113. data/lib/rex/ole/util.rb +157 -0
  114. data/lib/rex/parser/arguments.rb +97 -0
  115. data/lib/rex/parser/arguments.rb.ut.rb +67 -0
  116. data/lib/rex/parser/ini.rb +185 -0
  117. data/lib/rex/parser/ini.rb.ut.rb +29 -0
  118. data/lib/rex/parser/nmap_xml.rb +111 -0
  119. data/lib/rex/payloads.rb +1 -0
  120. data/lib/rex/payloads/win32.rb +2 -0
  121. data/lib/rex/payloads/win32/common.rb +26 -0
  122. data/lib/rex/payloads/win32/kernel.rb +53 -0
  123. data/lib/rex/payloads/win32/kernel/common.rb +54 -0
  124. data/lib/rex/payloads/win32/kernel/migration.rb +12 -0
  125. data/lib/rex/payloads/win32/kernel/recovery.rb +50 -0
  126. data/lib/rex/payloads/win32/kernel/stager.rb +171 -0
  127. data/lib/rex/peparsey.rb +12 -0
  128. data/lib/rex/peparsey/exceptions.rb +32 -0
  129. data/lib/rex/peparsey/pe.rb +188 -0
  130. data/lib/rex/peparsey/pe_memdump.rb +63 -0
  131. data/lib/rex/peparsey/pebase.rb +1655 -0
  132. data/lib/rex/peparsey/section.rb +136 -0
  133. data/lib/rex/pescan.rb +13 -0
  134. data/lib/rex/pescan/analyze.rb +309 -0
  135. data/lib/rex/pescan/scanner.rb +206 -0
  136. data/lib/rex/pescan/search.rb +56 -0
  137. data/lib/rex/platforms.rb +1 -0
  138. data/lib/rex/platforms/windows.rb +51 -0
  139. data/lib/rex/poly.rb +132 -0
  140. data/lib/rex/poly/block.rb +468 -0
  141. data/lib/rex/poly/register.rb +100 -0
  142. data/lib/rex/poly/register/x86.rb +40 -0
  143. data/lib/rex/post.rb +8 -0
  144. data/lib/rex/post/dir.rb +51 -0
  145. data/lib/rex/post/file.rb +172 -0
  146. data/lib/rex/post/file_stat.rb +220 -0
  147. data/lib/rex/post/gen.pl +13 -0
  148. data/lib/rex/post/io.rb +182 -0
  149. data/lib/rex/post/meterpreter.rb +4 -0
  150. data/lib/rex/post/meterpreter/channel.rb +438 -0
  151. data/lib/rex/post/meterpreter/channel_container.rb +54 -0
  152. data/lib/rex/post/meterpreter/channels/pool.rb +160 -0
  153. data/lib/rex/post/meterpreter/channels/pools/file.rb +62 -0
  154. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +103 -0
  155. data/lib/rex/post/meterpreter/channels/stream.rb +87 -0
  156. data/lib/rex/post/meterpreter/client.rb +335 -0
  157. data/lib/rex/post/meterpreter/client_core.rb +274 -0
  158. data/lib/rex/post/meterpreter/dependencies.rb +3 -0
  159. data/lib/rex/post/meterpreter/extension.rb +32 -0
  160. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +58 -0
  161. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +16 -0
  162. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +94 -0
  163. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +21 -0
  164. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +118 -0
  165. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +61 -0
  166. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +104 -0
  167. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +28 -0
  168. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +100 -0
  169. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +24 -0
  170. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +333 -0
  171. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +273 -0
  172. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +235 -0
  173. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +103 -0
  174. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +48 -0
  175. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +144 -0
  176. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +73 -0
  177. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +56 -0
  178. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +137 -0
  179. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +167 -0
  180. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +167 -0
  181. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +192 -0
  182. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +139 -0
  183. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +97 -0
  184. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +184 -0
  185. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +41 -0
  186. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +61 -0
  187. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +361 -0
  188. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +129 -0
  189. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +55 -0
  190. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +336 -0
  191. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +141 -0
  192. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +279 -0
  193. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +182 -0
  194. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +102 -0
  195. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +174 -0
  196. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +185 -0
  197. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +227 -0
  198. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +30 -0
  199. data/lib/rex/post/meterpreter/object_aliases.rb +83 -0
  200. data/lib/rex/post/meterpreter/packet.rb +596 -0
  201. data/lib/rex/post/meterpreter/packet_dispatcher.rb +409 -0
  202. data/lib/rex/post/meterpreter/packet_parser.rb +94 -0
  203. data/lib/rex/post/meterpreter/packet_response_waiter.rb +83 -0
  204. data/lib/rex/post/meterpreter/ui/console.rb +135 -0
  205. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +62 -0
  206. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +595 -0
  207. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +108 -0
  208. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +241 -0
  209. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +61 -0
  210. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +98 -0
  211. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +51 -0
  212. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +132 -0
  213. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +187 -0
  214. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +63 -0
  215. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +376 -0
  216. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +270 -0
  217. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +484 -0
  218. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +315 -0
  219. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +95 -0
  220. data/lib/rex/post/permission.rb +26 -0
  221. data/lib/rex/post/process.rb +57 -0
  222. data/lib/rex/post/thread.rb +57 -0
  223. data/lib/rex/post/ui.rb +52 -0
  224. data/lib/rex/proto.rb +12 -0
  225. data/lib/rex/proto.rb.ts.rb +8 -0
  226. data/lib/rex/proto/dcerpc.rb +6 -0
  227. data/lib/rex/proto/dcerpc.rb.ts.rb +9 -0
  228. data/lib/rex/proto/dcerpc/client.rb +358 -0
  229. data/lib/rex/proto/dcerpc/client.rb.ut.rb +491 -0
  230. data/lib/rex/proto/dcerpc/exceptions.rb +150 -0
  231. data/lib/rex/proto/dcerpc/handle.rb +47 -0
  232. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +85 -0
  233. data/lib/rex/proto/dcerpc/ndr.rb +72 -0
  234. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +41 -0
  235. data/lib/rex/proto/dcerpc/packet.rb +253 -0
  236. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +56 -0
  237. data/lib/rex/proto/dcerpc/response.rb +186 -0
  238. data/lib/rex/proto/dcerpc/response.rb.ut.rb +15 -0
  239. data/lib/rex/proto/dcerpc/uuid.rb +84 -0
  240. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +46 -0
  241. data/lib/rex/proto/drda.rb +5 -0
  242. data/lib/rex/proto/drda.rb.ts.rb +17 -0
  243. data/lib/rex/proto/drda/constants.rb +49 -0
  244. data/lib/rex/proto/drda/constants.rb.ut.rb +23 -0
  245. data/lib/rex/proto/drda/packet.rb +252 -0
  246. data/lib/rex/proto/drda/packet.rb.ut.rb +109 -0
  247. data/lib/rex/proto/drda/utils.rb +123 -0
  248. data/lib/rex/proto/drda/utils.rb.ut.rb +84 -0
  249. data/lib/rex/proto/http.rb +5 -0
  250. data/lib/rex/proto/http.rb.ts.rb +12 -0
  251. data/lib/rex/proto/http/client.rb +817 -0
  252. data/lib/rex/proto/http/client.rb.ut.rb +93 -0
  253. data/lib/rex/proto/http/handler.rb +46 -0
  254. data/lib/rex/proto/http/handler/erb.rb +128 -0
  255. data/lib/rex/proto/http/handler/erb.rb.ut.rb +21 -0
  256. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +1 -0
  257. data/lib/rex/proto/http/handler/proc.rb +54 -0
  258. data/lib/rex/proto/http/handler/proc.rb.ut.rb +24 -0
  259. data/lib/rex/proto/http/header.rb +161 -0
  260. data/lib/rex/proto/http/header.rb.ut.rb +46 -0
  261. data/lib/rex/proto/http/packet.rb +394 -0
  262. data/lib/rex/proto/http/packet.rb.ut.rb +165 -0
  263. data/lib/rex/proto/http/request.rb +356 -0
  264. data/lib/rex/proto/http/request.rb.ut.rb +214 -0
  265. data/lib/rex/proto/http/response.rb +85 -0
  266. data/lib/rex/proto/http/response.rb.ut.rb +149 -0
  267. data/lib/rex/proto/http/server.rb +367 -0
  268. data/lib/rex/proto/http/server.rb.ut.rb +79 -0
  269. data/lib/rex/proto/smb.rb +7 -0
  270. data/lib/rex/proto/smb.rb.ts.rb +8 -0
  271. data/lib/rex/proto/smb/client.rb +1733 -0
  272. data/lib/rex/proto/smb/client.rb.ut.rb +223 -0
  273. data/lib/rex/proto/smb/constants.rb +1062 -0
  274. data/lib/rex/proto/smb/constants.rb.ut.rb +18 -0
  275. data/lib/rex/proto/smb/crypt.rb +95 -0
  276. data/lib/rex/proto/smb/crypt.rb.ut.rb +20 -0
  277. data/lib/rex/proto/smb/evasions.rb +65 -0
  278. data/lib/rex/proto/smb/exceptions.rb +846 -0
  279. data/lib/rex/proto/smb/simpleclient.rb +292 -0
  280. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +128 -0
  281. data/lib/rex/proto/smb/utils.rb +514 -0
  282. data/lib/rex/proto/smb/utils.rb.ut.rb +20 -0
  283. data/lib/rex/proto/sunrpc.rb +1 -0
  284. data/lib/rex/proto/sunrpc/client.rb +195 -0
  285. data/lib/rex/script.rb +42 -0
  286. data/lib/rex/script/base.rb +59 -0
  287. data/lib/rex/script/meterpreter.rb +9 -0
  288. data/lib/rex/script/shell.rb +9 -0
  289. data/lib/rex/service.rb +48 -0
  290. data/lib/rex/service_manager.rb +141 -0
  291. data/lib/rex/service_manager.rb.ut.rb +32 -0
  292. data/lib/rex/services/local_relay.rb +423 -0
  293. data/lib/rex/socket.rb +586 -0
  294. data/lib/rex/socket.rb.ut.rb +86 -0
  295. data/lib/rex/socket/comm.rb +119 -0
  296. data/lib/rex/socket/comm/local.rb +409 -0
  297. data/lib/rex/socket/comm/local.rb.ut.rb +75 -0
  298. data/lib/rex/socket/ip.rb +129 -0
  299. data/lib/rex/socket/parameters.rb +345 -0
  300. data/lib/rex/socket/parameters.rb.ut.rb +51 -0
  301. data/lib/rex/socket/range_walker.rb +295 -0
  302. data/lib/rex/socket/range_walker.rb.ut.rb +55 -0
  303. data/lib/rex/socket/ssl_tcp.rb +184 -0
  304. data/lib/rex/socket/ssl_tcp.rb.ut.rb +39 -0
  305. data/lib/rex/socket/ssl_tcp_server.rb +122 -0
  306. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +51 -0
  307. data/lib/rex/socket/subnet_walker.rb +75 -0
  308. data/lib/rex/socket/subnet_walker.rb.ut.rb +28 -0
  309. data/lib/rex/socket/switch_board.rb +272 -0
  310. data/lib/rex/socket/switch_board.rb.ut.rb +52 -0
  311. data/lib/rex/socket/tcp.rb +76 -0
  312. data/lib/rex/socket/tcp.rb.ut.rb +64 -0
  313. data/lib/rex/socket/tcp_server.rb +67 -0
  314. data/lib/rex/socket/tcp_server.rb.ut.rb +44 -0
  315. data/lib/rex/socket/udp.rb +157 -0
  316. data/lib/rex/socket/udp.rb.ut.rb +44 -0
  317. data/lib/rex/struct2.rb +5 -0
  318. data/lib/rex/struct2/c_struct.rb +181 -0
  319. data/lib/rex/struct2/c_struct_template.rb +39 -0
  320. data/lib/rex/struct2/constant.rb +26 -0
  321. data/lib/rex/struct2/element.rb +44 -0
  322. data/lib/rex/struct2/generic.rb +73 -0
  323. data/lib/rex/struct2/restraint.rb +54 -0
  324. data/lib/rex/struct2/s_string.rb +72 -0
  325. data/lib/rex/struct2/s_struct.rb +111 -0
  326. data/lib/rex/sync.rb +6 -0
  327. data/lib/rex/sync/event.rb +94 -0
  328. data/lib/rex/sync/read_write_lock.rb +176 -0
  329. data/lib/rex/sync/ref.rb +57 -0
  330. data/lib/rex/sync/thread_safe.rb +82 -0
  331. data/lib/rex/test.rb +35 -0
  332. data/lib/rex/text.rb +1029 -0
  333. data/lib/rex/text.rb.ut.rb +168 -0
  334. data/lib/rex/time.rb +65 -0
  335. data/lib/rex/transformer.rb +115 -0
  336. data/lib/rex/transformer.rb.ut.rb +38 -0
  337. data/lib/rex/ui.rb +21 -0
  338. data/lib/rex/ui/interactive.rb +252 -0
  339. data/lib/rex/ui/output.rb +80 -0
  340. data/lib/rex/ui/output/none.rb +18 -0
  341. data/lib/rex/ui/progress_tracker.rb +96 -0
  342. data/lib/rex/ui/subscriber.rb +149 -0
  343. data/lib/rex/ui/text/color.rb +97 -0
  344. data/lib/rex/ui/text/color.rb.ut.rb +18 -0
  345. data/lib/rex/ui/text/dispatcher_shell.rb +382 -0
  346. data/lib/rex/ui/text/input.rb +117 -0
  347. data/lib/rex/ui/text/input/buffer.rb +75 -0
  348. data/lib/rex/ui/text/input/readline.rb +129 -0
  349. data/lib/rex/ui/text/input/socket.rb +95 -0
  350. data/lib/rex/ui/text/input/stdio.rb +45 -0
  351. data/lib/rex/ui/text/irb_shell.rb +55 -0
  352. data/lib/rex/ui/text/output.rb +80 -0
  353. data/lib/rex/ui/text/output/buffer.rb +65 -0
  354. data/lib/rex/ui/text/output/file.rb +37 -0
  355. data/lib/rex/ui/text/output/socket.rb +43 -0
  356. data/lib/rex/ui/text/output/stdio.rb +40 -0
  357. data/lib/rex/ui/text/progress_tracker.rb +56 -0
  358. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +34 -0
  359. data/lib/rex/ui/text/shell.rb +321 -0
  360. data/lib/rex/ui/text/table.rb +254 -0
  361. data/lib/rex/ui/text/table.rb.ut.rb +55 -0
  362. data/lib/rex/zip.rb +93 -0
  363. data/lib/rex/zip/archive.rb +91 -0
  364. data/lib/rex/zip/blocks.rb +182 -0
  365. data/lib/rex/zip/entry.rb +95 -0
  366. data/lib/rex/zip/samples/comment.rb +32 -0
  367. data/lib/rex/zip/samples/mkwar.rb +138 -0
  368. data/lib/rex/zip/samples/mkzip.rb +19 -0
  369. data/lib/rex/zip/samples/recursive.rb +58 -0
  370. metadata +435 -0
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rex/text'
4
+
5
+ module Rex
6
+ module Encoder
7
+ module Alpha2
8
+
9
+ class Generic
10
+
11
+ def Generic.default_accepted_chars ; ('a' .. 'z').to_a + ('B' .. 'Z').to_a + ('0' .. '9').to_a ; end
12
+
13
+ def Generic.gen_decoder_prefix(reg, offset)
14
+ # Should never happen - have to pick a specifc
15
+ # encoding:
16
+ # alphamixed, alphaupper, unicodemixed, unicodeupper
17
+ ''
18
+ end
19
+
20
+ def Generic.gen_decoder(reg, offset)
21
+ # same as above
22
+ return ''
23
+ end
24
+
25
+ def Generic.gen_base_set(ignored_max=0x0f)
26
+ # 0xf is max for XOR encodings - non-unicode
27
+ max = 0x0f
28
+ Rex::Text.shuffle_a(
29
+ [* ( (0..(max)).map { |i| i *= 0x10 } ) ]
30
+ )
31
+ end
32
+
33
+ def Generic.gen_second(block, base)
34
+ # XOR encoder for ascii - unicode uses additive
35
+ (block^base)
36
+ end
37
+
38
+ def Generic.encode_byte(block, badchars)
39
+ accepted_chars = default_accepted_chars.dup
40
+
41
+
42
+ # Remove bad chars from the accepted_chars list. Sadly 'A' must be
43
+ # an accepted char or we'll certainly fail at this point. This could
44
+ # be fixed later maybe with some recalculation of the encoder stubs...
45
+ # - Puss
46
+ (badchars || '').unpack('C*').map { |c| accepted_chars.delete([c].pack('C')) }
47
+
48
+ first = 0
49
+ second = 1
50
+ randbase = 0
51
+ found = nil
52
+
53
+
54
+ gen_base_set(block).each do |randbase_|
55
+ second = gen_second(block, randbase_)
56
+ next if second < 0
57
+ if(accepted_chars.include?([second].pack('C')))
58
+ found = second
59
+ randbase = randbase_
60
+ break
61
+ end
62
+ end
63
+
64
+ if(not found)
65
+ raise RuntimeError, "No valid base found for #{"0x%.2x" % block}"
66
+ end
67
+
68
+ raise RuntimeError, "Negative" if second < 0
69
+ if !(accepted_chars.include?([second].pack('C')))
70
+ raise RuntimeError, "BadChar; #{block} to #{second}"
71
+ end
72
+
73
+ if (randbase > 0xa0)
74
+ # first num must be 4
75
+ first = (randbase/0x10) + 0x40
76
+ elsif (randbase == 0x00) || (randbase == 0x10)
77
+ # first num must be 5
78
+ first = (randbase/0x10) + 0x50
79
+ else
80
+ # pick one at "random"
81
+ first = (randbase/0x10)
82
+ if (first % 2)
83
+ first += 0x40
84
+ else
85
+ randbase += 0x50
86
+ end
87
+ end
88
+
89
+ # now add our new bytes :)
90
+ [first.to_i, second].pack('CC')
91
+ end
92
+
93
+ def Generic.encode(buf, reg, offset, badchars = '')
94
+ encoded = gen_decoder(reg, offset)
95
+
96
+ buf.each_byte {
97
+ |block|
98
+
99
+ encoded += encode_byte(block, badchars)
100
+ }
101
+
102
+ encoded += add_terminator()
103
+
104
+ return encoded
105
+ end
106
+
107
+ # 'A' signifies the end of the encoded shellcode
108
+ def Generic.add_terminator()
109
+ 'AA'
110
+ end
111
+
112
+ end end end end
113
+
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rex/encoder/alpha2/generic'
4
+
5
+ module Rex
6
+ module Encoder
7
+ module Alpha2
8
+
9
+ class UnicodeMixed < Generic
10
+
11
+ def self.gen_base_set(max)
12
+ Rex::Text.shuffle_a(
13
+ [* ( (0..(max-1)).map { |i| i *= 0x10 } ) ]
14
+ )
15
+ end
16
+
17
+ def self.gen_second(block, base)
18
+ # unicode uses additive encoding
19
+ (block - base)
20
+ end
21
+
22
+ def self.gen_decoder_prefix(reg, offset)
23
+ if (offset > 28)
24
+ raise "Critical: Offset is greater than 28"
25
+ end
26
+
27
+ # offset untested for unicode :(
28
+ if (offset <= 14)
29
+ nop = 'CP' * offset
30
+ mod = 'IA' * (14 - offset) + nop # dec ecx,,, push ecx, pop edx
31
+ else
32
+ mod = 'AA' * (offset - 14) # inc ecx
33
+ nop = 'CP' * (14 - mod.length)
34
+ mod += nop
35
+ end
36
+ regprefix = { # nops ignored below
37
+ 'EAX' => 'PPYA' + mod, # push eax, pop ecx
38
+ 'ECX' => mod + "4444", # dec ecx
39
+ 'EDX' => 'RRYA' + mod, # push edx, pop ecx
40
+ 'EBX' => 'SSYA' + mod, # push ebx, pop ecx
41
+ 'ESP' => 'TUYA' + mod, # push esp, pop ecx
42
+ 'EBP' => 'UUYA' + mod, # push ebp, pop ecx
43
+ 'ESI' => 'VVYA' + mod, # push esi, pop ecx
44
+ 'EDI' => 'WWYA' + mod, # push edi, pop edi
45
+ }
46
+
47
+ return regprefix[reg]
48
+ end
49
+
50
+ def self.gen_decoder(reg, offset)
51
+ decoder =
52
+ gen_decoder_prefix(reg, offset) +
53
+ "j" + # push 0
54
+ "XA" + # pop eax, NOP
55
+ "QA" + # push ecx, NOP
56
+ "DA" + # inc esp, NOP
57
+ "ZA" + # pop edx, NOP
58
+ "BA" + # inc edx, NOP
59
+ "RA" + # push edx, NOP
60
+ "LA" + # dec esp, NOP
61
+ "YA" + # pop ecx, NOP
62
+ "IA" + # dec ecx, NOP
63
+ "QA" + # push ecx, NOP
64
+ "IA" + # dec ecx, NOP
65
+ "QA" + # push ecx, NOP
66
+ "IA" + # dec ecx, NOP
67
+ "hAAA" + # push 00410041, NOP
68
+ "Z" + # pop edx
69
+ "1A" + # add [ecx], dh NOP
70
+ "IA" + # dec ecx, NOP
71
+ "IA" + # dec ecx, NOP
72
+ "J" + # dec edx
73
+ "1" + # add [ecx], dh
74
+ "1A" + # add [ecx], dh NOP
75
+ "IA" + # dec ecx, NOP
76
+ "IA" + # dec ecx, NOP
77
+ "BA" + # inc edx, NOP
78
+ "BA" + # inc edx, NOP
79
+ "B" + # inc edx
80
+ "Q" + # add [ecx], dl
81
+ "I" + # dec ecx
82
+ "1A" + # add [ecx], dh NOP
83
+ "I" + # dec ecx
84
+ "Q" + # add [ecx], dl
85
+ "IA" + # dec ecx, NOP
86
+ "I" + # dec ecx
87
+ "Q" + # add [ecx], dh
88
+ "I" + # dec ecx
89
+ "1" + # add [ecx], dh
90
+ "1" + # add [ecx], dh
91
+ "1A" + # add [ecx], dh NOP
92
+ "IA" + # dec ecx, NOP
93
+ "J" + # dec edx
94
+ "Q" + # add [ecx], dl
95
+ "YA" + # pop ecx, NOP
96
+ "Z" + # pop edx
97
+ "B" + # add [edx], al
98
+ "A" + # inc ecx <-------
99
+ "B" + # add [edx], al |
100
+ "A" + # inc ecx |
101
+ "B" + # add [edx], al |
102
+ "A" + # inc ecx |
103
+ "B" + # add [edx], al |
104
+ "A" + # inc ecx |
105
+ "B" + # add [edx], al |
106
+ "kM" + # imul eax, [eax], 10 * |
107
+ "A" + # add [edx], al |
108
+ "G" + # inc edi |
109
+ "B" + # add [edx], al |
110
+ "9" + # cmp [eax], eax |
111
+ "u" + # jnz ------------------
112
+ "4JB"
113
+
114
+ return decoder
115
+ end
116
+
117
+ end end end end
@@ -0,0 +1,129 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rex/encoder/alpha2/generic'
4
+
5
+ module Rex
6
+ module Encoder
7
+ module Alpha2
8
+
9
+ class UnicodeUpper < Generic
10
+ def self.default_accepted_chars ; ('B' .. 'Z').to_a + ('0' .. '9').to_a ; end
11
+
12
+ def self.gen_base_set(max)
13
+ Rex::Text.shuffle_a(
14
+ [* ( (0..(max-1)).map { |i| i *= 0x10 } ) ]
15
+ )
16
+ end
17
+
18
+ def self.gen_second(block, base)
19
+ # unicode uses additive encoding
20
+ (block - base)
21
+ end
22
+
23
+ def self.gen_decoder_prefix(reg, offset)
24
+ if (offset > 8)
25
+ raise "Critical: Offset is greater than 8"
26
+ end
27
+
28
+ # offset untested for unicode :(
29
+ if (offset <= 4)
30
+ nop = 'CP' * offset
31
+ mod = 'IA' * (4 - offset) + nop # dec ecx,,, push ecx, pop edx
32
+ else
33
+ mod = 'AA' * (offset - 4) # inc ecx
34
+ nop = 'CP' * (4 - mod.length)
35
+ mod += nop
36
+ end
37
+
38
+ regprefix = { # nops ignored below
39
+ 'EAX' => 'PPYA' + mod, # push eax, pop ecx
40
+ 'ECX' => mod + '4444', # dec ecx
41
+ 'EDX' => 'RRYA' + mod, # push edx, pop ecx
42
+ 'EBX' => 'SSYA' + mod, # push ebx, pop ecx
43
+ 'ESP' => 'TUYA' + mod, # push esp, pop ecx
44
+ 'EBP' => 'UUYA' + mod, # push ebp, pop ecx
45
+ 'ESI' => 'VVYA' + mod, # push esi, pop ecx
46
+ 'EDI' => 'WWYA' + mod, # push edi, pop edi
47
+ '[ESP]' => 'YA' + mod + '44', #
48
+ '[ESP+4]' => 'YUYA' + mod, #
49
+ }
50
+
51
+ return regprefix[reg]
52
+ end
53
+
54
+ def self.gen_decoder(reg, offset)
55
+ decoder =
56
+ gen_decoder_prefix(reg, offset) +
57
+ "QA" + # push ecx, NOP
58
+ "TA" + # push esp, NOP
59
+ "XA" + # pop eax, NOP
60
+ "ZA" + # pop edx, NOP
61
+ "PU" + # push eax, NOP
62
+ "3" + # xor eax, [eax]
63
+ "QA" + # push ecx, NOP
64
+ "DA" + # inc esp, NOP
65
+ "ZA" + # pop edx, NOP
66
+ "BA" + # inc edx, NOP
67
+ "RA" + # push edx, NOP
68
+ "LA" + # dec esp, NOP
69
+ "YA" + # pop ecx, NOP
70
+ "IA" + # dec ecx, NOP
71
+ "QA" + # push ecx, NOP
72
+ "IA" + # dec ecx, NOP
73
+ "QA" + # push ecx, NOP
74
+ "PA" + # push eax, NOP
75
+ "5AAA" + # xor eax, 41004100 - NOP
76
+ "PA" + # push eax, NOP
77
+ "Z" + # pop edx
78
+ "1A" + # add [ecx], dh - NOP
79
+ "I" + # dec ecx
80
+ "1A" + # add [ecx], dh - NOP
81
+ "IA" + # dec ecx, NOP
82
+ "IA" + # dec ecx, NOP
83
+ "J" + # dec edx
84
+ "1" + # add [ecx], dh
85
+ "1A" + # add [ecx], dh - NOP
86
+ "IA" + # dec ecx, NOP
87
+ "IA" + # dec ecx, NOP
88
+ "XA" + # pop eax, NOP
89
+ "58AA" + # xor eax, 41003800 - NOP
90
+ "PA" + # push eax, NOP
91
+ "ZA" + # pop edx, NOP
92
+ "BA" + # inc edx, NOP
93
+ "B" + # inc edx
94
+ "Q" + # add [ecx], dl
95
+ "I" + # dec ecx
96
+ "1A" + # add [ecx], dh - NOP
97
+ "I" + # dec ecx
98
+ "Q" + # add [ecx], dl
99
+ "IA" + # dec ecx, NOP
100
+ "I" + # dec ecx
101
+ "Q" + # add [ecx], dl
102
+ "I" + # dec ecx
103
+ "1" + # add [ecx], dh
104
+ "1" + # add [ecx], dh
105
+ "1" + # add [ecx], dh
106
+ "1A" + # add [ecx], dh - NOP
107
+ "IA" + # dec ecx, NOP
108
+ "J" + # dec edx
109
+ "Q" + # add [ecx], dl
110
+ "I" + # dec edx
111
+ "1A" + # add [ecx], dh - NOP
112
+ "YA" + # pop ecx, NOP
113
+ "ZB" + # pop edx, NOP
114
+ "AB" + # inc ecx, NOP <-------
115
+ "AB" + # inc ecx, NOP |
116
+ "AB" + # inc ecx, NOP |
117
+ "AB" + # inc ecx, NOP |
118
+ "30" + # imul eax, [ecx], 10 * |
119
+ "A" + # add al, [ecx+2] * |
120
+ "P" + # mov [edx], al * |
121
+ "B" + # inc edx |
122
+ "9" + # cmp [ecx], 41 * |
123
+ "4" + # jnz --------------------
124
+ "4JB"
125
+
126
+ return decoder
127
+ end
128
+
129
+ end end end end
@@ -0,0 +1,89 @@
1
+ require "rex/text"
2
+
3
+ module Rex
4
+ module Encoder
5
+ module NDR
6
+
7
+ # Provide padding to align the string to the 32bit boundary
8
+ def NDR.align(string)
9
+ return "\x00" * ((4 - (string.length & 3)) & 3)
10
+ end
11
+
12
+ # Encode a 4 byte long
13
+ # use to encode:
14
+ # long element_1;
15
+ def NDR.long(string)
16
+ return [string].pack('V')
17
+ end
18
+
19
+ # Encode a 2 byte short
20
+ # use to encode:
21
+ # short element_1;
22
+ def NDR.short(string)
23
+ return [string].pack('v')
24
+ end
25
+
26
+ # Encode a single byte
27
+ # use to encode:
28
+ # byte element_1;
29
+ def NDR.byte(string)
30
+ return [string].pack('c')
31
+ end
32
+
33
+ # Encode a byte array
34
+ # use to encode:
35
+ # char element_1
36
+ def NDR.UniConformantArray(string)
37
+ return long(string.length) + string + align(string)
38
+ end
39
+
40
+ # Encode a string
41
+ # use to encode:
42
+ # char *element_1;
43
+ def NDR.string(string)
44
+ string << "\x00" # null pad
45
+ return long(string.length) + long(0) + long(string.length) + string + align(string)
46
+ end
47
+
48
+ # Encode a string
49
+ # use to encode:
50
+ # w_char *element_1;
51
+ def NDR.wstring(string)
52
+ string = string + "\x00" # null pad
53
+ return long(string.length) + long(0) + long(string.length) + Rex::Text.to_unicode(string) + align(Rex::Text.to_unicode(string))
54
+ end
55
+
56
+ # Encode a string and make it unique
57
+ # use to encode:
58
+ # [unique] w_char *element_1;
59
+ def NDR.uwstring(string)
60
+ string = string + "\x00" # null pad
61
+ return long(rand(0xffffffff))+long(string.length) + long(0) + long(string.length) + Rex::Text.to_unicode(string) + align(Rex::Text.to_unicode(string))
62
+ end
63
+
64
+ # Encode a string that is already unicode encoded
65
+ # use to encode:
66
+ # w_char *element_1;
67
+ def NDR.wstring_prebuilt(string)
68
+ # if the string len is odd, thats bad!
69
+ if string.length % 2 > 0
70
+ string = string + "\x00"
71
+ end
72
+ len = string.length / 2;
73
+ return long(len) + long(0) + long(len) + string + align(string)
74
+ end
75
+
76
+ # alias to wstring, going away soon
77
+ def NDR.UnicodeConformantVaryingString(string)
78
+ NDR.wstring(string)
79
+ end
80
+
81
+ # alias to wstring_prebuilt, going away soon
82
+ def NDR.UnicodeConformantVaryingStringPreBuilt(string)
83
+ NDR.wstring_prebuilt(string)
84
+ end
85
+
86
+ end
87
+ end
88
+ end
89
+