librex 0.0.68 → 0.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. checksums.yaml +15 -0
  2. data/README.markdown +1 -1
  3. data/Rakefile +18 -16
  4. data/lib/rex.rb +14 -10
  5. data/lib/rex/LICENSE +2 -2
  6. data/lib/rex/arch.rb +76 -76
  7. data/lib/rex/arch/sparc.rb +57 -58
  8. data/lib/rex/arch/x86.rb +506 -496
  9. data/lib/rex/assembly/nasm.rb +83 -84
  10. data/lib/rex/compat.rb +228 -173
  11. data/lib/rex/constants.rb +47 -37
  12. data/lib/rex/elfparsey.rb +0 -3
  13. data/lib/rex/elfparsey/elf.rb +107 -110
  14. data/lib/rex/elfparsey/elfbase.rb +244 -247
  15. data/lib/rex/elfparsey/exceptions.rb +0 -3
  16. data/lib/rex/elfscan.rb +0 -3
  17. data/lib/rex/elfscan/scanner.rb +184 -166
  18. data/lib/rex/elfscan/search.rb +35 -38
  19. data/lib/rex/encoder/alpha2.rb +1 -2
  20. data/lib/rex/encoder/alpha2/alpha_mixed.rb +52 -53
  21. data/lib/rex/encoder/alpha2/alpha_upper.rb +62 -63
  22. data/lib/rex/encoder/alpha2/generic.rb +77 -78
  23. data/lib/rex/encoder/alpha2/unicode_mixed.rb +101 -97
  24. data/lib/rex/encoder/alpha2/unicode_upper.rb +106 -107
  25. data/lib/rex/encoder/bloxor/bloxor.rb +326 -0
  26. data/lib/rex/encoder/ndr.rb +68 -68
  27. data/lib/rex/encoder/nonalpha.rb +50 -51
  28. data/lib/rex/encoder/nonupper.rb +50 -51
  29. data/lib/rex/encoder/xdr.rb +78 -78
  30. data/lib/rex/encoder/xor.rb +52 -53
  31. data/lib/rex/encoder/xor/dword.rb +1 -2
  32. data/lib/rex/encoder/xor/dword_additive.rb +1 -2
  33. data/lib/rex/encoders/xor_dword.rb +17 -18
  34. data/lib/rex/encoders/xor_dword_additive.rb +35 -36
  35. data/lib/rex/encoding/xor.rb +0 -1
  36. data/lib/rex/encoding/xor/byte.rb +3 -4
  37. data/lib/rex/encoding/xor/dword.rb +3 -4
  38. data/lib/rex/encoding/xor/dword_additive.rb +72 -73
  39. data/lib/rex/encoding/xor/exceptions.rb +2 -3
  40. data/lib/rex/encoding/xor/generic.rb +129 -130
  41. data/lib/rex/encoding/xor/qword.rb +3 -4
  42. data/lib/rex/encoding/xor/word.rb +3 -4
  43. data/lib/rex/exceptions.rb +100 -101
  44. data/lib/rex/exploitation/cmdstager.rb +3 -3
  45. data/lib/rex/exploitation/cmdstager/base.rb +170 -156
  46. data/lib/rex/exploitation/cmdstager/bourne.rb +105 -0
  47. data/lib/rex/exploitation/cmdstager/debug_asm.rb +110 -113
  48. data/lib/rex/exploitation/cmdstager/debug_write.rb +106 -109
  49. data/lib/rex/exploitation/cmdstager/echo.rb +164 -0
  50. data/lib/rex/exploitation/cmdstager/printf.rb +122 -0
  51. data/lib/rex/exploitation/cmdstager/tftp.rb +34 -27
  52. data/lib/rex/exploitation/cmdstager/vbs.rb +95 -98
  53. data/lib/rex/exploitation/egghunter.rb +359 -346
  54. data/lib/rex/exploitation/encryptjs.rb +60 -60
  55. data/lib/rex/exploitation/heaplib.rb +76 -76
  56. data/lib/rex/exploitation/js.rb +6 -0
  57. data/lib/rex/exploitation/js/detect.rb +69 -0
  58. data/lib/rex/exploitation/js/memory.rb +81 -0
  59. data/lib/rex/exploitation/js/network.rb +84 -0
  60. data/lib/rex/exploitation/js/utils.rb +33 -0
  61. data/lib/rex/exploitation/jsobfu.rb +448 -424
  62. data/lib/rex/exploitation/obfuscatejs.rb +301 -301
  63. data/lib/rex/exploitation/omelet.rb +257 -257
  64. data/lib/rex/exploitation/opcodedb.rb +699 -699
  65. data/lib/rex/exploitation/ropdb.rb +189 -0
  66. data/lib/rex/exploitation/seh.rb +68 -68
  67. data/lib/rex/file.rb +96 -49
  68. data/lib/rex/image_source.rb +0 -3
  69. data/lib/rex/image_source/disk.rb +45 -48
  70. data/lib/rex/image_source/image_source.rb +33 -36
  71. data/lib/rex/image_source/memory.rb +17 -20
  72. data/lib/rex/io/bidirectional_pipe.rb +118 -115
  73. data/lib/rex/io/datagram_abstraction.rb +13 -14
  74. data/lib/rex/io/ring_buffer.rb +273 -273
  75. data/lib/rex/io/stream.rb +284 -284
  76. data/lib/rex/io/stream_abstraction.rb +183 -181
  77. data/lib/rex/io/stream_server.rb +193 -193
  78. data/lib/rex/job_container.rb +167 -167
  79. data/lib/rex/logging.rb +0 -1
  80. data/lib/rex/logging/log_dispatcher.rb +113 -113
  81. data/lib/rex/logging/log_sink.rb +17 -17
  82. data/lib/rex/logging/sinks/flatfile.rb +36 -36
  83. data/lib/rex/logging/sinks/stderr.rb +27 -27
  84. data/lib/rex/mac_oui.rb +16572 -16571
  85. data/lib/rex/machparsey.rb +0 -1
  86. data/lib/rex/machparsey/exceptions.rb +0 -1
  87. data/lib/rex/machparsey/mach.rb +160 -161
  88. data/lib/rex/machparsey/machbase.rb +367 -368
  89. data/lib/rex/machscan.rb +0 -1
  90. data/lib/rex/machscan/scanner.rb +175 -176
  91. data/lib/rex/mime/encoding.rb +17 -0
  92. data/lib/rex/mime/header.rb +58 -58
  93. data/lib/rex/mime/message.rb +140 -137
  94. data/lib/rex/mime/part.rb +41 -12
  95. data/lib/rex/nop/opty2.rb +90 -90
  96. data/lib/rex/nop/opty2_tables.rb +273 -273
  97. data/lib/rex/ole.rb +0 -4
  98. data/lib/rex/ole/clsid.rb +26 -30
  99. data/lib/rex/ole/difat.rb +121 -125
  100. data/lib/rex/ole/directory.rb +205 -209
  101. data/lib/rex/ole/direntry.rb +217 -221
  102. data/lib/rex/ole/fat.rb +79 -83
  103. data/lib/rex/ole/header.rb +178 -182
  104. data/lib/rex/ole/minifat.rb +49 -53
  105. data/lib/rex/ole/propset.rb +113 -117
  106. data/lib/rex/ole/samples/create_ole.rb +8 -9
  107. data/lib/rex/ole/samples/dir.rb +10 -11
  108. data/lib/rex/ole/samples/dump_stream.rb +14 -15
  109. data/lib/rex/ole/samples/ole_info.rb +5 -6
  110. data/lib/rex/ole/storage.rb +372 -376
  111. data/lib/rex/ole/stream.rb +33 -37
  112. data/lib/rex/ole/substorage.rb +20 -24
  113. data/lib/rex/ole/util.rb +137 -141
  114. data/lib/rex/parser/acunetix_nokogiri.rb +398 -398
  115. data/lib/rex/parser/apple_backup_manifestdb.rb +116 -116
  116. data/lib/rex/parser/appscan_nokogiri.rb +359 -359
  117. data/lib/rex/parser/arguments.rb +88 -88
  118. data/lib/rex/parser/burp_session_nokogiri.rb +258 -258
  119. data/lib/rex/parser/ci_nokogiri.rb +184 -184
  120. data/lib/rex/parser/foundstone_nokogiri.rb +334 -333
  121. data/lib/rex/parser/fusionvm_nokogiri.rb +94 -94
  122. data/lib/rex/parser/ini.rb +167 -167
  123. data/lib/rex/parser/ip360_aspl_xml.rb +84 -84
  124. data/lib/rex/parser/ip360_xml.rb +77 -77
  125. data/lib/rex/parser/mbsa_nokogiri.rb +224 -224
  126. data/lib/rex/parser/nessus_xml.rb +100 -100
  127. data/lib/rex/parser/netsparker_xml.rb +89 -75
  128. data/lib/rex/parser/nexpose_raw_nokogiri.rb +677 -677
  129. data/lib/rex/parser/nexpose_simple_nokogiri.rb +322 -322
  130. data/lib/rex/parser/nexpose_xml.rb +105 -105
  131. data/lib/rex/parser/nmap_nokogiri.rb +386 -386
  132. data/lib/rex/parser/nmap_xml.rb +116 -116
  133. data/lib/rex/parser/nokogiri_doc_mixin.rb +223 -221
  134. data/lib/rex/parser/openvas_nokogiri.rb +162 -162
  135. data/lib/rex/parser/outpost24_nokogiri.rb +239 -0
  136. data/lib/rex/parser/retina_xml.rb +90 -90
  137. data/lib/rex/parser/unattend.rb +171 -0
  138. data/lib/rex/parser/wapiti_nokogiri.rb +89 -89
  139. data/lib/rex/payloads/win32/common.rb +14 -14
  140. data/lib/rex/payloads/win32/kernel.rb +36 -36
  141. data/lib/rex/payloads/win32/kernel/common.rb +32 -32
  142. data/lib/rex/payloads/win32/kernel/recovery.rb +27 -27
  143. data/lib/rex/payloads/win32/kernel/stager.rb +170 -170
  144. data/lib/rex/peparsey.rb +0 -3
  145. data/lib/rex/peparsey/exceptions.rb +0 -3
  146. data/lib/rex/peparsey/pe.rb +196 -199
  147. data/lib/rex/peparsey/pe_memdump.rb +35 -38
  148. data/lib/rex/peparsey/pebase.rb +1633 -1652
  149. data/lib/rex/peparsey/section.rb +115 -124
  150. data/lib/rex/pescan.rb +0 -3
  151. data/lib/rex/pescan/analyze.rb +351 -351
  152. data/lib/rex/pescan/scanner.rb +182 -182
  153. data/lib/rex/pescan/search.rb +59 -59
  154. data/lib/rex/platforms/windows.rb +37 -37
  155. data/lib/rex/poly.rb +111 -110
  156. data/lib/rex/poly/block.rb +419 -417
  157. data/lib/rex/poly/machine.rb +12 -0
  158. data/lib/rex/poly/machine/machine.rb +829 -0
  159. data/lib/rex/poly/machine/x86.rb +508 -0
  160. data/lib/rex/poly/register.rb +70 -70
  161. data/lib/rex/poly/register/x86.rb +22 -22
  162. data/lib/rex/post.rb +0 -1
  163. data/lib/rex/post/dir.rb +35 -36
  164. data/lib/rex/post/file.rb +140 -141
  165. data/lib/rex/post/file_stat.rb +198 -199
  166. data/lib/rex/post/io.rb +167 -168
  167. data/lib/rex/post/meterpreter.rb +1 -1
  168. data/lib/rex/post/meterpreter/channel.rb +389 -390
  169. data/lib/rex/post/meterpreter/channel_container.rb +33 -34
  170. data/lib/rex/post/meterpreter/channels/pool.rb +129 -130
  171. data/lib/rex/post/meterpreter/channels/pools/file.rb +35 -36
  172. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +72 -73
  173. data/lib/rex/post/meterpreter/channels/stream.rb +62 -63
  174. data/lib/rex/post/meterpreter/client.rb +442 -436
  175. data/lib/rex/post/meterpreter/client_core.rb +326 -310
  176. data/lib/rex/post/meterpreter/dependencies.rb +0 -1
  177. data/lib/rex/post/meterpreter/extension.rb +12 -13
  178. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +35 -36
  179. data/lib/rex/post/meterpreter/extensions/extapi/adsi/adsi.rb +71 -0
  180. data/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb +169 -0
  181. data/lib/rex/post/meterpreter/extensions/extapi/extapi.rb +45 -0
  182. data/lib/rex/post/meterpreter/extensions/extapi/service/service.rb +104 -0
  183. data/lib/rex/post/meterpreter/extensions/extapi/tlv.rb +77 -0
  184. data/lib/rex/post/meterpreter/extensions/extapi/window/window.rb +56 -0
  185. data/lib/rex/post/meterpreter/extensions/extapi/wmi/wmi.rb +75 -0
  186. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +70 -71
  187. data/lib/rex/post/meterpreter/extensions/kiwi/kiwi.rb +361 -0
  188. data/lib/rex/post/meterpreter/extensions/kiwi/tlv.rb +76 -0
  189. data/lib/rex/post/meterpreter/extensions/lanattacks/dhcp/dhcp.rb +78 -0
  190. data/lib/rex/post/meterpreter/extensions/lanattacks/lanattacks.rb +22 -78
  191. data/lib/rex/post/meterpreter/extensions/lanattacks/tftp/tftp.rb +49 -0
  192. data/lib/rex/post/meterpreter/extensions/lanattacks/tlv.rb +4 -4
  193. data/lib/rex/post/meterpreter/extensions/mimikatz/mimikatz.rb +128 -0
  194. data/lib/rex/post/meterpreter/extensions/mimikatz/tlv.rb +16 -0
  195. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +38 -39
  196. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +1 -1
  197. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +95 -96
  198. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +39 -40
  199. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +80 -85
  200. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +94 -95
  201. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +207 -147
  202. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +258 -259
  203. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +366 -301
  204. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +72 -73
  205. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +24 -25
  206. data/lib/rex/post/meterpreter/extensions/stdapi/net/arp.rb +59 -0
  207. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +227 -149
  208. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +107 -108
  209. data/lib/rex/post/meterpreter/extensions/stdapi/net/netstat.rb +97 -0
  210. data/lib/rex/post/meterpreter/extensions/stdapi/net/resolve.rb +106 -0
  211. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +41 -42
  212. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +102 -101
  213. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +151 -152
  214. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +142 -142
  215. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +185 -185
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +38118 -38117
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +7 -7
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +2086 -2084
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_crypt32.rb +15 -15
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +80 -80
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +3835 -3833
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +84 -28
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +151 -137
  224. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +15 -6
  225. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3155 -3155
  226. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_version.rb +41 -0
  227. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wlanapi.rb +70 -70
  228. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wldap32.rb +128 -0
  229. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +596 -596
  230. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +310 -301
  231. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +71 -61
  232. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +100 -100
  233. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb +14 -14
  234. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/mock_magic.rb +488 -488
  235. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +273 -264
  236. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb +5 -5
  237. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +240 -238
  238. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +17 -15
  239. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb +61 -61
  240. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +654 -635
  241. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +49 -49
  242. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +103 -102
  243. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +98 -68
  244. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +165 -166
  245. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +16 -17
  246. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +34 -36
  247. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +363 -364
  248. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +102 -103
  249. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +28 -29
  250. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +303 -304
  251. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +113 -114
  252. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +260 -261
  253. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +165 -166
  254. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +69 -70
  255. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb +160 -161
  256. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +143 -144
  257. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +29 -12
  258. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +230 -231
  259. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +181 -44
  260. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +12 -13
  261. data/lib/rex/post/meterpreter/object_aliases.rb +56 -57
  262. data/lib/rex/post/meterpreter/packet.rb +591 -592
  263. data/lib/rex/post/meterpreter/packet_dispatcher.rb +506 -496
  264. data/lib/rex/post/meterpreter/packet_parser.rb +72 -73
  265. data/lib/rex/post/meterpreter/packet_response_waiter.rb +56 -57
  266. data/lib/rex/post/meterpreter/ui/console.rb +112 -112
  267. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +53 -53
  268. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +911 -854
  269. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +86 -86
  270. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi.rb +65 -0
  271. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/adsi.rb +198 -0
  272. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb +444 -0
  273. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/service.rb +199 -0
  274. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/window.rb +118 -0
  275. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/wmi.rb +108 -0
  276. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +220 -220
  277. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/kiwi.rb +509 -0
  278. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks.rb +60 -0
  279. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/dhcp.rb +254 -0
  280. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/tftp.rb +159 -0
  281. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/mimikatz.rb +182 -0
  282. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +173 -173
  283. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +40 -40
  284. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +75 -77
  285. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +30 -30
  286. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +105 -105
  287. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +182 -182
  288. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +37 -37
  289. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +504 -482
  290. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +401 -330
  291. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +883 -581
  292. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +296 -299
  293. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +320 -153
  294. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +78 -78
  295. data/lib/rex/post/permission.rb +0 -1
  296. data/lib/rex/post/process.rb +39 -40
  297. data/lib/rex/post/thread.rb +41 -42
  298. data/lib/rex/post/ui.rb +35 -36
  299. data/lib/rex/proto/addp.rb +218 -0
  300. data/lib/rex/proto/dcerpc/client.rb +344 -344
  301. data/lib/rex/proto/dcerpc/exceptions.rb +128 -128
  302. data/lib/rex/proto/dcerpc/handle.rb +32 -32
  303. data/lib/rex/proto/dcerpc/ndr.rb +56 -56
  304. data/lib/rex/proto/dcerpc/packet.rb +249 -245
  305. data/lib/rex/proto/dcerpc/response.rb +170 -170
  306. data/lib/rex/proto/dcerpc/uuid.rb +65 -65
  307. data/lib/rex/proto/dcerpc/wdscp.rb +3 -0
  308. data/lib/rex/proto/dcerpc/wdscp/constants.rb +89 -0
  309. data/lib/rex/proto/dcerpc/wdscp/packet.rb +94 -0
  310. data/lib/rex/proto/dhcp.rb +0 -1
  311. data/lib/rex/proto/dhcp/constants.rb +0 -1
  312. data/lib/rex/proto/dhcp/server.rb +303 -304
  313. data/lib/rex/proto/drda/constants.rb +1 -1
  314. data/lib/rex/proto/drda/packet.rb +186 -186
  315. data/lib/rex/proto/drda/utils.rb +104 -104
  316. data/lib/rex/proto/http.rb +1 -0
  317. data/lib/rex/proto/http/client.rb +692 -820
  318. data/lib/rex/proto/http/client_request.rb +472 -0
  319. data/lib/rex/proto/http/handler.rb +25 -25
  320. data/lib/rex/proto/http/handler/erb.rb +104 -104
  321. data/lib/rex/proto/http/handler/proc.rb +37 -37
  322. data/lib/rex/proto/http/header.rb +149 -149
  323. data/lib/rex/proto/http/packet.rb +388 -382
  324. data/lib/rex/proto/http/request.rb +332 -335
  325. data/lib/rex/proto/http/response.rb +132 -72
  326. data/lib/rex/proto/http/server.rb +348 -338
  327. data/lib/rex/proto/iax2/call.rb +310 -310
  328. data/lib/rex/proto/iax2/client.rb +197 -197
  329. data/lib/rex/proto/iax2/codecs/alaw.rb +4 -4
  330. data/lib/rex/proto/iax2/codecs/mulaw.rb +4 -4
  331. data/lib/rex/proto/ipmi.rb +57 -0
  332. data/lib/rex/proto/ipmi/channel_auth_reply.rb +88 -0
  333. data/lib/rex/proto/ipmi/open_session_reply.rb +35 -0
  334. data/lib/rex/proto/ipmi/rakp2.rb +35 -0
  335. data/lib/rex/proto/ipmi/utils.rb +125 -0
  336. data/lib/rex/proto/natpmp.rb +1 -5
  337. data/lib/rex/proto/natpmp/constants.rb +4 -4
  338. data/lib/rex/proto/natpmp/packet.rb +25 -25
  339. data/lib/rex/proto/ntlm/base.rb +271 -271
  340. data/lib/rex/proto/ntlm/constants.rb +61 -61
  341. data/lib/rex/proto/ntlm/crypt.rb +348 -352
  342. data/lib/rex/proto/ntlm/exceptions.rb +3 -3
  343. data/lib/rex/proto/ntlm/message.rb +468 -471
  344. data/lib/rex/proto/ntlm/utils.rb +746 -746
  345. data/lib/rex/proto/pjl.rb +30 -0
  346. data/lib/rex/proto/pjl/client.rb +162 -0
  347. data/lib/rex/proto/proxy/socks4a.rb +440 -440
  348. data/lib/rex/proto/rfb.rb +1 -8
  349. data/lib/rex/proto/rfb/cipher.rb +46 -49
  350. data/lib/rex/proto/rfb/client.rb +179 -182
  351. data/lib/rex/proto/rfb/constants.rb +18 -21
  352. data/lib/rex/proto/smb/client.rb +1954 -1843
  353. data/lib/rex/proto/smb/constants.rb +533 -516
  354. data/lib/rex/proto/smb/crypt.rb +21 -21
  355. data/lib/rex/proto/smb/evasions.rb +43 -43
  356. data/lib/rex/proto/smb/exceptions.rb +791 -791
  357. data/lib/rex/proto/smb/simpleclient.rb +142 -286
  358. data/lib/rex/proto/smb/simpleclient/open_file.rb +106 -0
  359. data/lib/rex/proto/smb/simpleclient/open_pipe.rb +57 -0
  360. data/lib/rex/proto/smb/utils.rb +81 -81
  361. data/lib/rex/proto/sunrpc/client.rb +158 -158
  362. data/lib/rex/proto/tftp.rb +0 -1
  363. data/lib/rex/proto/tftp/client.rb +289 -289
  364. data/lib/rex/proto/tftp/constants.rb +9 -10
  365. data/lib/rex/proto/tftp/server.rb +466 -467
  366. data/lib/rex/random_identifier_generator.rb +176 -0
  367. data/lib/rex/registry.rb +1 -1
  368. data/lib/rex/registry/hive.rb +88 -88
  369. data/lib/rex/registry/lfkey.rb +25 -25
  370. data/lib/rex/registry/nodekey.rb +30 -30
  371. data/lib/rex/registry/regf.rb +10 -10
  372. data/lib/rex/registry/valuekey.rb +43 -43
  373. data/lib/rex/registry/valuelist.rb +13 -13
  374. data/lib/rex/ropbuilder/rop.rb +254 -253
  375. data/lib/rex/script.rb +21 -22
  376. data/lib/rex/script/base.rb +51 -50
  377. data/lib/rex/script/meterpreter.rb +2 -2
  378. data/lib/rex/service.rb +24 -24
  379. data/lib/rex/service_manager.rb +132 -132
  380. data/lib/rex/services/local_relay.rb +398 -398
  381. data/lib/rex/socket.rb +758 -763
  382. data/lib/rex/socket/comm.rb +95 -95
  383. data/lib/rex/socket/comm/local.rb +507 -440
  384. data/lib/rex/socket/ip.rb +118 -118
  385. data/lib/rex/socket/parameters.rb +351 -350
  386. data/lib/rex/socket/range_walker.rb +445 -368
  387. data/lib/rex/socket/ssl_tcp.rb +323 -317
  388. data/lib/rex/socket/ssl_tcp_server.rb +173 -158
  389. data/lib/rex/socket/subnet_walker.rb +48 -48
  390. data/lib/rex/socket/switch_board.rb +259 -259
  391. data/lib/rex/socket/tcp.rb +58 -56
  392. data/lib/rex/socket/tcp_server.rb +42 -42
  393. data/lib/rex/socket/udp.rb +152 -152
  394. data/lib/rex/sslscan/result.rb +200 -0
  395. data/lib/rex/sslscan/scanner.rb +205 -0
  396. data/lib/rex/struct2.rb +0 -1
  397. data/lib/rex/struct2/c_struct.rb +162 -163
  398. data/lib/rex/struct2/c_struct_template.rb +21 -22
  399. data/lib/rex/struct2/constant.rb +6 -7
  400. data/lib/rex/struct2/element.rb +30 -31
  401. data/lib/rex/struct2/generic.rb +60 -61
  402. data/lib/rex/struct2/restraint.rb +40 -41
  403. data/lib/rex/struct2/s_string.rb +60 -61
  404. data/lib/rex/struct2/s_struct.rb +97 -98
  405. data/lib/rex/sync.rb +0 -1
  406. data/lib/rex/sync/event.rb +62 -72
  407. data/lib/rex/sync/read_write_lock.rb +149 -149
  408. data/lib/rex/sync/ref.rb +42 -42
  409. data/lib/rex/sync/thread_safe.rb +59 -59
  410. data/lib/rex/text.rb +1803 -1315
  411. data/lib/rex/thread_factory.rb +25 -25
  412. data/lib/rex/time.rb +44 -44
  413. data/lib/rex/transformer.rb +91 -91
  414. data/lib/rex/ui/interactive.rb +265 -265
  415. data/lib/rex/ui/output.rb +66 -60
  416. data/lib/rex/ui/progress_tracker.rb +79 -79
  417. data/lib/rex/ui/subscriber.rb +144 -134
  418. data/lib/rex/ui/text/color.rb +76 -76
  419. data/lib/rex/ui/text/dispatcher_shell.rb +512 -505
  420. data/lib/rex/ui/text/input.rb +96 -96
  421. data/lib/rex/ui/text/input/buffer.rb +58 -58
  422. data/lib/rex/ui/text/input/readline.rb +114 -114
  423. data/lib/rex/ui/text/input/socket.rb +77 -77
  424. data/lib/rex/ui/text/input/stdio.rb +24 -24
  425. data/lib/rex/ui/text/irb_shell.rb +45 -41
  426. data/lib/rex/ui/text/output.rb +64 -60
  427. data/lib/rex/ui/text/output/buffer.rb +42 -42
  428. data/lib/rex/ui/text/output/buffer/stdout.rb +25 -0
  429. data/lib/rex/ui/text/output/file.rb +24 -24
  430. data/lib/rex/ui/text/output/socket.rb +24 -24
  431. data/lib/rex/ui/text/output/stdio.rb +29 -29
  432. data/lib/rex/ui/text/output/tee.rb +36 -36
  433. data/lib/rex/ui/text/progress_tracker.rb +37 -37
  434. data/lib/rex/ui/text/shell.rb +371 -361
  435. data/lib/rex/ui/text/table.rb +320 -284
  436. data/lib/rex/zip.rb +0 -1
  437. data/lib/rex/zip/archive.rb +115 -94
  438. data/lib/rex/zip/blocks.rb +101 -100
  439. data/lib/rex/zip/entry.rb +108 -99
  440. data/lib/rex/zip/jar.rb +261 -206
  441. data/lib/rex/zip/samples/comment.rb +1 -2
  442. data/lib/rex/zip/samples/mkwar.rb +12 -13
  443. data/lib/rex/zip/samples/mkzip.rb +1 -2
  444. data/lib/rex/zip/samples/recursive.rb +29 -30
  445. metadata +424 -446
  446. data/lib/rex/arch/sparc.rb.ut.rb +0 -19
  447. data/lib/rex/arch/x86.rb.ut.rb +0 -94
  448. data/lib/rex/assembly/nasm.rb.ut.rb +0 -23
  449. data/lib/rex/encoder/ndr.rb.ut.rb +0 -45
  450. data/lib/rex/encoder/xdr.rb.ut.rb +0 -30
  451. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -13
  452. data/lib/rex/encoding/xor.rb.ts.rb +0 -15
  453. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -22
  454. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -16
  455. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -16
  456. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -121
  457. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -14
  458. data/lib/rex/exceptions.rb.ut.rb +0 -45
  459. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -28
  460. data/lib/rex/exploitation/javascriptosdetect.js +0 -1014
  461. data/lib/rex/exploitation/javascriptosdetect.rb +0 -43
  462. data/lib/rex/exploitation/omelet.rb.ut.rb +0 -27
  463. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -280
  464. data/lib/rex/exploitation/seh.rb.ut.rb +0 -20
  465. data/lib/rex/file.rb.ut.rb +0 -17
  466. data/lib/rex/io/ring_buffer.rb.ut.rb +0 -135
  467. data/lib/rex/nop/opty2.rb.ut.rb +0 -24
  468. data/lib/rex/parser/arguments.rb.ut.rb +0 -68
  469. data/lib/rex/parser/ini.rb.ut.rb +0 -30
  470. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +0 -18
  471. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +0 -39
  472. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +0 -37
  473. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb.ut.rb +0 -52
  474. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +0 -43
  475. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +0 -128
  476. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb.ut.rb +0 -64
  477. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb.ut.rb +0 -29
  478. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb.ut.rb +0 -155
  479. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb.ut.rb +0 -128
  480. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +0 -124
  481. data/lib/rex/proto.rb.ts.rb +0 -9
  482. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -10
  483. data/lib/rex/proto/dcerpc/client.rb.ut.rb +0 -492
  484. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -86
  485. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -42
  486. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -57
  487. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -16
  488. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -47
  489. data/lib/rex/proto/drda.rb.ts.rb +0 -18
  490. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -24
  491. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -110
  492. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -85
  493. data/lib/rex/proto/http.rb.ts.rb +0 -13
  494. data/lib/rex/proto/http/client.rb.ut.rb +0 -96
  495. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -22
  496. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -1
  497. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -25
  498. data/lib/rex/proto/http/header.rb.ut.rb +0 -47
  499. data/lib/rex/proto/http/packet.rb.ut.rb +0 -166
  500. data/lib/rex/proto/http/request.rb.ut.rb +0 -215
  501. data/lib/rex/proto/http/response.rb.ut.rb +0 -150
  502. data/lib/rex/proto/http/server.rb.ut.rb +0 -80
  503. data/lib/rex/proto/ntlm.rb.ut.rb +0 -181
  504. data/lib/rex/proto/rfb.rb.ut.rb +0 -40
  505. data/lib/rex/proto/smb.rb.ts.rb +0 -9
  506. data/lib/rex/proto/smb/client.rb.ut.rb +0 -224
  507. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -19
  508. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -129
  509. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -21
  510. data/lib/rex/proto/tftp/server.rb.ut.rb +0 -29
  511. data/lib/rex/service_manager.rb.ut.rb +0 -33
  512. data/lib/rex/socket.rb.ut.rb +0 -108
  513. data/lib/rex/socket/comm/local.rb.ut.rb +0 -76
  514. data/lib/rex/socket/parameters.rb.ut.rb +0 -52
  515. data/lib/rex/socket/range_walker.rb.ut.rb +0 -56
  516. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -40
  517. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -62
  518. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -29
  519. data/lib/rex/socket/switch_board.rb.ut.rb +0 -53
  520. data/lib/rex/socket/tcp.rb.ut.rb +0 -65
  521. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -45
  522. data/lib/rex/socket/udp.rb.ut.rb +0 -45
  523. data/lib/rex/test.rb +0 -36
  524. data/lib/rex/text.rb.ut.rb +0 -193
  525. data/lib/rex/transformer.rb.ut.rb +0 -39
  526. data/lib/rex/ui/text/color.rb.ut.rb +0 -19
  527. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -35
  528. data/lib/rex/ui/text/table.rb.ut.rb +0 -56
