librex 0.0.13 → 0.0.15

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 (435) hide show
  1. data/README.markdown +1 -1
  2. data/Rakefile +1 -0
  3. metadata +3 -435
  4. data/lib/rex/LICENSE +0 -29
  5. data/lib/rex/arch.rb +0 -103
  6. data/lib/rex/arch/sparc.rb +0 -75
  7. data/lib/rex/arch/sparc.rb.ut.rb +0 -18
  8. data/lib/rex/arch/x86.rb +0 -513
  9. data/lib/rex/arch/x86.rb.ut.rb +0 -93
  10. data/lib/rex/assembly/nasm.rb +0 -104
  11. data/lib/rex/assembly/nasm.rb.ut.rb +0 -22
  12. data/lib/rex/codepage.map +0 -104
  13. data/lib/rex/compat.rb +0 -311
  14. data/lib/rex/constants.rb +0 -113
  15. data/lib/rex/elfparsey.rb +0 -11
  16. data/lib/rex/elfparsey/elf.rb +0 -123
  17. data/lib/rex/elfparsey/elfbase.rb +0 -258
  18. data/lib/rex/elfparsey/exceptions.rb +0 -27
  19. data/lib/rex/elfscan.rb +0 -12
  20. data/lib/rex/elfscan/scanner.rb +0 -207
  21. data/lib/rex/elfscan/search.rb +0 -46
  22. data/lib/rex/encoder/alpha2.rb +0 -31
  23. data/lib/rex/encoder/alpha2/alpha_mixed.rb +0 -68
  24. data/lib/rex/encoder/alpha2/alpha_upper.rb +0 -79
  25. data/lib/rex/encoder/alpha2/generic.rb +0 -114
  26. data/lib/rex/encoder/alpha2/unicode_mixed.rb +0 -117
  27. data/lib/rex/encoder/alpha2/unicode_upper.rb +0 -129
  28. data/lib/rex/encoder/ndr.rb +0 -89
  29. data/lib/rex/encoder/ndr.rb.ut.rb +0 -44
  30. data/lib/rex/encoder/nonalpha.rb +0 -61
  31. data/lib/rex/encoder/nonupper.rb +0 -64
  32. data/lib/rex/encoder/xdr.rb +0 -106
  33. data/lib/rex/encoder/xdr.rb.ut.rb +0 -29
  34. data/lib/rex/encoder/xor.rb +0 -69
  35. data/lib/rex/encoder/xor/dword.rb +0 -13
  36. data/lib/rex/encoder/xor/dword_additive.rb +0 -13
  37. data/lib/rex/encoders/xor_dword.rb +0 -35
  38. data/lib/rex/encoders/xor_dword_additive.rb +0 -53
  39. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -12
  40. data/lib/rex/encoding/xor.rb +0 -20
  41. data/lib/rex/encoding/xor.rb.ts.rb +0 -14
  42. data/lib/rex/encoding/xor/byte.rb +0 -15
  43. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -21
  44. data/lib/rex/encoding/xor/dword.rb +0 -21
  45. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -15
  46. data/lib/rex/encoding/xor/dword_additive.rb +0 -92
  47. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -15
  48. data/lib/rex/encoding/xor/exceptions.rb +0 -17
  49. data/lib/rex/encoding/xor/generic.rb +0 -146
  50. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -120
  51. data/lib/rex/encoding/xor/qword.rb +0 -15
  52. data/lib/rex/encoding/xor/word.rb +0 -21
  53. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -13
  54. data/lib/rex/exceptions.rb +0 -275
  55. data/lib/rex/exceptions.rb.ut.rb +0 -44
  56. data/lib/rex/exploitation/cmdstager.rb +0 -9
  57. data/lib/rex/exploitation/cmdstager/base.rb +0 -175
  58. data/lib/rex/exploitation/cmdstager/debug_asm.rb +0 -142
  59. data/lib/rex/exploitation/cmdstager/debug_write.rb +0 -136
  60. data/lib/rex/exploitation/cmdstager/tftp.rb +0 -63
  61. data/lib/rex/exploitation/cmdstager/vbs.rb +0 -128
  62. data/lib/rex/exploitation/egghunter.rb +0 -277
  63. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -25
  64. data/lib/rex/exploitation/encryptjs.rb +0 -77
  65. data/lib/rex/exploitation/heaplib.js.b64 +0 -331
  66. data/lib/rex/exploitation/heaplib.rb +0 -94
  67. data/lib/rex/exploitation/javascriptosdetect.rb +0 -897
  68. data/lib/rex/exploitation/obfuscatejs.rb +0 -335
  69. data/lib/rex/exploitation/omelet.rb +0 -320
  70. data/lib/rex/exploitation/omelet.rb.ut.rb +0 -13
  71. data/lib/rex/exploitation/opcodedb.rb +0 -818
  72. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -279
  73. data/lib/rex/exploitation/seh.rb +0 -92
  74. data/lib/rex/exploitation/seh.rb.ut.rb +0 -19
  75. data/lib/rex/file.rb +0 -112
  76. data/lib/rex/file.rb.ut.rb +0 -16
  77. data/lib/rex/image_source.rb +0 -12
  78. data/lib/rex/image_source/disk.rb +0 -60
  79. data/lib/rex/image_source/image_source.rb +0 -46
  80. data/lib/rex/image_source/memory.rb +0 -37
  81. data/lib/rex/io/bidirectional_pipe.rb +0 -157
  82. data/lib/rex/io/datagram_abstraction.rb +0 -35
  83. data/lib/rex/io/stream.rb +0 -319
  84. data/lib/rex/io/stream_abstraction.rb +0 -197
  85. data/lib/rex/io/stream_server.rb +0 -211
  86. data/lib/rex/job_container.rb +0 -187
  87. data/lib/rex/logging.rb +0 -4
  88. data/lib/rex/logging/log_dispatcher.rb +0 -179
  89. data/lib/rex/logging/log_sink.rb +0 -42
  90. data/lib/rex/logging/sinks/flatfile.rb +0 -55
  91. data/lib/rex/logging/sinks/stderr.rb +0 -43
  92. data/lib/rex/machparsey.rb +0 -9
  93. data/lib/rex/machparsey/exceptions.rb +0 -34
  94. data/lib/rex/machparsey/mach.rb +0 -209
  95. data/lib/rex/machparsey/machbase.rb +0 -408
  96. data/lib/rex/machscan.rb +0 -9
  97. data/lib/rex/machscan/scanner.rb +0 -217
  98. data/lib/rex/mime.rb +0 -9
  99. data/lib/rex/mime/header.rb +0 -77
  100. data/lib/rex/mime/message.rb +0 -144
  101. data/lib/rex/mime/part.rb +0 -20
  102. data/lib/rex/nop/opty2.rb +0 -108
  103. data/lib/rex/nop/opty2.rb.ut.rb +0 -23
  104. data/lib/rex/nop/opty2_tables.rb +0 -300
  105. data/lib/rex/ole.rb +0 -205
  106. data/lib/rex/ole/clsid.rb +0 -47
  107. data/lib/rex/ole/difat.rb +0 -141
  108. data/lib/rex/ole/directory.rb +0 -231
  109. data/lib/rex/ole/direntry.rb +0 -240
  110. data/lib/rex/ole/docs/dependencies.txt +0 -8
  111. data/lib/rex/ole/docs/references.txt +0 -1
  112. data/lib/rex/ole/fat.rb +0 -99
  113. data/lib/rex/ole/header.rb +0 -204
  114. data/lib/rex/ole/minifat.rb +0 -77
  115. data/lib/rex/ole/propset.rb +0 -144
  116. data/lib/rex/ole/samples/create_ole.rb +0 -27
  117. data/lib/rex/ole/samples/dir.rb +0 -35
  118. data/lib/rex/ole/samples/dump_stream.rb +0 -34
  119. data/lib/rex/ole/samples/ole_info.rb +0 -23
  120. data/lib/rex/ole/storage.rb +0 -395
  121. data/lib/rex/ole/stream.rb +0 -53
  122. data/lib/rex/ole/substorage.rb +0 -49
  123. data/lib/rex/ole/util.rb +0 -157
  124. data/lib/rex/parser/arguments.rb +0 -97
  125. data/lib/rex/parser/arguments.rb.ut.rb +0 -67
  126. data/lib/rex/parser/ini.rb +0 -185
  127. data/lib/rex/parser/ini.rb.ut.rb +0 -29
  128. data/lib/rex/parser/ip360_aspl_xml.rb +0 -102
  129. data/lib/rex/parser/ip360_xml.rb +0 -93
  130. data/lib/rex/parser/nessus_xml.rb +0 -118
  131. data/lib/rex/parser/netsparker_xml.rb +0 -94
  132. data/lib/rex/parser/nexpose_xml.rb +0 -131
  133. data/lib/rex/parser/nmap_xml.rb +0 -121
  134. data/lib/rex/parser/retina_xml.rb +0 -109
  135. data/lib/rex/payloads.rb +0 -1
  136. data/lib/rex/payloads/win32.rb +0 -2
  137. data/lib/rex/payloads/win32/common.rb +0 -26
  138. data/lib/rex/payloads/win32/kernel.rb +0 -53
  139. data/lib/rex/payloads/win32/kernel/common.rb +0 -54
  140. data/lib/rex/payloads/win32/kernel/migration.rb +0 -12
  141. data/lib/rex/payloads/win32/kernel/recovery.rb +0 -50
  142. data/lib/rex/payloads/win32/kernel/stager.rb +0 -194
  143. data/lib/rex/peparsey.rb +0 -12
  144. data/lib/rex/peparsey/exceptions.rb +0 -32
  145. data/lib/rex/peparsey/pe.rb +0 -212
  146. data/lib/rex/peparsey/pe_memdump.rb +0 -63
  147. data/lib/rex/peparsey/pebase.rb +0 -1680
  148. data/lib/rex/peparsey/section.rb +0 -136
  149. data/lib/rex/pescan.rb +0 -13
  150. data/lib/rex/pescan/analyze.rb +0 -309
  151. data/lib/rex/pescan/scanner.rb +0 -206
  152. data/lib/rex/pescan/search.rb +0 -56
  153. data/lib/rex/platforms.rb +0 -1
  154. data/lib/rex/platforms/windows.rb +0 -51
  155. data/lib/rex/poly.rb +0 -132
  156. data/lib/rex/poly/block.rb +0 -477
  157. data/lib/rex/poly/register.rb +0 -100
  158. data/lib/rex/poly/register/x86.rb +0 -40
  159. data/lib/rex/post.rb +0 -8
  160. data/lib/rex/post/dir.rb +0 -51
  161. data/lib/rex/post/file.rb +0 -172
  162. data/lib/rex/post/file_stat.rb +0 -220
  163. data/lib/rex/post/gen.pl +0 -13
  164. data/lib/rex/post/io.rb +0 -182
  165. data/lib/rex/post/meterpreter.rb +0 -4
  166. data/lib/rex/post/meterpreter/channel.rb +0 -445
  167. data/lib/rex/post/meterpreter/channel_container.rb +0 -54
  168. data/lib/rex/post/meterpreter/channels/pool.rb +0 -160
  169. data/lib/rex/post/meterpreter/channels/pools/file.rb +0 -62
  170. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +0 -103
  171. data/lib/rex/post/meterpreter/channels/stream.rb +0 -87
  172. data/lib/rex/post/meterpreter/client.rb +0 -364
  173. data/lib/rex/post/meterpreter/client_core.rb +0 -274
  174. data/lib/rex/post/meterpreter/dependencies.rb +0 -3
  175. data/lib/rex/post/meterpreter/extension.rb +0 -32
  176. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +0 -58
  177. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +0 -16
  178. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +0 -94
  179. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +0 -21
  180. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +0 -57
  181. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +0 -15
  182. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +0 -118
  183. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +0 -61
  184. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +0 -111
  185. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +0 -28
  186. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +0 -101
  187. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +0 -26
  188. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +0 -333
  189. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +0 -282
  190. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +0 -266
  191. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +0 -103
  192. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +0 -48
  193. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +0 -144
  194. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +0 -73
  195. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +0 -56
  196. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +0 -137
  197. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +0 -180
  198. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +0 -167
  199. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +0 -208
  200. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +0 -6
  201. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +0 -38106
  202. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +0 -31
  203. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +0 -47
  204. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +0 -36
  205. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +0 -1818
  206. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +0 -96
  207. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +0 -3848
  208. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +0 -26
  209. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +0 -153
  210. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +0 -21
  211. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +0 -3169
  212. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +0 -599
  213. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +0 -318
  214. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +0 -100
  215. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +0 -42
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +0 -148
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +0 -127
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +0 -309
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +0 -204
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +0 -51
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +0 -630
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +0 -75
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +0 -103
  224. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +0 -149
  225. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +0 -97
  226. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +0 -192
  227. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +0 -41
  228. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +0 -61
  229. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +0 -370
  230. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +0 -129
  231. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +0 -55
  232. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +0 -336
  233. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +0 -141
  234. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +0 -279
  235. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +0 -193
  236. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +0 -102
  237. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +0 -180
  238. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +0 -211
  239. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +0 -227
  240. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +0 -63
  241. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +0 -30
  242. data/lib/rex/post/meterpreter/object_aliases.rb +0 -83
  243. data/lib/rex/post/meterpreter/packet.rb +0 -688
  244. data/lib/rex/post/meterpreter/packet_dispatcher.rb +0 -431
  245. data/lib/rex/post/meterpreter/packet_parser.rb +0 -94
  246. data/lib/rex/post/meterpreter/packet_response_waiter.rb +0 -83
  247. data/lib/rex/post/meterpreter/ui/console.rb +0 -137
  248. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +0 -62
  249. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +0 -730
  250. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +0 -108
  251. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +0 -241
  252. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +0 -231
  253. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +0 -61
  254. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +0 -98
  255. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +0 -51
  256. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +0 -132
  257. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +0 -187
  258. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +0 -65
  259. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +0 -442
  260. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +0 -298
  261. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +0 -486
  262. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +0 -315
  263. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +0 -157
  264. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +0 -95
  265. data/lib/rex/post/permission.rb +0 -26
  266. data/lib/rex/post/process.rb +0 -57
  267. data/lib/rex/post/thread.rb +0 -57
  268. data/lib/rex/post/ui.rb +0 -52
  269. data/lib/rex/proto.rb +0 -13
  270. data/lib/rex/proto.rb.ts.rb +0 -8
  271. data/lib/rex/proto/dcerpc.rb +0 -6
  272. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -9
  273. data/lib/rex/proto/dcerpc/client.rb +0 -361
  274. data/lib/rex/proto/dcerpc/client.rb.ut.rb +0 -491
  275. data/lib/rex/proto/dcerpc/exceptions.rb +0 -150
  276. data/lib/rex/proto/dcerpc/handle.rb +0 -47
  277. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -85
  278. data/lib/rex/proto/dcerpc/ndr.rb +0 -72
  279. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -41
  280. data/lib/rex/proto/dcerpc/packet.rb +0 -253
  281. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -56
  282. data/lib/rex/proto/dcerpc/response.rb +0 -187
  283. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -15
  284. data/lib/rex/proto/dcerpc/uuid.rb +0 -84
  285. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -46
  286. data/lib/rex/proto/dhcp.rb +0 -7
  287. data/lib/rex/proto/dhcp/constants.rb +0 -33
  288. data/lib/rex/proto/dhcp/server.rb +0 -292
  289. data/lib/rex/proto/drda.rb +0 -5
  290. data/lib/rex/proto/drda.rb.ts.rb +0 -17
  291. data/lib/rex/proto/drda/constants.rb +0 -49
  292. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -23
  293. data/lib/rex/proto/drda/packet.rb +0 -252
  294. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -109
  295. data/lib/rex/proto/drda/utils.rb +0 -123
  296. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -84
  297. data/lib/rex/proto/http.rb +0 -5
  298. data/lib/rex/proto/http.rb.ts.rb +0 -12
  299. data/lib/rex/proto/http/client.rb +0 -821
  300. data/lib/rex/proto/http/client.rb.ut.rb +0 -95
  301. data/lib/rex/proto/http/handler.rb +0 -46
  302. data/lib/rex/proto/http/handler/erb.rb +0 -128
  303. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -21
  304. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -1
  305. data/lib/rex/proto/http/handler/proc.rb +0 -60
  306. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -24
  307. data/lib/rex/proto/http/header.rb +0 -161
  308. data/lib/rex/proto/http/header.rb.ut.rb +0 -46
  309. data/lib/rex/proto/http/packet.rb +0 -407
  310. data/lib/rex/proto/http/packet.rb.ut.rb +0 -165
  311. data/lib/rex/proto/http/request.rb +0 -356
  312. data/lib/rex/proto/http/request.rb.ut.rb +0 -214
  313. data/lib/rex/proto/http/response.rb +0 -90
  314. data/lib/rex/proto/http/response.rb.ut.rb +0 -149
  315. data/lib/rex/proto/http/server.rb +0 -369
  316. data/lib/rex/proto/http/server.rb.ut.rb +0 -79
  317. data/lib/rex/proto/ntlm.rb +0 -7
  318. data/lib/rex/proto/ntlm.rb.ut.rb +0 -177
  319. data/lib/rex/proto/ntlm/base.rb +0 -326
  320. data/lib/rex/proto/ntlm/constants.rb +0 -74
  321. data/lib/rex/proto/ntlm/crypt.rb +0 -415
  322. data/lib/rex/proto/ntlm/exceptions.rb +0 -9
  323. data/lib/rex/proto/ntlm/message.rb +0 -533
  324. data/lib/rex/proto/ntlm/utils.rb +0 -763
  325. data/lib/rex/proto/proxy/socks4a.rb +0 -440
  326. data/lib/rex/proto/rfb.rb +0 -19
  327. data/lib/rex/proto/rfb.rb.ut.rb +0 -37
  328. data/lib/rex/proto/rfb/cipher.rb +0 -84
  329. data/lib/rex/proto/rfb/client.rb +0 -207
  330. data/lib/rex/proto/rfb/constants.rb +0 -52
  331. data/lib/rex/proto/smb.rb +0 -7
  332. data/lib/rex/proto/smb.rb.ts.rb +0 -8
  333. data/lib/rex/proto/smb/client.rb +0 -1952
  334. data/lib/rex/proto/smb/client.rb.ut.rb +0 -223
  335. data/lib/rex/proto/smb/constants.rb +0 -1047
  336. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -18
  337. data/lib/rex/proto/smb/crypt.rb +0 -36
  338. data/lib/rex/proto/smb/evasions.rb +0 -66
  339. data/lib/rex/proto/smb/exceptions.rb +0 -858
  340. data/lib/rex/proto/smb/simpleclient.rb +0 -306
  341. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -128
  342. data/lib/rex/proto/smb/utils.rb +0 -103
  343. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -20
  344. data/lib/rex/proto/sunrpc.rb +0 -1
  345. data/lib/rex/proto/sunrpc/client.rb +0 -195
  346. data/lib/rex/proto/tftp.rb +0 -12
  347. data/lib/rex/proto/tftp/constants.rb +0 -39
  348. data/lib/rex/proto/tftp/server.rb +0 -497
  349. data/lib/rex/proto/tftp/server.rb.ut.rb +0 -28
  350. data/lib/rex/script.rb +0 -42
  351. data/lib/rex/script/base.rb +0 -59
  352. data/lib/rex/script/meterpreter.rb +0 -15
  353. data/lib/rex/script/shell.rb +0 -9
  354. data/lib/rex/service.rb +0 -48
  355. data/lib/rex/service_manager.rb +0 -141
  356. data/lib/rex/service_manager.rb.ut.rb +0 -32
  357. data/lib/rex/services/local_relay.rb +0 -423
  358. data/lib/rex/socket.rb +0 -684
  359. data/lib/rex/socket.rb.ut.rb +0 -107
  360. data/lib/rex/socket/comm.rb +0 -119
  361. data/lib/rex/socket/comm/local.rb +0 -412
  362. data/lib/rex/socket/comm/local.rb.ut.rb +0 -75
  363. data/lib/rex/socket/ip.rb +0 -130
  364. data/lib/rex/socket/parameters.rb +0 -345
  365. data/lib/rex/socket/parameters.rb.ut.rb +0 -51
  366. data/lib/rex/socket/range_walker.rb +0 -346
  367. data/lib/rex/socket/range_walker.rb.ut.rb +0 -55
  368. data/lib/rex/socket/ssl_tcp.rb +0 -184
  369. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -39
  370. data/lib/rex/socket/ssl_tcp_server.rb +0 -122
  371. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -61
  372. data/lib/rex/socket/subnet_walker.rb +0 -75
  373. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -28
  374. data/lib/rex/socket/switch_board.rb +0 -278
  375. data/lib/rex/socket/switch_board.rb.ut.rb +0 -52
  376. data/lib/rex/socket/tcp.rb +0 -76
  377. data/lib/rex/socket/tcp.rb.ut.rb +0 -64
  378. data/lib/rex/socket/tcp_server.rb +0 -67
  379. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -44
  380. data/lib/rex/socket/udp.rb +0 -164
  381. data/lib/rex/socket/udp.rb.ut.rb +0 -44
  382. data/lib/rex/struct2.rb +0 -5
  383. data/lib/rex/struct2/c_struct.rb +0 -181
  384. data/lib/rex/struct2/c_struct_template.rb +0 -39
  385. data/lib/rex/struct2/constant.rb +0 -26
  386. data/lib/rex/struct2/element.rb +0 -44
  387. data/lib/rex/struct2/generic.rb +0 -73
  388. data/lib/rex/struct2/restraint.rb +0 -54
  389. data/lib/rex/struct2/s_string.rb +0 -72
  390. data/lib/rex/struct2/s_struct.rb +0 -111
  391. data/lib/rex/sync.rb +0 -6
  392. data/lib/rex/sync/event.rb +0 -94
  393. data/lib/rex/sync/read_write_lock.rb +0 -176
  394. data/lib/rex/sync/ref.rb +0 -57
  395. data/lib/rex/sync/thread_safe.rb +0 -82
  396. data/lib/rex/test.rb +0 -35
  397. data/lib/rex/text.rb +0 -1149
  398. data/lib/rex/text.rb.ut.rb +0 -190
  399. data/lib/rex/thread_factory.rb +0 -42
  400. data/lib/rex/time.rb +0 -65
  401. data/lib/rex/transformer.rb +0 -115
  402. data/lib/rex/transformer.rb.ut.rb +0 -38
  403. data/lib/rex/ui.rb +0 -21
  404. data/lib/rex/ui/interactive.rb +0 -254
  405. data/lib/rex/ui/output.rb +0 -78
  406. data/lib/rex/ui/output/none.rb +0 -18
  407. data/lib/rex/ui/progress_tracker.rb +0 -96
  408. data/lib/rex/ui/subscriber.rb +0 -149
  409. data/lib/rex/ui/text/color.rb +0 -97
  410. data/lib/rex/ui/text/color.rb.ut.rb +0 -18
  411. data/lib/rex/ui/text/dispatcher_shell.rb +0 -467
  412. data/lib/rex/ui/text/input.rb +0 -117
  413. data/lib/rex/ui/text/input/buffer.rb +0 -75
  414. data/lib/rex/ui/text/input/readline.rb +0 -129
  415. data/lib/rex/ui/text/input/socket.rb +0 -95
  416. data/lib/rex/ui/text/input/stdio.rb +0 -45
  417. data/lib/rex/ui/text/irb_shell.rb +0 -57
  418. data/lib/rex/ui/text/output.rb +0 -80
  419. data/lib/rex/ui/text/output/buffer.rb +0 -61
  420. data/lib/rex/ui/text/output/file.rb +0 -43
  421. data/lib/rex/ui/text/output/socket.rb +0 -43
  422. data/lib/rex/ui/text/output/stdio.rb +0 -40
  423. data/lib/rex/ui/text/progress_tracker.rb +0 -56
  424. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -34
  425. data/lib/rex/ui/text/shell.rb +0 -328
  426. data/lib/rex/ui/text/table.rb +0 -279
  427. data/lib/rex/ui/text/table.rb.ut.rb +0 -55
  428. data/lib/rex/zip.rb +0 -93
  429. data/lib/rex/zip/archive.rb +0 -184
  430. data/lib/rex/zip/blocks.rb +0 -182
  431. data/lib/rex/zip/entry.rb +0 -104
  432. data/lib/rex/zip/samples/comment.rb +0 -32
  433. data/lib/rex/zip/samples/mkwar.rb +0 -138
  434. data/lib/rex/zip/samples/mkzip.rb +0 -19
  435. data/lib/rex/zip/samples/recursive.rb +0 -58
