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,136 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # $Id: section.rb 6686 2009-06-20 17:53:53Z hdm $
4
+
5
+ require 'rex/peparsey/exceptions'
6
+ require 'rex/peparsey/pebase'
7
+ require 'rex/struct2'
8
+
9
+ module Rex
10
+ module PeParsey
11
+ class Section
12
+ attr_accessor :_section_header, :_isource
13
+ attr_accessor :base_rva
14
+
15
+ #
16
+ # Initialize a section.
17
+ #
18
+ # isource - The ImageSource class backing the image
19
+ # base_vma - The address of this section base
20
+ # section_header - The section header (struct2) although this is not
21
+ # required, which is why there is a base_vma. This can be nil.
22
+ #
23
+ def initialize(isource, base_rva, section_header = nil)
24
+ self._isource = isource
25
+ self.base_rva = base_rva
26
+ self._section_header = section_header
27
+ end
28
+
29
+ def file_offset
30
+ _isource.file_offset
31
+ end
32
+
33
+ def size
34
+ _isource.size
35
+ end
36
+
37
+ def name
38
+ # a section header is not required
39
+ return nil if !_section_header
40
+
41
+ # FIXME make this better...
42
+ _section_header.v['Name'].gsub(/\x00+$/, '')
43
+ end
44
+
45
+ def flags
46
+ # a section header is not required
47
+ return nil if !_section_header
48
+ _section_header.v['Characteristics']
49
+ end
50
+
51
+ def vma
52
+ # a section header is not required
53
+ return nil if !_section_header
54
+ _section_header.v['VirtualAddress']
55
+ end
56
+
57
+ def raw_size
58
+ # a section header is not required
59
+ return nil if !_section_header
60
+ _section_header.v['SizeOfRawData']
61
+ end
62
+
63
+ def _check_offset(offset, len = 1)
64
+ if offset < 0 || offset+len > size
65
+ raise BoundsError, "Offset #{offset} outside of section", caller
66
+ end
67
+ end
68
+
69
+ def read(offset, len)
70
+ _check_offset(offset, len)
71
+ return _isource.read(offset, len)
72
+ end
73
+
74
+ def read_rva(rva, len)
75
+ return read(rva_to_offset(rva), len)
76
+ end
77
+
78
+ def read_asciiz(offset)
79
+ _check_offset(offset)
80
+ return _isource.read_asciiz(offset)
81
+ end
82
+
83
+ def read_asciiz_rva(rva)
84
+ return read_asciiz(rva_to_offset(rva))
85
+ end
86
+
87
+ def index(*args)
88
+ _isource.index(*args)
89
+ end
90
+
91
+ def offset_to_rva(offset)
92
+ if !contains_offset?(offset)
93
+ raise BoundsError, "Offset #{offset} outside of section", caller
94
+ end
95
+
96
+ return offset + base_rva
97
+ end
98
+
99
+ def file_offset_to_rva(foffset)
100
+ return offset_to_rva(foffset - file_offset)
101
+ end
102
+ # if offset < 0 || offset < file_offset || offset >= file_offset+size
103
+ # raise BoundsError, "File offset #{offset} outside of section", caller
104
+ # end
105
+ #
106
+ # return (offset - file_offset) + base_rva
107
+ # end
108
+
109
+ def rva_to_offset(rva)
110
+ offset = rva - base_rva
111
+ if !contains_offset?(offset)
112
+ raise BoundsError, "RVA #{rva} outside of section", caller
113
+ end
114
+
115
+ return offset
116
+ end
117
+
118
+ def rva_to_file_offset(rva)
119
+ return rva_to_offset(rva) + file_offset
120
+ end
121
+
122
+ def contains_offset?(offset)
123
+ offset >= 0 && offset < size
124
+ end
125
+
126
+ def contains_file_offset?(foffset)
127
+ contains_offset?(foffset - file_offset)
128
+ end
129
+
130
+ def contains_rva?(rva)
131
+ contains_offset?(rva - base_rva)
132
+ end
133
+
134
+ end
135
+
136
+ end end
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # $Id: pescan.rb 5413 2008-02-13 02:43:56Z ramon $
4
+
5
+ module Rex
6
+ module PeScan
7
+
8
+ end
9
+ end
10
+
11
+ require 'rex/pescan/analyze'
12
+ require 'rex/pescan/scanner'
13
+ require 'rex/pescan/search'
@@ -0,0 +1,309 @@
1
+ module Rex
2
+ module PeScan
3
+ module Analyze
4
+
5
+ require "rex/ui/text/table"
6
+
7
+ class Fingerprint
8
+ attr_accessor :pe
9
+
10
+ def initialize(pe)
11
+ self.pe = pe
12
+ end
13
+
14
+ def config(param)
15
+ @sigs = {}
16
+
17
+ name = nil
18
+ regx = ''
19
+ epon = 0
20
+ sidx = 0
21
+
22
+ fd = File.open(param['database'], 'rb')
23
+ fd.each_line do |line|
24
+ case line
25
+ when /^\s*#/
26
+ next
27
+ when /\[\s*(.*)\s*\]/
28
+ if (name)
29
+ @sigs[ name ] = [regx, epon]
30
+ end
31
+ name = $1 + " [#{ sidx+=1 }]"
32
+ epon = 0
33
+ next
34
+ when /signature\s*=\s*(.*)/
35
+ pat = $1.strip
36
+ regx = ''
37
+ pat.split(/\s+/).each do |c|
38
+ next if c.length != 2
39
+ regx << (c.index('?') ? '.' : "\\x#{c}")
40
+ end
41
+ when /ep_only\s*=\s*(.*)/
42
+ epon = ($1 =~ /^T/i) ? 1 : 0
43
+ end
44
+ end
45
+
46
+ if (name and ! @sigs[name])
47
+ @sigs[ name ] = [regx, epon]
48
+ end
49
+
50
+ fd.close
51
+ end
52
+
53
+ def scan(param)
54
+ config(param)
55
+
56
+ epa = pe.hdr.opt.AddressOfEntryPoint
57
+ buf = pe.read_rva(epa, 256)
58
+
59
+ @sigs.each_pair do |name, data|
60
+ begin
61
+ if (buf.match(Regexp.new('^' + data[0], nil, 'n')))
62
+ $stdout.puts param['file'] + ": " + name
63
+ end
64
+ rescue RegexpError
65
+ $stderr.puts "Invalid signature: #{name} #{data[0]}"
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ class Information
72
+ attr_accessor :pe
73
+
74
+ def initialize(pe)
75
+ self.pe = pe
76
+ end
77
+
78
+ def add_fields(tbl, obj, fields)
79
+ fields.each do |name|
80
+ begin
81
+ tbl << [name, "0x%.8x" % obj.send(name)]
82
+ rescue ::NoMethodError => e
83
+ $stderr.puts "Invalid field #{name}"
84
+ end
85
+ end
86
+ end
87
+
88
+ def scan(param)
89
+
90
+ $stdout.puts "\n\n"
91
+
92
+ tbl = table("Image Headers", ['Name', 'Value'])
93
+ add_fields(tbl, pe.hdr.file, %W{
94
+ Characteristics
95
+ SizeOfOptionalHeader
96
+ PointerToSymbolTable
97
+ TimeDateStamp
98
+ NumberOfSections
99
+ Machine
100
+ })
101
+ $stdout.puts tbl.to_s
102
+ $stdout.puts "\n\n"
103
+
104
+ tbl = table("Optional Image Headers", ['Name', 'Value'])
105
+ add_fields(tbl, pe.hdr.opt, %W{
106
+ ImageBase
107
+ Magic
108
+ MajorLinkerVersion
109
+ MinorLinkerVersion
110
+ SizeOfCode
111
+ SizeOfInitializeData
112
+ SizeOfUninitializeData
113
+ AddressOfEntryPoint
114
+ BaseOfCode
115
+ BaseOfData
116
+ SectionAlignment
117
+ FileAlignment
118
+ MajorOperatingSystemVersion
119
+ MinorOperatingSystemVersion
120
+ MajorImageVersion
121
+ MinorImageVersion
122
+ MajorSubsystemVersion
123
+ MinorSubsystemVersion
124
+ Win32VersionValue
125
+ SizeOfImage
126
+ SizeOfHeaders
127
+ CheckSum
128
+ Subsystem
129
+ DllCharacteristics
130
+ SizeOfStackReserve
131
+ SizeOfStackCommit
132
+ SizeOfHeapReserve
133
+ SizeOfHeapCommit
134
+ LoaderFlags
135
+ NumberOfRvaAndSizes
136
+ })
137
+ $stdout.puts tbl.to_s
138
+ $stdout.puts "\n\n"
139
+
140
+ if (pe.exports)
141
+ tbl = table("Exported Functions", ['Ordinal', 'Name', 'Address'])
142
+ pe.exports.entries.each do |ent|
143
+ tbl << [ent.ordinal, ent.name, "0x%.8x" % pe.rva_to_vma(ent.rva)]
144
+ end
145
+ $stdout.puts tbl.to_s
146
+ $stdout.puts "\n\n"
147
+ end
148
+
149
+ if (pe.imports)
150
+ tbl = table("Imported Functions", ['Library', 'Ordinal', 'Name'])
151
+ pe.imports.each do |lib|
152
+ lib.entries.each do |ent|
153
+ tbl << [lib.name, ent.ordinal, ent.name]
154
+ end
155
+ end
156
+ $stdout.puts tbl.to_s
157
+ $stdout.puts "\n\n"
158
+ end
159
+
160
+ if(pe.config)
161
+ tbl = table("Configuration Header", ['Name', 'Value'])
162
+ add_fields(tbl, pe.config, %W{
163
+ Size
164
+ TimeDateStamp
165
+ MajorVersion
166
+ MinorVersion
167
+ GlobalFlagsClear
168
+ GlobalFlagsSet
169
+ CriticalSectionDefaultTimeout
170
+ DeCommitFreeBlockThreshold
171
+ DeCommitTotalFreeThreshold
172
+ LockPrefixTable
173
+ MaximumAllocationSize
174
+ VirtualMemoryThreshold
175
+ ProcessAffinityMask
176
+ ProcessHeapFlags
177
+ CSDVersion
178
+ Reserved1
179
+ EditList
180
+ SecurityCookie
181
+ SEHandlerTable
182
+ SEHandlerCount
183
+ })
184
+ $stdout.puts tbl.to_s
185
+ $stdout.puts "\n\n"
186
+ end
187
+
188
+
189
+ if(pe.resources)
190
+ tbl = table("Resources", ['ID', 'Language', 'Code Page', 'Size', 'Name'])
191
+ pe.resources.keys.sort.each do |rkey|
192
+ res = pe.resources[rkey]
193
+ tbl << [rkey, res.lang, res.code, res.size, res.file]
194
+ end
195
+ $stdout.puts tbl.to_s
196
+ $stdout.puts "\n\n"
197
+ end
198
+
199
+ tbl = table("Section Header", ["Name", "VirtualAddress", "SizeOfRawData", "Characteristics"])
200
+ pe.sections.each do |sec|
201
+ tbl << [ sec.name, *[sec.vma, sec.raw_size, sec.flags].map{|x| "0x%.8x" % x} ]
202
+ end
203
+ $stdout.puts tbl.to_s
204
+ $stdout.puts "\n\n"
205
+
206
+ end
207
+
208
+ def table(name, cols)
209
+ Rex::Ui::Text::Table.new(
210
+ 'Header' => name,
211
+ 'Columns' => cols
212
+ )
213
+ end
214
+ end
215
+
216
+
217
+ class Ripper
218
+
219
+ require "fileutils"
220
+
221
+ attr_accessor :pe
222
+
223
+ def initialize(pe)
224
+ self.pe = pe
225
+ end
226
+
227
+ def scan(param)
228
+ dest = param['dir']
229
+
230
+ if (param['file'])
231
+ dest = File.join(dest, File.basename(param['file']))
232
+ end
233
+
234
+ ::FileUtils.mkdir_p(dest)
235
+
236
+ pe.resources.keys.sort.each do |rkey|
237
+ res = pe.resources[rkey]
238
+ path = File.join(dest, rkey.split('/')[1] + '_' + res.file)
239
+
240
+ fd = File.new(path, 'wb')
241
+ fd.write(res.data)
242
+ fd.close
243
+ end
244
+ end
245
+ end
246
+
247
+ class ContextMapDumper
248
+
249
+ attr_accessor :pe
250
+
251
+ def initialize(pe)
252
+ self.pe = pe
253
+ end
254
+
255
+ def scan(param)
256
+ dest = param['dir']
257
+ path = ''
258
+
259
+ ::FileUtils.mkdir_p(dest)
260
+
261
+ if(not (param['dir'] and param['file']))
262
+ $stderr.puts "No directory or file specified"
263
+ return
264
+ end
265
+
266
+ if (param['file'])
267
+ path = File.join(dest, File.basename(param['file']) + ".map")
268
+ end
269
+
270
+ fd = File.new(path, "wb")
271
+ pe.all_sections.each do |section|
272
+
273
+ # Skip over known bad sections
274
+ next if section.name == ".data"
275
+ next if section.name == ".reloc"
276
+
277
+ offset = 0
278
+ while offset < section.size
279
+ byte = section.read(offset, 1)[0]
280
+ if byte != 0
281
+ chunkbase = pe.rva_to_vma(section.base_rva) + offset
282
+ data = ''
283
+ while byte != 0
284
+ data << byte
285
+ offset += 1
286
+ byte = 0
287
+ byte = section.read(offset, 1)[0] if offset < section.size
288
+ end
289
+ buff = nil
290
+ buff = [ 0x01, chunkbase, data.length, data].pack("CNNA*") if data.length > 0
291
+
292
+ fd.write(buff) if buff
293
+ end
294
+ offset += 1
295
+ end
296
+
297
+ end
298
+
299
+
300
+ fd.close
301
+ end
302
+ end
303
+
304
+ # EOC
305
+
306
+ end
307
+ end
308
+ end
309
+