@@ -34,67 +34,77 @@ module Railgun
34
34
  # represents one function, e.g. MessageBoxW
35
35
  #
36
36
  class DLLFunction
37
- @@allowed_datatypes = {
38
- "VOID" => ["return"],
39
- "BOOL" => ["in", "return"],
40
- "DWORD" => ["in", "return"],
41
- "WORD" => ["in", "return"],
42
- "BYTE" => ["in", "return"],
43
- "LPVOID" => ["in", "return"], # sf: for specifying a memory address (e.g. VirtualAlloc/HeapAlloc/...) where we dont want ot back it up with actuall mem ala PBLOB
44
- "HANDLE" => ["in", "return"],
45
- "PDWORD" => ["in", "out", "inout"], # todo: support for functions that return pointers to strings
46
- "PWCHAR" => ["in", "out", "inout"],
47
- "PCHAR" => ["in", "out", "inout"],
48
- "PBLOB" => ["in", "out", "inout"],
49
- }.freeze
50
-
51
- @@directions = ["in", "out", "inout", "return"].freeze
52
-
53
- attr_reader :return_type, :params, :windows_name
54
-
55
- def initialize(return_type, params, windows_name)
56
- check_return_type(return_type) # we do error checking as early as possible so the library is easier to use
57
- check_params(params)
58
- @return_type = return_type
59
- @params = params
60
- @windows_name = windows_name
61
- end
62
-
63
- private
64
-
65
- def check_type_exists (type)
66
- if not @@allowed_datatypes.has_key?(type)
67
- raise ArgumentError, "Type unknown: #{type}. Allowed types: #{PP.pp(@@allowed_datatypes.keys, "")}"
68
- end
69
- end
70
-
71
- def check_return_type (type)
72
- check_type_exists(type)
73
- if not @@allowed_datatypes[type].include?("return")
74
- raise ArgumentError, "#{type} is not allowed as a return type"
75
- end
76
- end
77
-
78
- def check_params (params)
79
- params.each do |param|
80
- raise ArgumentError, "each param must be descriped by a three-tuple [type,name,direction]" unless param.length == 3
81
- type = param[0]
82
- direction = param[2]
83
-
84
- # Assert a valid type
85
- check_type_exists(type)
86
-
87
- # Only our set of predefined directions are valid
88
- unless @@directions.include?(direction)
89
- raise ArgumentError, "invalid direction: #{direction}"
90
- end
91
-
92
- # 'return' is not a valid direction in this context
93
- unless direction != "return"
94
- raise "direction 'return' is only for the return value of the function."
95
- end
96
- end
97
- end
37
+ @@allowed_datatypes = {
38
+ "VOID" => ["return"],
39
+ "BOOL" => ["in", "return"],
40
+ "DWORD" => ["in", "return"],
41
+ "WORD" => ["in", "return"],
42
+ "BYTE" => ["in", "return"],
43
+ "LPVOID" => ["in", "return"], # sf: for specifying a memory address (e.g. VirtualAlloc/HeapAlloc/...) where we dont want ot back it up with actuall mem ala PBLOB
44
+ "HANDLE" => ["in", "return"],
45
+ "PDWORD" => ["in", "out", "inout"], # todo: support for functions that return pointers to strings
46
+ "PWCHAR" => ["in", "out", "inout"],
47
+ "PCHAR" => ["in", "out", "inout"],
48
+ "PBLOB" => ["in", "out", "inout"],
49
+ }.freeze
50
+
51
+ @@allowed_convs = ["stdcall", "cdecl"]
52
+
53
+ @@directions = ["in", "out", "inout", "return"].freeze
54
+
55
+ attr_reader :return_type, :params, :windows_name, :calling_conv
56
+
57
+ def initialize(return_type, params, windows_name, calling_conv="stdcall")
58
+ check_return_type(return_type) # we do error checking as early as possible so the library is easier to use
59
+ check_params(params)
60
+ check_calling_conv(calling_conv)
61
+ @return_type = return_type
62
+ @params = params
63
+ @windows_name = windows_name
64
+ @calling_conv = calling_conv
65
+ end
66
+
67
+ private
68
+
69
+ def check_calling_conv(conv)
70
+ if not @@allowed_convs.include?(conv)
71
+ raise ArgumentError, "Calling convention unknown: #{conv}."
72
+ end
73
+ end
74
+
75
+ def check_type_exists (type)
76
+ if not @@allowed_datatypes.has_key?(type)
77
+ raise ArgumentError, "Type unknown: #{type}. Allowed types: #{PP.pp(@@allowed_datatypes.keys, "")}"
78
+ end
79
+ end
80
+
81
+ def check_return_type (type)
82
+ check_type_exists(type)
83
+ if not @@allowed_datatypes[type].include?("return")
84
+ raise ArgumentError, "#{type} is not allowed as a return type"
85
+ end
86
+ end
87
+
88
+ def check_params (params)
89
+ params.each do |param|
90
+ raise ArgumentError, "each param must be descriped by a three-tuple [type,name,direction]" unless param.length == 3
91
+ type = param[0]
92
+ direction = param[2]
93
+
94
+ # Assert a valid type
95
+ check_type_exists(type)
96
+
97
+ # Only our set of predefined directions are valid
98
+ unless @@directions.include?(direction)
99
+ raise ArgumentError, "invalid direction: #{direction}"
100
+ end
101
+
102
+ # 'return' is not a valid direction in this context
103
+ unless direction != "return"
104
+ raise "direction 'return' is only for the return value of the function."
105
+ end
106
+ end
107
+ end
98
108
 