@@ -1,77 +0,0 @@
1
- ##
2
- # $Id: minifat.rb 8457 2010-02-11 18:36:38Z jduck $
3
- # Version: $Revision: 8457 $
4
- ##
5
-
6
- ##
7
- # Rex::OLE - an OLE implementation
8
- # written in 2010 by Joshua J. Drake <jduck [at] metasploit.com>
9
- ##
10
-
11
- module Rex
12
- module OLE
13
-
14
- class MiniFAT < DIFAT
15
-
16
- #
17
- # low-level functions
18
- #
19
- def read
20
- @entries = []
21
-
22
- visited = []
23
- sect = @stg.header._sectMiniFatStart
24
- @stg.header._csectMiniFat.times { |idx|
25
- break if sect == SECT_END
26
-
27
- if (visited.include?(sect))
28
- raise RuntimeError, 'Sector chain loop detected (0x%08x)' % sect
29
- end
30
- visited << sect
31
-
32
- buf = @stg.read_sector(sect, @stg.header.sector_size)
33
- @stg.header.idx_per_sect.times { |idx|
34
- @entries << Util.get32(buf, (idx*4))
35
- }
36
- sect = @stg.next_sector(sect)
37
- }
38
- end
39
-
40
- def allocate_sector
41
- idx = @entries.index(SECT_FREE)
42
-
43
- if (not idx)
44
- # add a sector worth
45
- idx = @entries.length
46
- @stg.header.idx_per_sect.times {
47
- @entries << SECT_FREE
48
- }
49
- end
50
-
51
- # default mini-sectors to end of chain
52
- @entries[idx] = SECT_END
53
- idx
54
- end
55
-
56
- def write
57
- return if (@entries.length < 1)
58
-
59
- mf_start = nil
60
- mfs_count = 0
61
- prev_sect = nil
62
- copy = @entries.dup
63
- while (copy.length > 0)
64
- part = copy.slice!(0, @stg.header.idx_per_sect)
65
- sbuf = Util.pack32array(part)
66
- idx = @stg.write_sector(sbuf, nil, prev_sect)
67
- mfs_count += 1
68
- mf_start ||= idx
69
- end
70
- @stg.header._sectMiniFatStart = mf_start
71
- @stg.header._csectMiniFat = mfs_count
72
- end
73
-
74
- end
75
-
76
- end
77
- end
@@ -1,144 +0,0 @@
1
- ##
2
- # $Id: propset.rb 11444 2010-12-29 17:07:46Z jduck $
3
- # Version: $Revision: 11444 $
4
- ##
5
-
6
- ##
7
- # Rex::OLE - an OLE implementation
8
- # written in 2010 by Joshua J. Drake <jduck [at] metasploit.com>
9
- ##
10
-
11
- module Rex
12
- module OLE
13
-
14
- class Property
15
-
16
- def initialize(id, type, data)
17
- @id = id
18
- @type = type
19
- @data = data
20
- end
21
-
22
- def pack_pio(off = 0)
23
- [ @id, off ].pack('V*')
24
- end
25
-
26
- def pack_data
27
- buf = [ @type ].pack('V')
28
- case @type
29
- when VT_BLOB
30
- buf << [ @data.length ].pack('V')
31
- when VT_CF
32
- buf << [ 4 + @data.length, -1 ].pack('V*')
33
- end
34
- buf << @data
35
- buf
36
- end
37
-
38
- def to_s
39
- "Rex::OLE::Property - to_s unimplemented"
40
- end
41
-
42
- end
43
-
44
- class PropertySet
45
-
46
- def initialize(fmtid = nil)
47
- @fmtid = CLSID.new(fmtid)
48
- @properties = []
49
- end
50
-
51
- def <<(val)
52
- @properties << val
53
- end
54
-
55
- def pack_fno(off = 0)
56
- @fmtid.pack + [ off ].pack('V')
57
- end
58
-
59
- def pack_data
60
- # Pack all the property data
61
- data = []
62
- dlen = 0
63
- @properties.each { |p|
64
- dat = p.pack_data
65
- dlen += dat.length
66
- data << dat
67
- }
68
-
69
- buf = ''
70
- # First the header
71
- off = 8 + (@properties.length * 8)
72
- buf << [ off + dlen, @properties.length ].pack('V*')
73
- # Now, the Property Id and Offset for each
74
- @properties.each_with_index { |p,x|
75
- buf << p.pack_pio(off)
76
- off += data[x].length
77
- }
78
- # Finally, all the data
79
- buf << data.join
80
- buf
81
- end
82
-
83
- def to_s
84
- "Rex::OLE::PropertySet - to_s unimplemented"
85
- end
86
-
87
- end
88
-
89
- class PropertySetStream
90
-
91
- def initialize
92
- @byte_order = 0xfffe
93
- @ole_version = 0
94
- @os_version = 1
95
- @os_platform = 2
96
- @clsid = CLSID.new
97
-
98
- @propsets = []
99
- end
100
-
101
- def <<(ps)
102
- @propsets << ps
103
- end
104
-
105
- def pack
106
- buf = ''
107
-
108
- # First, add the header
109
- buf << [
110
- @byte_order,
111
- @ole_version,
112
- @os_version,
113
- @os_platform
114
- ].pack('vvvv')
115
- buf << @clsid.pack
116
- buf << [@propsets.length].pack('V')
117
-
118
- # Pack all the PropertySet children
119
- data = []
120
- @propsets.each { |p|
121
- data << p.pack_data
122
- }
123
-
124
- # Next, add all the FMTID and Offset headers
125
- off = buf.length + (20 * @propsets.length)
126
- @propsets.each_with_index { |ps,x|
127
- buf << ps.pack_fno(off)
128
- off += data[x].length
129
- }
130
-
131
- # Finally, add all the data
132
- buf << data.join
133
- buf
134
- end
135
-
136
- def to_s
137
- "Rex::OLE::PropertySetStream - to_s unimplemented"
138
- end
139
-
140
- end
141
-
142
-
143
- end
144
- end
@@ -1,27 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- msfbase = __FILE__
4
- while File.symlink?(msfbase)
5
- msfbase = File.expand_path(File.readlink(msfbase), File.dirname(msfbase))
6
- end
7
- path = File.expand_path(File.dirname(msfbase))
8
- path += "/../../../"
9
- $:.unshift(path)
10
-
11
-
12
- require 'rex/ole'
13
-
14
- if (ARGV.length < 1)
15
- $stderr.puts "usage: make_ole <file>"
16
- exit(1)
17
- end
18
-
19
- document = ARGV.shift
20
-
21
- if (stg = Rex::OLE::Storage.new(document, Rex::OLE::STGM_WRITE))
22
- if (stm = stg.create_stream("testing"))
23
- stm << "A" * 1024
24
- stm.close
25
- end
26
- stg.close
27
- end
@@ -1,35 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- msfbase = __FILE__
4
- while File.symlink?(msfbase)
5
- msfbase = File.expand_path(File.readlink(msfbase), File.dirname(msfbase))
6
- end
7
- path = File.expand_path(File.dirname(msfbase))
8
- path += "/../../../"
9
- $:.unshift(path)
10
-
11
-
12
- require 'rex/ole'
13
-
14
- if (ARGV.length < 1)
15
- $stderr.puts "usage: dir <file>"
16
- exit(1)
17
- end
18
-
19
- document = ARGV.shift
20
-
21
-
22
- # recursive printer :)
23
- def show_entries(ent, spaces=0)
24
- spstr = " " * spaces
25
-
26
- puts "%s + #{ent.name}" % spstr
27
- ent.each { |el|
28
- show_entries(el, spaces+2)
29
- }
30
- end
31
-
32
- if (stg = Rex::OLE::Storage.new(document))
33
- show_entries(stg)
34
- stg.close
35
- end
@@ -1,34 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- msfbase = __FILE__
4
- while File.symlink?(msfbase)
5
- msfbase = File.expand_path(File.readlink(msfbase), File.dirname(msfbase))
6
- end
7
- path = File.expand_path(File.dirname(msfbase))
8
- path += "/../../../"
9
- $:.unshift(path)
10
-
11
- require 'rex/ole'
12
-
13
- if (ARGV.length < 2)
14
- $stderr.puts "usage: dump_stream <file> <stream>"
15
- exit(1)
16
- end
17
-
18
- document = ARGV.shift
19
- stream = ARGV.shift
20
-
21
- if (stg = Rex::OLE::Storage.new(document))
22
- if (stm = stg.open_stream(stream))
23
- data = stm.read(stm.length)
24
- data ||= ""
25
- $stderr.puts "Successfully opened the \"%s\" stream (%u bytes)" % [stream, data.length]
26
- $stdout.print data
27
- stm.close
28
- else
29
- $stderr.puts "Unable to open stream: #{stream}"
30
- end
31
- stg.close
32
- else
33
- $stderr.puts "Unable to open storage: #{document}"
34
- end
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- msfbase = __FILE__
4
- while File.symlink?(msfbase)
5
- msfbase = File.expand_path(File.readlink(msfbase), File.dirname(msfbase))
6
- end
7
- path = File.expand_path(File.dirname(msfbase))
8
- path += "/../../../"
9
- $:.unshift(path)
10
-
11
- require 'rex/ole'
12
-
13
- if (ARGV.length < 1)
14
- $stderr.puts "usage: ole_info <file>"
15
- exit(1)
16
- end
17
-
18
- document = ARGV.shift
19
-
20
- if (stg = Rex::OLE::Storage.new(document))
21
- puts stg.inspect
22
- stg.close
23
- end
@@ -1,395 +0,0 @@
1
- ##
2
- # $Id: storage.rb 10394 2010-09-20 08:06:27Z jduck $
3
- # Version: $Revision: 10394 $
4
- ##
5
-
6
- ##
7
- # Rex::OLE - an OLE implementation
8
- # written in 2010 by Joshua J. Drake <jduck [at] metasploit.com>
9
- ##
10
-
11
- module Rex
12
- module OLE
13
-
14
- class Storage
15
-
16
- attr_accessor :header
17
-
18
- def initialize(filename=nil, mode=STGM_READ)
19
- @mode = mode
20
- @modified = nil
21
-
22
- @fd = nil
23
- @filename = nil
24
- @header = Header.new
25
- @difat = DIFAT.new self
26
- @fat = FAT.new self
27
- @minifat = MiniFAT.new self
28
- @directory = Directory.new self
29
- @ministream = Stream.new self
30
-
31
- if (filename)
32
- @filename = filename
33
- open(filename, mode)
34
- return
35
- end
36
- end
37
-
38
-
39
- def each
40
- @directory.each { |el|
41
- yield el
42
- }
43
- end
44
-
45
-
46
- def name
47
- @filename
48
- end
49
-
50
-
51
- def open(filename, mode)
52
- if (mode == STGM_READWRITE)
53
- fmode = 'r+b'
54
- elsif (mode == STGM_WRITE)
55
- fmode = 'w+b'
56
- else
57
- fmode = 'rb'
58
- end
59
-
60
- @fd = File.new(filename, fmode)
61
-
62
- # don't read for new files
63
- if (mode == STGM_WRITE)
64
- # ensure there is a root
65
- write_to_disk
66
- return
67
- end
68
-
69
- # parse the header
70
- @header.read @fd
71
- @difat.read
72
- @fat.read @difat
73
- @minifat.read
74
- @directory.read
75
- # NOTE: we can't use read_stream_data here (must read using regular FAT, regardless of size)
76
- # read data using the root node's start/length
77
- @ministream << read_data(@directory)
78
- end
79
-
80
- def close
81
- if (@modified) and (@mode != STGM_READ)
82
- write_to_disk
83
- end
84
- @fd.close
85
- end
86
-
87
- def inspect
88
- ret = ""
89
- ret << "header = %s\n" % @header.to_s
90
-
91
- ret << "*** %u DIFAT sectors\n" % @difat.length
92
- ret << @difat.to_s << "\n"
93
-
94
- ret << "*** %u FAT sectors\n" % @fat.length
95
- ret << @fat.to_s << "\n"
96
-
97
- ret << "*** %u MiniFAT sectors:\n" % @minifat.length
98
- if (@minifat.length > 0)
99
- ret << @minifat.to_s << "\n"
100
- end
101
-
102
- ret << "*** ministream (%u bytes):\n" % @ministream.length
103
- if (@ministream.length > 0)
104
- ret << @ministream.to_s << "\n"
105
- end
106
-
107
- ret << "*** %u directory entries\n" % @directory.num_entries
108
- ret << @directory.to_s << "\n"
109
- end
110
-
111
-
112
- #
113
- # stream manipulation functions
114
- #
115
- def create_stream(name, mode=STGM_WRITE, parent_stg=nil)
116
- if (stm = open_stream(name, mode, parent_stg))
117
- stm.close
118
- return nil
119
- end
120
-
121
- # eek, don't check the name for now
122
- # if we do, we cant create alot of streams (summary info for example)
123
- =begin
124
- if (not Util.name_is_valid(name))
125
- return nil
126
- end
127
- =end
128
-
129
- stm = Stream.new self
130
- stm.name = name
131
- parent_stg ||= @directory
132
- dlog("Adding stream #{name} to storage #{parent_stg.name}", 'rex', LEV_3)
133
- @directory.link_item(parent_stg, stm)
134
- @modified = true
135
- stm
136
- end
137
-
138
- def open_stream(name, mode=STGM_READ, parent_stg=nil)
139
- parent_stg ||= @directory
140
- stm = parent_stg.find_stream_by_name_and_type(name, STGTY_STREAM)
141
- if (stm)
142
- # TODO: optimize out the need to read all of the data up-front
143
- stm << read_stream_data(stm)
144
- end
145
- stm
146
- end
147
-
148
-
149
- #
150
- # storage manipulation functions
151
- #
152
- def create_storage(name, mode=STGM_READ, parent_stg=nil)
153
- stg = SubStorage.new self
154
- stg.name = name
155
- parent_stg ||= @directory
156
- dlog("Adding storage #{name} to storage #{parent_stg.name}", 'rex', LEV_3)
157
- @directory.link_item(parent_stg, stg)
158
- stg
159
- end
160
-
161
- def open_storage(name, mode=STGM_READ, parent_stg=nil)
162
- @directory.find_stream_by_name_and_type(name, STGTY_STORAGE)
163
- end
164
-
165
-
166
- #
167
- # low-level functions
168
- #
169
- def write_to_disk
170
- # reset FAT/DIFAT
171
- @difat = DIFAT.new self
172
- @fat = FAT.new self
173
-
174
- @header.write @fd
175
- write_user_data
176
-
177
- # NOTE: we call write_stream here since we MUST write this to
178
- # the regular stream (regardless of size)
179
- ms_start = write_stream(@ministream)
180
- @directory.set_ministream_params(ms_start, @ministream.length)
181
-
182
- @minifat.write
183
- @directory.write
184
- @fat.write(@difat)
185
- @difat.write
186
-
187
- # write it again, now that its complete
188
- @header.write @fd
189
- @fd.flush
190
- end
191
-
192
- def write_sector(sbuf, type=nil, prev_sect=nil)
193
- len = sbuf.length
194
- if (len != @header.sector_size)
195
- # pad it if less
196
- if (len < @header.sector_size)
197
- sbuf = sbuf.dup
198
- sbuf << "\x00" * (@header.sector_size - len)
199
- else
200
- raise RuntimeError, 'not sector sized!'
201
- end
202
- end
203
-
204
- # write the data
205
- idx = @fat.allocate_sector(type)
206
- # point previous sector to here
207
- if (prev_sect)
208
- @fat[prev_sect] = idx
209
- end
210
- write_sector_raw(idx, sbuf)
211
- return idx
212
- end
213
-
214
- def write_sector_raw(sect, sbuf)
215
- dlog("Writing sector 0x%02x" % sect, 'rex', LEV_3)
216
- @fd.seek((sect + 1) * @header.sector_size, ::IO::SEEK_SET)
217
- @fd.write(sbuf)
218
- end
219
-
220
-
221
- def write_mini_sector(sbuf, prev_sect=nil)
222
- len = sbuf.length
223
- if (len != @header.mini_sector_size)
224
- if (len < @header.mini_sector_size)
225
- sbuf = sbuf.dup
226
- sbuf << "\x00" * (@header.mini_sector_size - len)
227
- else
228
- raise RuntimeError, 'not mini sector sized!'
229
- end
230
- end
231
-
232
- idx = @minifat.allocate_sector
233
- # point the previous mini sector to here
234
- if (prev_sect)
235
- @minifat[prev_sect] = idx
236
- end
237
- write_mini_sector_raw(idx, sbuf)
238
- idx
239
- end
240
-
241
- def write_mini_sector_raw(sect, sbuf)
242
- dlog("Writing mini sector 0x%02x" % sect, 'rex', LEV_3)
243
- @ministream << sbuf
244
- end
245
-
246
-
247
-
248
- def write_user_data
249
- @directory.each_entry { |stm|
250
- # only regular streams this pass
251
- next if (stm.type != STGTY_STREAM)
252
-
253
- if (stm.length >= @header._ulMiniSectorCutoff)
254
- stm.start_sector = write_stream(stm)
255
- else
256
- # NOTE: stm_start is a minifat value
257
- stm.start_sector = write_mini_stream(stm)
258
- end
259
- }
260
- end
261
-
262
- def write_stream(stm)
263
- dlog("Writing \"%s\" to regular stream" % stm.name, 'rex', LEV_3)
264
- stm_start = nil
265
- prev_sect = nil
266
- stm.seek(0)
267
- while (sbuf = stm.read(@header.sector_size))
268
- sect = write_sector(sbuf, nil, prev_sect)
269
- stm_start ||= sect
270
- prev_sect = sect
271
- end
272
- stm_start
273
- end
274
-
275
- def write_mini_stream(stm)
276
- dlog("Writing \"%s\" to mini stream" % stm.name, 'rex', LEV_3)
277
- prev_sect = nil
278
- stm.seek(0)
279
- while (sbuf = stm.read(@header.mini_sector_size))
280
- sect = write_mini_sector(sbuf, prev_sect)
281
- stm_start ||= sect
282
- prev_sect = sect
283
- end
284
- stm_start
285
- end
286
-
287
-
288
- def read_stream_data(direntry)
289
- if (direntry.length < @header._ulMiniSectorCutoff)
290
- return read_data_mini(direntry)
291
- end
292
-
293
- read_data(direntry)
294
- end
295
-
296
- def read_data(direntry)
297
- ret = ""
298
- visited = []
299
- left = direntry.length
300
- sect = direntry.start_sector
301
- while (sect != SECT_END)
302
- if (visited.include?(sect))
303
- raise RuntimeError, 'Sector chain loop detected (0x%08x)' % sect
304
- end
305
- visited << sect
306
-
307
- # how much to read?
308
- block = @header.sector_size
309
- block = left if (block > left)
310
-
311
- # read it.
312
- dlog("read_data - reading 0x%x bytes" % block, 'rex', LEV_3)
313
- buf = read_sector(sect, block)
314
- ret << buf
315
- left -= buf.length
316
-
317
- # done?
318
- break if (left == 0)
319
-
320
- sect = next_sector(sect)
321
- end
322
- ret
323
- end
324
-
325
- def read_data_mini(direntry)
326
- ret = ""
327
- visited = []
328
- left = direntry.length
329
- sect = direntry.start_sector
330
- while (sect != SECT_END)
331
- if (visited.include?(sect))
332
- raise RuntimeError, 'Sector chain loop detected (0x%08x mini)' % sect
333
- end
334
- visited << sect
335
-
336
- # how much to read?
337
- block = @header.mini_sector_size
338
- block = left if (block > left)
339
-
340
- # read it.
341
- dlog("read_data_mini - reading 0x%x bytes" % block, 'rex', LEV_3)
342
- buf = read_mini_sector(sect, block)
343
- ret << buf
344
- left -= buf.length
345
-
346
- # done?
347
- break if (left == 0)
348
-
349
- sect = next_mini_sector(sect)
350
- end
351
- ret
352
- end
353
-
354
-
355
- def read_sector(sect, len)
356
- off = ((sect + 1) * @header.sector_size)
357
- @fd.seek(off, ::IO::SEEK_SET)
358
- buf = @fd.read(len)
359
- if (not buf)
360
- if (@fd.eof?)
361
- raise RuntimeError, 'EOF while reading sector data (0x%08x)' % sect
362
- else
363
- raise RuntimeError, 'Unknown error while reading sector data (0x%08x)' % sect
364
- end
365
- end
366
- if (buf.length != len)
367
- raise RuntimeError, 'Insufficient data for sector (0x%08x): got %u of %u' % [sect, buf.length, len]
368
- end
369
- buf
370
- end
371
-
372
- def next_sector(sect)
373
- return SECT_END if (sect >= @fat.length)
374
- @fat[sect]
375
- end
376
-
377
-
378
- def read_mini_sector(sect, len)
379
- dlog("Reading mini sector 0x%x" % sect, 'rex', LEV_3)
380
- off = (@header.mini_sector_size * sect)
381
- dlog("Reading from offset 0x%x of ministream" % off, 'rex', LEV_3)
382
- @ministream.seek(off)
383
- data = @ministream.read(len)
384
- data
385
- end
386
-
387
- def next_mini_sector(sect)
388
- return SECT_END if (sect >= @minifat.length)
389
- @minifat[sect]
390
- end
391
-
392
- end
393
-
394
- end
395
- end