99
109
  end
100
110
 
@@ -36,113 +36,113 @@ module Railgun
36
36
  #
37
37
  module DLLHelper
38
38
 
39
- # converts ruby string to zero-terminated ASCII string
40
- def str_to_ascii_z(str)
41
- return str+"\x00"
42
- end
39
+ # converts ruby string to zero-terminated ASCII string
40
+ def str_to_ascii_z(str)
41
+ return str+"\x00"
42
+ end
43
43
 
44
- # converts 0-terminated ASCII string to ruby string
45
- def asciiz_to_str(asciiz)
46
- zero_byte_idx = asciiz.index("\x00")
47
- if zero_byte_idx != nil
48
- return asciiz[0, zero_byte_idx]
49
- else
50
- return asciiz
51
- end
52
- end
44
+ # converts 0-terminated ASCII string to ruby string
45
+ def asciiz_to_str(asciiz)
46
+ zero_byte_idx = asciiz.index("\x00")
47
+ if zero_byte_idx != nil
48
+ return asciiz[0, zero_byte_idx]
49
+ else
50
+ return asciiz
51
+ end
52
+ end
53
53
 
54
- # converts ruby string to zero-terminated WCHAR string
55
- def str_to_uni_z(str)
56
- enc = str.unpack("C*").pack("v*")
57
- enc += "\x00\x00"
58
- return enc
59
- end
54
+ # converts ruby string to zero-terminated WCHAR string
55
+ def str_to_uni_z(str)
56
+ enc = str.unpack("C*").pack("v*")
57
+ enc += "\x00\x00"
58
+ return enc
59
+ end
60
60
 
61
- # converts 0-terminated UTF16 to ruby string
62
- def uniz_to_str(uniz)
63
- uniz.unpack("v*").pack("C*").unpack("A*")[0]
64
- end
61
+ # converts 0-terminated UTF16 to ruby string
62
+ def uniz_to_str(uniz)
63
+ uniz.unpack("v*").pack("C*").unpack("A*")[0]
64
+ end
65
65
 
66
- # parses a number param and returns the value
67
- # raises an exception if the param cannot be converted to a number
68
- # examples:
69
- # nil => 0
70
- # 3 => 3
71
- # "MB_OK" => 0
72
- # "SOME_CONSTANT | OTHER_CONSTANT" => 17
73
- # "tuna" => !!!!!!!!!!Exception
74
- #
75
- # Parameter "win_consts" is a WinConstantManager
76
- def param_to_number(v, win_consts = @win_consts)
77
- if v.class == NilClass then
78
- return 0
79
- elsif v.class == Fixnum then
80
- return v # ok, it's already a number
81
- elsif v.class == Bignum then
82
- return v # ok, it's already a number
83
- elsif v.class == String then
84
- dw = win_consts.parse(v) # might raise an exception
85
- if dw != nil
86
- return dw
87
- else
88
- raise ArgumentError, "Param #{v} (class #{v.class}) cannot be converted to a number. It's a string but matches no constants I know."
89
- end
90
- else
91
- raise "Param #{v} (class #{v.class}) should be a number but isn't"
92
- end
93
- end
66
+ # parses a number param and returns the value
67
+ # raises an exception if the param cannot be converted to a number
68
+ # examples:
69
+ # nil => 0
70
+ # 3 => 3
71
+ # "MB_OK" => 0
72
+ # "SOME_CONSTANT | OTHER_CONSTANT" => 17
73
+ # "tuna" => !!!!!!!!!!Exception
74
+ #
75
+ # Parameter "win_consts" is a WinConstantManager
76
+ def param_to_number(v, win_consts = @win_consts)
77
+ if v.class == NilClass then
78
+ return 0
79
+ elsif v.class == Fixnum then
80
+ return v # ok, it's already a number
81
+ elsif v.class == Bignum then
82
+ return v # ok, it's already a number
83
+ elsif v.class == String then
84
+ dw = win_consts.parse(v) # might raise an exception
85
+ if dw != nil
86
+ return dw
87
+ else
88
+ raise ArgumentError, "Param #{v} (class #{v.class}) cannot be converted to a number. It's a string but matches no constants I know."
89
+ end
90
+ else
91
+ raise "Param #{v} (class #{v.class}) should be a number but isn't"
92
+ end
93
+ end
94
94
 
95
- # assembles the buffers "in" and "inout"
96
- def assemble_buffer(direction, function, args)
97
- layout = {} # paramName => BufferItem
98
- blob = ""
99
- #puts " building buffer: #{direction}"
100
- function.params.each_with_index do |param_desc, param_idx|
101
- #puts " processing #{param_desc[0]} #{param_desc[1]} #{param_desc[2]}"
102
- # we care only about inout buffers
103
- if param_desc[2] == direction
104
- buffer = nil
105
- # Special case:
106
- # The user can choose to supply a Null pointer instead of a buffer
107
- # in this case we don't need space in any heap buffer
108
- if param_desc[0][0,1] == 'P' # type is a pointer
109
- if args[param_idx] == nil
110
- next
111
- end
112
- end
95
+ # assembles the buffers "in" and "inout"
96
+ def assemble_buffer(direction, function, args)
97
+ layout = {} # paramName => BufferItem
98
+ blob = ""
99
+ #puts " building buffer: #{direction}"
100
+ function.params.each_with_index do |param_desc, param_idx|
101
+ #puts " processing #{param_desc[0]} #{param_desc[1]} #{param_desc[2]}"
102
+ # we care only about inout buffers
103
+ if param_desc[2] == direction
104
+ buffer = nil
105
+ # Special case:
106
+ # The user can choose to supply a Null pointer instead of a buffer
107
+ # in this case we don't need space in any heap buffer
108
+ if param_desc[0][0,1] == 'P' # type is a pointer
109
+ if args[param_idx] == nil
110
+ next
111
+ end
112
+ end
113
113
 
114
- case param_desc[0] # required argument type
115
- when "PDWORD"
116
- dw = param_to_number(args[param_idx])
117
- buffer = [dw].pack('V')
118
- when "PWCHAR"
119
- raise "param #{param_desc[1]}: string expected" unless args[param_idx].class == String
120
- buffer = str_to_uni_z(args[param_idx])
121
- when "PCHAR"
122
- raise "param #{param_desc[1]}: string expected" unless args[param_idx].class == String
123
- buffer = str_to_ascii_z(args[param_idx])
124
- when "PBLOB"
125
- raise "param #{param_desc[1]}: please supply your BLOB as string!" unless args[param_idx].class == String
126
- buffer = args[param_idx]
127
- # other types (non-pointers) don't reference buffers
128
- # and don't need any treatment here
129
- end
114
+ case param_desc[0] # required argument type
115
+ when "PDWORD"
116
+ dw = param_to_number(args[param_idx])
117
+ buffer = [dw].pack('V')
118
+ when "PWCHAR"
119
+ raise "param #{param_desc[1]}: string expected" unless args[param_idx].class == String
120
+ buffer = str_to_uni_z(args[param_idx])
121
+ when "PCHAR"
122
+ raise "param #{param_desc[1]}: string expected" unless args[param_idx].class == String
123
+ buffer = str_to_ascii_z(args[param_idx])
124
+ when "PBLOB"
125
+ raise "param #{param_desc[1]}: please supply your BLOB as string!" unless args[param_idx].class == String
126
+ buffer = args[param_idx]
127
+ # other types (non-pointers) don't reference buffers
128
+ # and don't need any treatment here
129
+ end
130
130
 
131
- if buffer != nil
132
- #puts " adding #{buffer.length} bytes to heap blob"
133
- layout[param_desc[1]] = BufferItem.new(param_idx, blob.length, buffer.length, param_desc[0])
134
- blob += buffer
135
- # sf: force 8 byte alignment to satisfy x64, wont matter on x86.
136
- while( blob.length % 8 != 0 )
137
- blob += "\x00"
138
- end
139
- #puts " heap blob size now #{blob.length}"
140
- end
141
- end
142
- end
143
- #puts " built buffer: #{direction}"
144
- return [layout, blob]
145
- end
131
+ if buffer != nil
132
+ #puts " adding #{buffer.length} bytes to heap blob"
133
+ layout[param_desc[1]] = BufferItem.new(param_idx, blob.length, buffer.length, param_desc[0])
134
+ blob += buffer
135
+ # sf: force 8 byte alignment to satisfy x64, wont matter on x86.
136
+ while( blob.length % 8 != 0 )
137
+ blob += "\x00"
138
+ end
139
+ #puts " heap blob size now #{blob.length}"
140
+ end
141
+ end
142
+ end
143
+ #puts " built buffer: #{direction}"
144
+ return [layout, blob]
145
+ end
146
146
 
147
147
  end
148
148
 
@@ -6,22 +6,22 @@ module Extensions
6
6
  module Stdapi
7
7
  module Railgun
8
8
  class DLLWrapper
9
- attr_reader :_client, :_dll
9
+ attr_reader :_client, :_dll
10
10
 
11
- def initialize(dll, client)
12
- @_dll = dll
13
- @_client = client
14
- end
11
+ def initialize(dll, client)
12
+ @_dll = dll
13
+ @_client = client
14
+ end
15
15
 
16
- # For backwards compatability. People check if functions are added this way
17
- # XXX: Depricate this
18
- def functions
19
- # warn 'Depricated.'
20
- _dll.functions
21
- end
16
+ # For backwards compatability. People check if functions are added this way
17
+ # XXX: Depricate this
18
+ def functions
19
+ # warn 'Depricated.'
20
+ _dll.functions
21
+ end
22
22
 
23
- def method_missing(sym, *args)
24
- _dll.call_function(sym, args, _client)
25
- end
23
+ def method_missing(sym, *args)
24
+ _dll.call_function(sym, args, _client)
25
+ end
26
26
  end
27
27
  end; end; end; end; end; end
@@ -14,501 +14,501 @@ require 'rex/post/meterpreter/extensions/stdapi/railgun/tlv'
14
14
  #
15
15
  module MockMagic
16
16
 
17
- TLV_TYPE_NAMES = {
18
- TLV_TYPE_RAILGUN_SIZE_OUT => "TLV_TYPE_RAILGUN_SIZE_OUT",
19
- TLV_TYPE_RAILGUN_STACKBLOB => "TLV_TYPE_RAILGUN_STACKBLOB",
20
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "TLV_TYPE_RAILGUN_BUFFERBLOB_IN",
21
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT",
22
- TLV_TYPE_RAILGUN_DLLNAME => "TLV_TYPE_RAILGUN_DLLNAME",
23
- TLV_TYPE_RAILGUN_FUNCNAME => "TLV_TYPE_RAILGUN_FUNCNAME",
24
- }
17
+ TLV_TYPE_NAMES = {
18
+ TLV_TYPE_RAILGUN_SIZE_OUT => "TLV_TYPE_RAILGUN_SIZE_OUT",
19
+ TLV_TYPE_RAILGUN_STACKBLOB => "TLV_TYPE_RAILGUN_STACKBLOB",
20
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "TLV_TYPE_RAILGUN_BUFFERBLOB_IN",
21
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT",
22
+ TLV_TYPE_RAILGUN_DLLNAME => "TLV_TYPE_RAILGUN_DLLNAME",
23
+ TLV_TYPE_RAILGUN_FUNCNAME => "TLV_TYPE_RAILGUN_FUNCNAME",
24
+ }
25
25
 
26
- class MockRailgunClient
27
- attr_reader :platform, :check_request, :response_tlvs
26
+ class MockRailgunClient
27
+ attr_reader :platform, :check_request, :response_tlvs
28
28
 
29
- def initialize(platform, response_tlvs, check_request)
30
- @check_request = check_request
31
- @response_tlvs = response_tlvs
32
- @platform = platform
33
- end
29
+ def initialize(platform, response_tlvs, check_request)
30
+ @check_request = check_request
31
+ @response_tlvs = response_tlvs
32
+ @platform = platform
33
+ end
34
34
 
35
- def send_request(request)
36
- check_request.call(request)
35
+ def send_request(request)
36
+ check_request.call(request)
37
37
 
38
- (Class.new do
39
- def initialize(response_tlvs)
40
- @response_tlvs = response_tlvs
41
- end
42
- def get_tlv_value(type)
43
- return @response_tlvs[type]
44
- end
45
- end).new(@response_tlvs)
46
- end
47
- end
38
+ (Class.new do
39
+ def initialize(response_tlvs)
40
+ @response_tlvs = response_tlvs
41
+ end
42
+ def get_tlv_value(type)
43
+ return @response_tlvs[type]
44
+ end
45
+ end).new(@response_tlvs)
46
+ end
47
+ end
48
48
 
49
- def make_mock_client(platform = "x86/win32", target_request_tlvs = [], response_tlvs = [])
50
- check_request = lambda do |request|
51
- target_request_tlvs.each_pair do |type, target_value|
52
- assert_equal(target_value, request.get_tlv_value(type),
53
- "process_function_call should send to client appropriate #{TLV_TYPE_NAMES[type]}")
54
- end
55
- end
49
+ def make_mock_client(platform = "x86/win32", target_request_tlvs = [], response_tlvs = [])
50
+ check_request = lambda do |request|
51
+ target_request_tlvs.each_pair do |type, target_value|
52
+ assert_equal(target_value, request.get_tlv_value(type),
53
+ "process_function_call should send to client appropriate #{TLV_TYPE_NAMES[type]}")
54
+ end
55
+ end
56
56
 
57
- return MockRailgunClient.new(platform, response_tlvs, check_request)
58
- end
57
+ return MockRailgunClient.new(platform, response_tlvs, check_request)
58
+ end
59
59
 
60
- # These are sample descriptions of functions to use for testing.
61
- # the definitions include everything needed to mock and end to end test
62
- def mock_function_descriptions
63
- [
64
- {
65
- :platform => "x86/win32",
66
- :name => "LookupAccountSidA",
67
- :params => [
68
- ["PCHAR","lpSystemName","in"],
69
- ["LPVOID","Sid","in"],
70
- ["PCHAR","Name","out"],
71
- ["PDWORD","cchName","inout"],
72
- ["PCHAR","ReferencedDomainName","out"],
73
- ["PDWORD","cchReferencedDomainName","inout"],
74
- ["PBLOB","peUse","out"],
75
- ],
76
- :return_type => "BOOL",
77
- :dll_name => "advapi32",
78
- :ruby_args => [nil, 1371864, 100, 100, 100, 100, 1],
79
- :request_to_client => {
80
- TLV_TYPE_RAILGUN_SIZE_OUT => 201,
81
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD8\xEE\x14\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00d\x00\x00\x00\x03\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\xC8\x00\x00\x00",
82
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
83
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "d\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00",
84
- TLV_TYPE_RAILGUN_DLLNAME => "advapi32",
85
- TLV_TYPE_RAILGUN_FUNCNAME => "LookupAccountSidA"
86
- },
87
- :response_from_client => {
88
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "\x06\x00\x00\x00\x00\x00\x00\x00\f\x00\x00\x00\x00\x00\x00\x00",
89
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "SYSTEM\x00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANT AUTHORITY\x00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x05",
90
- TLV_TYPE_RAILGUN_BACK_RET => 1,
91
- TLV_TYPE_RAILGUN_BACK_ERR => 997
92
- },
93
- :returned_hash => {
94
- "GetLastError" => 997,
95
- "return" => true,
96
- "Name" => "SYSTEM",
97
- "ReferencedDomainName" => "NT AUTHORITY",
98
- "peUse" => "\x05",
99
- "cchName" => 6,
100
- "cchReferencedDomainName" => 12
101
- },
102
- },
103
- {
104
- :platform => 'x64/win64',
105
- :name => 'LookupAccountSidA',
106
- :params => [
107
- ["PCHAR", "lpSystemName", "in"],
108
- ["LPVOID", "Sid", "in"],
109
- ["PCHAR", "Name", "out"],
110
- ["PDWORD", "cchName", "inout"],
111
- ["PCHAR", "ReferencedDomainName", "out"],
112
- ["PDWORD", "cchReferencedDomainName", "inout"],
113
- ["PBLOB", "peUse", "out"]
114
- ],
115
- :return_type => 'BOOL',
116
- :dll_name => 'advapi32',
117
- :ruby_args => [nil, 1631552, 100, 100, 100, 100, 1],
118
- :request_to_client => {
119
- TLV_TYPE_RAILGUN_SIZE_OUT => 201,
120
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\xE5\x18\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xC8\x00\x00\x00\x00\x00\x00\x00",
121
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
122
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "d\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00",
123
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
124
- TLV_TYPE_RAILGUN_FUNCNAME => 'LookupAccountSidA',
125
- },
126
- :response_from_client => {
127
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "\x06\x00\x00\x00\x00\x00\x00\x00\f\x00\x00\x00\x00\x00\x00\x00",
128
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "SYSTEM\x00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANT AUTHORITY\x00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x05",
129
- TLV_TYPE_RAILGUN_BACK_RET => 1,
130
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
131
- },
132
- :returned_hash => {
133
- "GetLastError"=>0,
134
- "return"=>true,
135
- "Name"=>"SYSTEM",
136
- "ReferencedDomainName"=>"NT AUTHORITY",
137
- "peUse"=>"\x05",
138
- "cchName"=>6,
139
- "cchReferencedDomainName"=>12
140
- },
141
- },
142
- {
143
- :platform => 'x86/win32',
144
- :name => 'CryptAcquireContextW',
145
- :params => [["PDWORD", "phProv", "out"], ["PWCHAR", "pszContainer", "in"], ["PWCHAR", "pszProvider", "in"], ["DWORD", "dwProvType", "in"], ["DWORD", "dwflags", "in"]],
146
- :return_type => 'BOOL',
147
- :dll_name => 'advapi32',
148
- :ruby_args => [4, nil, "Microsoft Enhanced Cryptographic Provider v1.0", 1, 4026531840],
149
- :request_to_client => {
150
- TLV_TYPE_RAILGUN_SIZE_OUT => 4,
151
- TLV_TYPE_RAILGUN_STACKBLOB => "\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF0",
152
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "M\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00 \x00E\x00n\x00h\x00a\x00n\x00c\x00e\x00d\x00 \x00C\x00r\x00y\x00p\x00t\x00o\x00g\x00r\x00a\x00p\x00h\x00i\x00c\x00 \x00P\x00r\x00o\x00v\x00i\x00d\x00e\x00r\x00 \x00v\x001\x00.\x000\x00\x00\x00\x00\x00",
153
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
154
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
155
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptAcquireContextW',
156
- },
157
- :response_from_client => {
158
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
159
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "\xC8\xEB\x14\x00",
160
- TLV_TYPE_RAILGUN_BACK_RET => 1,
161
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
162
- },
163
- :returned_hash => {"GetLastError"=>0, "return"=>true, "phProv"=>1371080},
164
- },
165
- {
166
- :platform => 'x86/win32',
167
- :name => 'CryptCreateHash',
168
- :params => [["LPVOID", "hProv", "in"], ["DWORD", "Algid", "in"], ["LPVOID", "hKey", "in"], ["DWORD", "dwFlags", "in"], ["PDWORD", "phHash", "out"]],
169
- :return_type => 'BOOL',
170
- :dll_name => 'advapi32',
171
- :ruby_args => [1371080, 32771, 0, 0, 4],
172
- :request_to_client => {
173
- TLV_TYPE_RAILGUN_SIZE_OUT => 4,
174
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\xC8\xEB\x14\x00\x00\x00\x00\x00\x03\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00",
175
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
176
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
177
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
178
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptCreateHash',
179
- },
180
- :response_from_client => {
181
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
182
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "p\xEA\x14\x00",
183
- TLV_TYPE_RAILGUN_BACK_RET => 1,
184
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
185
- },
186
- :returned_hash => {"GetLastError"=>0, "return"=>true, "phHash"=>1370736},
187
- },
188
- {
189
- :platform => 'x86/win32',
190
- :name => 'CryptHashData',
191
- :params => [["LPVOID", "hHash", "in"], ["PWCHAR", "pbData", "in"], ["DWORD", "dwDataLen", "in"], ["DWORD", "dwFlags", "in"]],
192
- :return_type => 'BOOL',
193
- :dll_name => 'advapi32',
194
- :ruby_args => [1370736, "SmartFTP", 16, 0],
195
- :request_to_client => {
196
- TLV_TYPE_RAILGUN_SIZE_OUT => 0,
197
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00p\xEA\x14\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
198
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "S\x00m\x00a\x00r\x00t\x00F\x00T\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x00",
199
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
200
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
201
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptHashData',
202
- },
203
- :response_from_client => {
204
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
205
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
206
- TLV_TYPE_RAILGUN_BACK_RET => 1,
207
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
208
- },
209
- :returned_hash => {"GetLastError"=>0, "return"=>true},
210
- },
211
- {
212
- :platform => 'x86/win32',
213
- :name => 'CryptDeriveKey',
214
- :params => [["LPVOID", "hProv", "in"], ["DWORD", "Algid", "in"], ["LPVOID", "hBaseData", "in"], ["DWORD", "dwFlags", "in"], ["PDWORD", "phKey", "inout"]],
215
- :return_type => 'BOOL',
216
- :dll_name => 'advapi32',
217
- :ruby_args => [1371080, 26625, 1370736, 8388608, 4],
218
- :request_to_client => {
219
- TLV_TYPE_RAILGUN_SIZE_OUT => 0,
220
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\xC8\xEB\x14\x00\x00\x00\x00\x00\x01h\x00\x00\x00\x00\x00\x00p\xEA\x14\x00\x00\x00\x00\x00\x00\x00\x80\x00\x03\x00\x00\x00\x00\x00\x00\x00",
221
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
222
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "\x04\x00\x00\x00\x00\x00\x00\x00",
223
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
224
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDeriveKey',
225
- },
226
- :response_from_client => {
227
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "\xA0\x9C\x15\x00\x00\x00\x00\x00",
228
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
229
- TLV_TYPE_RAILGUN_BACK_RET => 1,
230
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
231
- },
232
- :returned_hash => {"GetLastError"=>0, "return"=>true, "phKey"=>1416352},
233
- },
234
- {
235
- :platform => 'x86/win32',
236
- :name => 'CryptDecrypt',
237
- :params => [["LPVOID", "hKey", "in"], ["LPVOID", "hHash", "in"], ["BOOL", "Final", "in"], ["DWORD", "dwFlags", "in"], ["PBLOB", "pbData", "inout"], ["PDWORD", "pdwDataLen", "inout"]],
238
- :return_type => 'BOOL',
239
- :dll_name => 'advapi32',
240
- :ruby_args => [1416352, 0, true, 0, "\x96\"\x83/\xCE|", 6],
241
- :request_to_client => {
242
- TLV_TYPE_RAILGUN_SIZE_OUT => 0,
243
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\xA0\x9C\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\b\x00\x00\x00",
244
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
245
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "\x96\"\x83/\xCE|\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00",
246
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
247
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDecrypt',
248
- },
249
- :response_from_client => {
250
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "q\x00u\x00x\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00",
251
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
252
- TLV_TYPE_RAILGUN_BACK_RET => 1,
253
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
254
- },
255
- :returned_hash => {"GetLastError"=>0, "return"=>true, "pbData"=>"q\x00u\x00x\x00", "pdwDataLen"=>6},
256
- },
257
- {
258
- :platform => 'x86/win32',
259
- :name => 'CryptDestroyHash',
260
- :params => [["LPVOID", "hHash", "in"]],
261
- :return_type => 'BOOL',
262
- :dll_name => 'advapi32',
263
- :ruby_args => [1370736],
264
- :request_to_client => {
265
- TLV_TYPE_RAILGUN_SIZE_OUT => 0,
266
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00p\xEA\x14\x00",
267
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
268
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
269
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
270
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDestroyHash',
271
- },
272
- :response_from_client => {
273
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
274
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
275
- TLV_TYPE_RAILGUN_BACK_RET => 1,
276
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
277
- },
278
- :returned_hash => {"GetLastError"=>0, "return"=>true},
279
- },
280
- {
281
- :platform => 'x86/win32',
282
- :name => 'CryptDestroyKey',
283
- :params => [["LPVOID", "hKey", "in"]],
284
- :return_type => 'BOOL',
285
- :dll_name => 'advapi32',
286
- :ruby_args => [1416352],
287
- :request_to_client => {
288
- TLV_TYPE_RAILGUN_SIZE_OUT => 0,
289
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\xA0\x9C\x15\x00",
290
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
291
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
292
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
293
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDestroyKey',
294
- },
295
- :response_from_client => {
296
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
297
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
298
- TLV_TYPE_RAILGUN_BACK_RET => 1,
299
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
300
- },
301
- :returned_hash => {"GetLastError"=>0, "return"=>true},
302
- },
303
- {
304
- :platform => 'x86/win32',
305
- :name => 'CryptReleaseContext',
306
- :params => [["LPVOID", "hProv", "in"], ["DWORD", "dwFlags", "in"]],
307
- :return_type => 'BOOL',
308
- :dll_name => 'advapi32',
309
- :ruby_args => [1371080, 0],
310
- :request_to_client => {
311
- TLV_TYPE_RAILGUN_SIZE_OUT => 0,
312
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\xC8\xEB\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00",
313
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
314
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
315
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
316
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptReleaseContext',
317
- },
318
- :response_from_client => {
319
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
320
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
321
- TLV_TYPE_RAILGUN_BACK_RET => 1,
322
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
323
- },
324
- :returned_hash => {"GetLastError"=>0, "return"=>true},
325
- },
326
- {
327
- :platform => 'x64/win64',
328
- :name => 'CryptAcquireContextW',
329
- :params => [["PDWORD", "phProv", "out"], ["PWCHAR", "pszContainer", "in"], ["PWCHAR", "pszProvider", "in"], ["DWORD", "dwProvType", "in"], ["DWORD", "dwflags", "in"]],
330
- :return_type => 'BOOL',
331
- :dll_name => 'advapi32',
332
- :ruby_args => [8, nil, "Microsoft Enhanced Cryptographic Provider v1.0", 1, 4026531840],
333
- :request_to_client => {
334
- TLV_TYPE_RAILGUN_SIZE_OUT => 8,
335
- TLV_TYPE_RAILGUN_STACKBLOB => "\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF0\x00\x00\x00\x00",
336
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "M\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00 \x00E\x00n\x00h\x00a\x00n\x00c\x00e\x00d\x00 \x00C\x00r\x00y\x00p\x00t\x00o\x00g\x00r\x00a\x00p\x00h\x00i\x00c\x00 \x00P\x00r\x00o\x00v\x00i\x00d\x00e\x00r\x00 \x00v\x001\x00.\x000\x00\x00\x00\x00\x00",
337
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
338
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
339
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptAcquireContextW',
340
- },
341
- :response_from_client => {
342
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
343
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "\x80\xCE\x1A\x00\x00\x00\x00\x00",
344
- TLV_TYPE_RAILGUN_BACK_RET => 1,
345
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
346
- },
347
- :returned_hash => {"GetLastError"=>0, "return"=>true, "phProv"=>1756800},
348
- },
349
- {
350
- :platform => 'x64/win64',
351
- :name => 'CryptCreateHash',
352
- :params => [["LPVOID", "hProv", "in"], ["DWORD", "Algid", "in"], ["LPVOID", "hKey", "in"], ["DWORD", "dwFlags", "in"], ["PDWORD", "phHash", "out"]],
353
- :return_type => 'BOOL',
354
- :dll_name => 'advapi32',
355
- :ruby_args => [1756800, 32771, 0, 0, 8],
356
- :request_to_client => {
357
- TLV_TYPE_RAILGUN_SIZE_OUT => 8,
358
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\xCE\x1A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
359
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
360
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
361
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
362
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptCreateHash',
363
- },
364
- :response_from_client => {
365
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
366
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "\x00\xA3\x19\x00\x00\x00\x00\x00",
367
- TLV_TYPE_RAILGUN_BACK_RET => 1,
368
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
369
- },
370
- :returned_hash => {"GetLastError"=>0, "return"=>true, "phHash"=>1680128},
371
- },
372
- {
373
- :platform => 'x64/win64',
374
- :name => 'CryptHashData',
375
- :params => [["LPVOID", "hHash", "in"], ["PWCHAR", "pbData", "in"], ["DWORD", "dwDataLen", "in"], ["DWORD", "dwFlags", "in"]],
376
- :return_type => 'BOOL',
377
- :dll_name => 'advapi32',
378
- :ruby_args => [1680128, "SmartFTP", 16, 0],
379
- :request_to_client => {
380
- TLV_TYPE_RAILGUN_SIZE_OUT => 0,
381
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA3\x19\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
382
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "S\x00m\x00a\x00r\x00t\x00F\x00T\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x00",
383
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
384
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
385
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptHashData',
386
- },
387
- :response_from_client => {
388
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
389
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
390
- TLV_TYPE_RAILGUN_BACK_RET => 1,
391
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
392
- },
393
- :returned_hash => {"GetLastError"=>0, "return"=>true},
394
- },
395
- {
396
- :platform => 'x64/win64',
397
- :name => 'CryptDeriveKey',
398
- :params => [["LPVOID", "hProv", "in"], ["DWORD", "Algid", "in"], ["LPVOID", "hBaseData", "in"], ["DWORD", "dwFlags", "in"], ["PDWORD", "phKey", "inout"]],
399
- :return_type => 'BOOL',
400
- :dll_name => 'advapi32',
401
- :ruby_args => [1756800, 26625, 1680128, 8388608, 4],
402
- :request_to_client => {
403
- TLV_TYPE_RAILGUN_SIZE_OUT => 0,
404
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\xCE\x1A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01h\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA3\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
405
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
406
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "\x04\x00\x00\x00\x00\x00\x00\x00",
407
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
408
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDeriveKey',
409
- },
410
- :response_from_client => {
411
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "p\xA3\x19\x00\x00\x00\x00\x00",
412
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
413
- TLV_TYPE_RAILGUN_BACK_RET => 1,
414
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
415
- },
416
- :returned_hash => {"GetLastError"=>0, "return"=>true, "phKey"=>1680240},
417
- },
418
- {
419
- :platform => 'x64/win64',
420
- :name => 'CryptDecrypt',
421
- :params => [["LPVOID", "hKey", "in"], ["LPVOID", "hHash", "in"], ["BOOL", "Final", "in"], ["DWORD", "dwFlags", "in"], ["PBLOB", "pbData", "inout"], ["PDWORD", "pdwDataLen", "inout"]],
422
- :return_type => 'BOOL',
423
- :dll_name => 'advapi32',
424
- :ruby_args => [1680240, 0, true, 0, "\x85\"\x97/\xCC|", 6],
425
- :request_to_client => {
426
- TLV_TYPE_RAILGUN_SIZE_OUT => 0,
427
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00p\xA3\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00",
428
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
429
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "\x85\"\x97/\xCC|\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00",
430
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
431
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDecrypt',
432
- },
433
- :response_from_client => {
434
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "b\x00a\x00z\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00",
435
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
436
- TLV_TYPE_RAILGUN_BACK_RET => 1,
437
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
438
- },
439
- :returned_hash => {"GetLastError"=>0, "return"=>true, "pbData"=>"b\x00a\x00z\x00", "pdwDataLen"=>6},
440
- },
441
- {
442
- :platform => 'x64/win64',
443
- :name => 'CryptDestroyHash',
444
- :params => [["LPVOID", "hHash", "in"]],
445
- :return_type => 'BOOL',
446
- :dll_name => 'advapi32',
447
- :ruby_args => [1680128],
448
- :request_to_client => {
449
- TLV_TYPE_RAILGUN_SIZE_OUT => 0,
450
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA3\x19\x00\x00\x00\x00\x00",
451
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
452
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
453
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
454
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDestroyHash',
455
- },
456
- :response_from_client => {
457
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
458
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
459
- TLV_TYPE_RAILGUN_BACK_RET => 1,
460
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
461
- },
462
- :returned_hash => {"GetLastError"=>0, "return"=>true},
463
- },
464
- {
465
- :platform => 'x64/win64',
466
- :name => 'CryptDestroyKey',
467
- :params => [["LPVOID", "hKey", "in"]],
468
- :return_type => 'BOOL',
469
- :dll_name => 'advapi32',
470
- :ruby_args => [1680240],
471
- :request_to_client => {
472
- TLV_TYPE_RAILGUN_SIZE_OUT => 0,
473
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00p\xA3\x19\x00\x00\x00\x00\x00",
474
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
475
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
476
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
477
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDestroyKey',
478
- },
479
- :response_from_client => {
480
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
481
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
482
- TLV_TYPE_RAILGUN_BACK_RET => 1,
483
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
484
- },
485
- :returned_hash => {"GetLastError"=>0, "return"=>true},
486
- },
487
- {
488
- :platform => 'x64/win64',
489
- :name => 'CryptReleaseContext',
490
- :params => [["LPVOID", "hProv", "in"], ["DWORD", "dwFlags", "in"]],
491
- :return_type => 'BOOL',
492
- :dll_name => 'advapi32',
493
- :ruby_args => [1756800, 0],
494
- :request_to_client => {
495
- TLV_TYPE_RAILGUN_SIZE_OUT => 0,
496
- TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\xCE\x1A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
497
- TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
498
- TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
499
- TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
500
- TLV_TYPE_RAILGUN_FUNCNAME => 'CryptReleaseContext',
501
- },
502
- :response_from_client => {
503
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
504
- TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
505
- TLV_TYPE_RAILGUN_BACK_RET => 1,
506
- TLV_TYPE_RAILGUN_BACK_ERR => 0,
507
- },
508
- :returned_hash => {"GetLastError"=>0, "return"=>true},
509
- },
510
- ]
511
- end
60
+ # These are sample descriptions of functions to use for testing.
61
+ # the definitions include everything needed to mock and end to end test
62
+ def mock_function_descriptions
63
+ [
64
+ {
65
+ :platform => "x86/win32",
66
+ :name => "LookupAccountSidA",
67
+ :params => [
68
+ ["PCHAR","lpSystemName","in"],
69
+ ["LPVOID","Sid","in"],
70
+ ["PCHAR","Name","out"],
71
+ ["PDWORD","cchName","inout"],
72
+ ["PCHAR","ReferencedDomainName","out"],
73
+ ["PDWORD","cchReferencedDomainName","inout"],
74
+ ["PBLOB","peUse","out"],
75
+ ],
76
+ :return_type => "BOOL",
77
+ :dll_name => "advapi32",
78
+ :ruby_args => [nil, 1371864, 100, 100, 100, 100, 1],
79
+ :request_to_client => {
80
+ TLV_TYPE_RAILGUN_SIZE_OUT => 201,
81
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD8\xEE\x14\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00d\x00\x00\x00\x03\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\xC8\x00\x00\x00",
82
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
83
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "d\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00",
84
+ TLV_TYPE_RAILGUN_DLLNAME => "advapi32",
85
+ TLV_TYPE_RAILGUN_FUNCNAME => "LookupAccountSidA"
86
+ },
87
+ :response_from_client => {
88
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "\x06\x00\x00\x00\x00\x00\x00\x00\f\x00\x00\x00\x00\x00\x00\x00",
89
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "SYSTEM\x00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANT AUTHORITY\x00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x05",
90
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
91
+ TLV_TYPE_RAILGUN_BACK_ERR => 997
92
+ },
93
+ :returned_hash => {
94
+ "GetLastError" => 997,
95
+ "return" => true,
96
+ "Name" => "SYSTEM",
97
+ "ReferencedDomainName" => "NT AUTHORITY",
98
+ "peUse" => "\x05",
99
+ "cchName" => 6,
100
+ "cchReferencedDomainName" => 12
101
+ },
102
+ },
103
+ {
104
+ :platform => 'x64/win64',
105
+ :name => 'LookupAccountSidA',
106
+ :params => [
107
+ ["PCHAR", "lpSystemName", "in"],
108
+ ["LPVOID", "Sid", "in"],
109
+ ["PCHAR", "Name", "out"],
110
+ ["PDWORD", "cchName", "inout"],
111
+ ["PCHAR", "ReferencedDomainName", "out"],
112
+ ["PDWORD", "cchReferencedDomainName", "inout"],
113
+ ["PBLOB", "peUse", "out"]
114
+ ],
115
+ :return_type => 'BOOL',
116
+ :dll_name => 'advapi32',
117
+ :ruby_args => [nil, 1631552, 100, 100, 100, 100, 1],
118
+ :request_to_client => {
119
+ TLV_TYPE_RAILGUN_SIZE_OUT => 201,
120
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\xE5\x18\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xC8\x00\x00\x00\x00\x00\x00\x00",
121
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
122
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "d\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00",
123
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
124
+ TLV_TYPE_RAILGUN_FUNCNAME => 'LookupAccountSidA',
125
+ },
126
+ :response_from_client => {
127
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "\x06\x00\x00\x00\x00\x00\x00\x00\f\x00\x00\x00\x00\x00\x00\x00",
128
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "SYSTEM\x00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANT AUTHORITY\x00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x05",
129
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
130
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
131
+ },
132
+ :returned_hash => {
133
+ "GetLastError"=>0,
134
+ "return"=>true,
135
+ "Name"=>"SYSTEM",
136
+ "ReferencedDomainName"=>"NT AUTHORITY",
137
+ "peUse"=>"\x05",
138
+ "cchName"=>6,
139
+ "cchReferencedDomainName"=>12
140
+ },
141
+ },
142
+ {
143
+ :platform => 'x86/win32',
144
+ :name => 'CryptAcquireContextW',
145
+ :params => [["PDWORD", "phProv", "out"], ["PWCHAR", "pszContainer", "in"], ["PWCHAR", "pszProvider", "in"], ["DWORD", "dwProvType", "in"], ["DWORD", "dwflags", "in"]],
146
+ :return_type => 'BOOL',
147
+ :dll_name => 'advapi32',
148
+ :ruby_args => [4, nil, "Microsoft Enhanced Cryptographic Provider v1.0", 1, 4026531840],
149
+ :request_to_client => {
150
+ TLV_TYPE_RAILGUN_SIZE_OUT => 4,
151
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF0",
152
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "M\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00 \x00E\x00n\x00h\x00a\x00n\x00c\x00e\x00d\x00 \x00C\x00r\x00y\x00p\x00t\x00o\x00g\x00r\x00a\x00p\x00h\x00i\x00c\x00 \x00P\x00r\x00o\x00v\x00i\x00d\x00e\x00r\x00 \x00v\x001\x00.\x000\x00\x00\x00\x00\x00",
153
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
154
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
155
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptAcquireContextW',
156
+ },
157
+ :response_from_client => {
158
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
159
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "\xC8\xEB\x14\x00",
160
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
161
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
162
+ },
163
+ :returned_hash => {"GetLastError"=>0, "return"=>true, "phProv"=>1371080},
164
+ },
165
+ {
166
+ :platform => 'x86/win32',
167
+ :name => 'CryptCreateHash',
168
+ :params => [["LPVOID", "hProv", "in"], ["DWORD", "Algid", "in"], ["LPVOID", "hKey", "in"], ["DWORD", "dwFlags", "in"], ["PDWORD", "phHash", "out"]],
169
+ :return_type => 'BOOL',
170
+ :dll_name => 'advapi32',
171
+ :ruby_args => [1371080, 32771, 0, 0, 4],
172
+ :request_to_client => {
173
+ TLV_TYPE_RAILGUN_SIZE_OUT => 4,
174
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\xC8\xEB\x14\x00\x00\x00\x00\x00\x03\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00",
175
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
176
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
177
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
178
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptCreateHash',
179
+ },
180
+ :response_from_client => {
181
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
182
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "p\xEA\x14\x00",
183
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
184
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
185
+ },
186
+ :returned_hash => {"GetLastError"=>0, "return"=>true, "phHash"=>1370736},
187
+ },
188
+ {
189
+ :platform => 'x86/win32',
190
+ :name => 'CryptHashData',
191
+ :params => [["LPVOID", "hHash", "in"], ["PWCHAR", "pbData", "in"], ["DWORD", "dwDataLen", "in"], ["DWORD", "dwFlags", "in"]],
192
+ :return_type => 'BOOL',
193
+ :dll_name => 'advapi32',
194
+ :ruby_args => [1370736, "SmartFTP", 16, 0],
195
+ :request_to_client => {
196
+ TLV_TYPE_RAILGUN_SIZE_OUT => 0,
197
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00p\xEA\x14\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
198
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "S\x00m\x00a\x00r\x00t\x00F\x00T\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x00",
199
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
200
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
201
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptHashData',
202
+ },
203
+ :response_from_client => {
204
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
205
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
206
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
207
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
208
+ },
209
+ :returned_hash => {"GetLastError"=>0, "return"=>true},
210
+ },
211
+ {
212
+ :platform => 'x86/win32',
213
+ :name => 'CryptDeriveKey',
214
+ :params => [["LPVOID", "hProv", "in"], ["DWORD", "Algid", "in"], ["LPVOID", "hBaseData", "in"], ["DWORD", "dwFlags", "in"], ["PDWORD", "phKey", "inout"]],
215
+ :return_type => 'BOOL',
216
+ :dll_name => 'advapi32',
217
+ :ruby_args => [1371080, 26625, 1370736, 8388608, 4],
218
+ :request_to_client => {
219
+ TLV_TYPE_RAILGUN_SIZE_OUT => 0,
220
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\xC8\xEB\x14\x00\x00\x00\x00\x00\x01h\x00\x00\x00\x00\x00\x00p\xEA\x14\x00\x00\x00\x00\x00\x00\x00\x80\x00\x03\x00\x00\x00\x00\x00\x00\x00",
221
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
222
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "\x04\x00\x00\x00\x00\x00\x00\x00",
223
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
224
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDeriveKey',
225
+ },
226
+ :response_from_client => {
227
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "\xA0\x9C\x15\x00\x00\x00\x00\x00",
228
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
229
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
230
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
231
+ },
232
+ :returned_hash => {"GetLastError"=>0, "return"=>true, "phKey"=>1416352},
233
+ },
234
+ {
235
+ :platform => 'x86/win32',
236
+ :name => 'CryptDecrypt',
237
+ :params => [["LPVOID", "hKey", "in"], ["LPVOID", "hHash", "in"], ["BOOL", "Final", "in"], ["DWORD", "dwFlags", "in"], ["PBLOB", "pbData", "inout"], ["PDWORD", "pdwDataLen", "inout"]],
238
+ :return_type => 'BOOL',
239
+ :dll_name => 'advapi32',
240
+ :ruby_args => [1416352, 0, true, 0, "\x96\"\x83/\xCE|", 6],
241
+ :request_to_client => {
242
+ TLV_TYPE_RAILGUN_SIZE_OUT => 0,
243
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\xA0\x9C\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\b\x00\x00\x00",
244
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
245
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "\x96\"\x83/\xCE|\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00",
246
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
247
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDecrypt',
248
+ },
249
+ :response_from_client => {
250
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "q\x00u\x00x\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00",
251
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
252
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
253
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
254
+ },
255
+ :returned_hash => {"GetLastError"=>0, "return"=>true, "pbData"=>"q\x00u\x00x\x00", "pdwDataLen"=>6},
256
+ },
257
+ {
258
+ :platform => 'x86/win32',
259
+ :name => 'CryptDestroyHash',
260
+ :params => [["LPVOID", "hHash", "in"]],
261
+ :return_type => 'BOOL',
262
+ :dll_name => 'advapi32',
263
+ :ruby_args => [1370736],
264
+ :request_to_client => {
265
+ TLV_TYPE_RAILGUN_SIZE_OUT => 0,
266
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00p\xEA\x14\x00",
267
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
268
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
269
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
270
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDestroyHash',
271
+ },
272
+ :response_from_client => {
273
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
274
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
275
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
276
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
277
+ },
278
+ :returned_hash => {"GetLastError"=>0, "return"=>true},
279
+ },
280
+ {
281
+ :platform => 'x86/win32',
282
+ :name => 'CryptDestroyKey',
283
+ :params => [["LPVOID", "hKey", "in"]],
284
+ :return_type => 'BOOL',
285
+ :dll_name => 'advapi32',
286
+ :ruby_args => [1416352],
287
+ :request_to_client => {
288
+ TLV_TYPE_RAILGUN_SIZE_OUT => 0,
289
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\xA0\x9C\x15\x00",
290
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
291
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
292
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
293
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDestroyKey',
294
+ },
295
+ :response_from_client => {
296
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
297
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
298
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
299
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
300
+ },
301
+ :returned_hash => {"GetLastError"=>0, "return"=>true},
302
+ },
303
+ {
304
+ :platform => 'x86/win32',
305
+ :name => 'CryptReleaseContext',
306
+ :params => [["LPVOID", "hProv", "in"], ["DWORD", "dwFlags", "in"]],
307
+ :return_type => 'BOOL',
308
+ :dll_name => 'advapi32',
309
+ :ruby_args => [1371080, 0],
310
+ :request_to_client => {
311
+ TLV_TYPE_RAILGUN_SIZE_OUT => 0,
312
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\xC8\xEB\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00",
313
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
314
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
315
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
316
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptReleaseContext',
317
+ },
318
+ :response_from_client => {
319
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
320
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
321
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
322
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
323
+ },
324
+ :returned_hash => {"GetLastError"=>0, "return"=>true},
325
+ },
326
+ {
327
+ :platform => 'x64/win64',
328
+ :name => 'CryptAcquireContextW',
329
+ :params => [["PDWORD", "phProv", "out"], ["PWCHAR", "pszContainer", "in"], ["PWCHAR", "pszProvider", "in"], ["DWORD", "dwProvType", "in"], ["DWORD", "dwflags", "in"]],
330
+ :return_type => 'BOOL',
331
+ :dll_name => 'advapi32',
332
+ :ruby_args => [8, nil, "Microsoft Enhanced Cryptographic Provider v1.0", 1, 4026531840],
333
+ :request_to_client => {
334
+ TLV_TYPE_RAILGUN_SIZE_OUT => 8,
335
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF0\x00\x00\x00\x00",
336
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "M\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00 \x00E\x00n\x00h\x00a\x00n\x00c\x00e\x00d\x00 \x00C\x00r\x00y\x00p\x00t\x00o\x00g\x00r\x00a\x00p\x00h\x00i\x00c\x00 \x00P\x00r\x00o\x00v\x00i\x00d\x00e\x00r\x00 \x00v\x001\x00.\x000\x00\x00\x00\x00\x00",
337
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
338
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
339
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptAcquireContextW',
340
+ },
341
+ :response_from_client => {
342
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
343
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "\x80\xCE\x1A\x00\x00\x00\x00\x00",
344
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
345
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
346
+ },
347
+ :returned_hash => {"GetLastError"=>0, "return"=>true, "phProv"=>1756800},
348
+ },
349
+ {
350
+ :platform => 'x64/win64',
351
+ :name => 'CryptCreateHash',
352
+ :params => [["LPVOID", "hProv", "in"], ["DWORD", "Algid", "in"], ["LPVOID", "hKey", "in"], ["DWORD", "dwFlags", "in"], ["PDWORD", "phHash", "out"]],
353
+ :return_type => 'BOOL',
354
+ :dll_name => 'advapi32',
355
+ :ruby_args => [1756800, 32771, 0, 0, 8],
356
+ :request_to_client => {
357
+ TLV_TYPE_RAILGUN_SIZE_OUT => 8,
358
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\xCE\x1A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
359
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
360
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
361
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
362
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptCreateHash',
363
+ },
364
+ :response_from_client => {
365
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
366
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "\x00\xA3\x19\x00\x00\x00\x00\x00",
367
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
368
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
369
+ },
370
+ :returned_hash => {"GetLastError"=>0, "return"=>true, "phHash"=>1680128},
371
+ },
372
+ {
373
+ :platform => 'x64/win64',
374
+ :name => 'CryptHashData',
375
+ :params => [["LPVOID", "hHash", "in"], ["PWCHAR", "pbData", "in"], ["DWORD", "dwDataLen", "in"], ["DWORD", "dwFlags", "in"]],
376
+ :return_type => 'BOOL',
377
+ :dll_name => 'advapi32',
378
+ :ruby_args => [1680128, "SmartFTP", 16, 0],
379
+ :request_to_client => {
380
+ TLV_TYPE_RAILGUN_SIZE_OUT => 0,
381
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA3\x19\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
382
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "S\x00m\x00a\x00r\x00t\x00F\x00T\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x00",
383
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
384
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
385
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptHashData',
386
+ },
387
+ :response_from_client => {
388
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
389
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
390
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
391
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
392
+ },
393
+ :returned_hash => {"GetLastError"=>0, "return"=>true},
394
+ },
395
+ {
396
+ :platform => 'x64/win64',
397
+ :name => 'CryptDeriveKey',
398
+ :params => [["LPVOID", "hProv", "in"], ["DWORD", "Algid", "in"], ["LPVOID", "hBaseData", "in"], ["DWORD", "dwFlags", "in"], ["PDWORD", "phKey", "inout"]],
399
+ :return_type => 'BOOL',
400
+ :dll_name => 'advapi32',
401
+ :ruby_args => [1756800, 26625, 1680128, 8388608, 4],
402
+ :request_to_client => {
403
+ TLV_TYPE_RAILGUN_SIZE_OUT => 0,
404
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\xCE\x1A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01h\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA3\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
405
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
406
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "\x04\x00\x00\x00\x00\x00\x00\x00",
407
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
408
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDeriveKey',
409
+ },
410
+ :response_from_client => {
411
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "p\xA3\x19\x00\x00\x00\x00\x00",
412
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
413
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
414
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
415
+ },
416
+ :returned_hash => {"GetLastError"=>0, "return"=>true, "phKey"=>1680240},
417
+ },
418
+ {
419
+ :platform => 'x64/win64',
420
+ :name => 'CryptDecrypt',
421
+ :params => [["LPVOID", "hKey", "in"], ["LPVOID", "hHash", "in"], ["BOOL", "Final", "in"], ["DWORD", "dwFlags", "in"], ["PBLOB", "pbData", "inout"], ["PDWORD", "pdwDataLen", "inout"]],
422
+ :return_type => 'BOOL',
423
+ :dll_name => 'advapi32',
424
+ :ruby_args => [1680240, 0, true, 0, "\x85\"\x97/\xCC|", 6],
425
+ :request_to_client => {
426
+ TLV_TYPE_RAILGUN_SIZE_OUT => 0,
427
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00p\xA3\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00",
428
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
429
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "\x85\"\x97/\xCC|\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00",
430
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
431
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDecrypt',
432
+ },
433
+ :response_from_client => {
434
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "b\x00a\x00z\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00",
435
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
436
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
437
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
438
+ },
439
+ :returned_hash => {"GetLastError"=>0, "return"=>true, "pbData"=>"b\x00a\x00z\x00", "pdwDataLen"=>6},
440
+ },
441
+ {
442
+ :platform => 'x64/win64',
443
+ :name => 'CryptDestroyHash',
444
+ :params => [["LPVOID", "hHash", "in"]],
445
+ :return_type => 'BOOL',
446
+ :dll_name => 'advapi32',
447
+ :ruby_args => [1680128],
448
+ :request_to_client => {
449
+ TLV_TYPE_RAILGUN_SIZE_OUT => 0,
450
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA3\x19\x00\x00\x00\x00\x00",
451
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
452
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
453
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
454
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDestroyHash',
455
+ },
456
+ :response_from_client => {
457
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
458
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
459
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
460
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
461
+ },
462
+ :returned_hash => {"GetLastError"=>0, "return"=>true},
463
+ },
464
+ {
465
+ :platform => 'x64/win64',
466
+ :name => 'CryptDestroyKey',
467
+ :params => [["LPVOID", "hKey", "in"]],
468
+ :return_type => 'BOOL',
469
+ :dll_name => 'advapi32',
470
+ :ruby_args => [1680240],
471
+ :request_to_client => {
472
+ TLV_TYPE_RAILGUN_SIZE_OUT => 0,
473
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00p\xA3\x19\x00\x00\x00\x00\x00",
474
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
475
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
476
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
477
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptDestroyKey',
478
+ },
479
+ :response_from_client => {
480
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
481
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
482
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
483
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
484
+ },
485
+ :returned_hash => {"GetLastError"=>0, "return"=>true},
486
+ },
487
+ {
488
+ :platform => 'x64/win64',
489
+ :name => 'CryptReleaseContext',
490
+ :params => [["LPVOID", "hProv", "in"], ["DWORD", "dwFlags", "in"]],
491
+ :return_type => 'BOOL',
492
+ :dll_name => 'advapi32',
493
+ :ruby_args => [1756800, 0],
494
+ :request_to_client => {
495
+ TLV_TYPE_RAILGUN_SIZE_OUT => 0,
496
+ TLV_TYPE_RAILGUN_STACKBLOB => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\xCE\x1A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
497
+ TLV_TYPE_RAILGUN_BUFFERBLOB_IN => "",
498
+ TLV_TYPE_RAILGUN_BUFFERBLOB_INOUT => "",
499
+ TLV_TYPE_RAILGUN_DLLNAME => 'advapi32',
500
+ TLV_TYPE_RAILGUN_FUNCNAME => 'CryptReleaseContext',
501
+ },
502
+ :response_from_client => {
503
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_INOUT => "",
504
+ TLV_TYPE_RAILGUN_BACK_BUFFERBLOB_OUT => "",
505
+ TLV_TYPE_RAILGUN_BACK_RET => 1,
506
+ TLV_TYPE_RAILGUN_BACK_ERR => 0,
507
+ },
508
+ :returned_hash => {"GetLastError"=>0, "return"=>true},
509
+ },
510
+ ]
511
+ end
512
512
 
513
513
  end
514
514