librex 0.0.68 → 0.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. checksums.yaml +15 -0
  2. data/README.markdown +1 -1
  3. data/Rakefile +18 -16
  4. data/lib/rex.rb +14 -10
  5. data/lib/rex/LICENSE +2 -2
  6. data/lib/rex/arch.rb +76 -76
  7. data/lib/rex/arch/sparc.rb +57 -58
  8. data/lib/rex/arch/x86.rb +506 -496
  9. data/lib/rex/assembly/nasm.rb +83 -84
  10. data/lib/rex/compat.rb +228 -173
  11. data/lib/rex/constants.rb +47 -37
  12. data/lib/rex/elfparsey.rb +0 -3
  13. data/lib/rex/elfparsey/elf.rb +107 -110
  14. data/lib/rex/elfparsey/elfbase.rb +244 -247
  15. data/lib/rex/elfparsey/exceptions.rb +0 -3
  16. data/lib/rex/elfscan.rb +0 -3
  17. data/lib/rex/elfscan/scanner.rb +184 -166
  18. data/lib/rex/elfscan/search.rb +35 -38
  19. data/lib/rex/encoder/alpha2.rb +1 -2
  20. data/lib/rex/encoder/alpha2/alpha_mixed.rb +52 -53
  21. data/lib/rex/encoder/alpha2/alpha_upper.rb +62 -63
  22. data/lib/rex/encoder/alpha2/generic.rb +77 -78
  23. data/lib/rex/encoder/alpha2/unicode_mixed.rb +101 -97
  24. data/lib/rex/encoder/alpha2/unicode_upper.rb +106 -107
  25. data/lib/rex/encoder/bloxor/bloxor.rb +326 -0
  26. data/lib/rex/encoder/ndr.rb +68 -68
  27. data/lib/rex/encoder/nonalpha.rb +50 -51
  28. data/lib/rex/encoder/nonupper.rb +50 -51
  29. data/lib/rex/encoder/xdr.rb +78 -78
  30. data/lib/rex/encoder/xor.rb +52 -53
  31. data/lib/rex/encoder/xor/dword.rb +1 -2
  32. data/lib/rex/encoder/xor/dword_additive.rb +1 -2
  33. data/lib/rex/encoders/xor_dword.rb +17 -18
  34. data/lib/rex/encoders/xor_dword_additive.rb +35 -36
  35. data/lib/rex/encoding/xor.rb +0 -1
  36. data/lib/rex/encoding/xor/byte.rb +3 -4
  37. data/lib/rex/encoding/xor/dword.rb +3 -4
  38. data/lib/rex/encoding/xor/dword_additive.rb +72 -73
  39. data/lib/rex/encoding/xor/exceptions.rb +2 -3
  40. data/lib/rex/encoding/xor/generic.rb +129 -130
  41. data/lib/rex/encoding/xor/qword.rb +3 -4
  42. data/lib/rex/encoding/xor/word.rb +3 -4
  43. data/lib/rex/exceptions.rb +100 -101
  44. data/lib/rex/exploitation/cmdstager.rb +3 -3
  45. data/lib/rex/exploitation/cmdstager/base.rb +170 -156
  46. data/lib/rex/exploitation/cmdstager/bourne.rb +105 -0
  47. data/lib/rex/exploitation/cmdstager/debug_asm.rb +110 -113
  48. data/lib/rex/exploitation/cmdstager/debug_write.rb +106 -109
  49. data/lib/rex/exploitation/cmdstager/echo.rb +164 -0
  50. data/lib/rex/exploitation/cmdstager/printf.rb +122 -0
  51. data/lib/rex/exploitation/cmdstager/tftp.rb +34 -27
  52. data/lib/rex/exploitation/cmdstager/vbs.rb +95 -98
  53. data/lib/rex/exploitation/egghunter.rb +359 -346
  54. data/lib/rex/exploitation/encryptjs.rb +60 -60
  55. data/lib/rex/exploitation/heaplib.rb +76 -76
  56. data/lib/rex/exploitation/js.rb +6 -0
  57. data/lib/rex/exploitation/js/detect.rb +69 -0
  58. data/lib/rex/exploitation/js/memory.rb +81 -0
  59. data/lib/rex/exploitation/js/network.rb +84 -0
  60. data/lib/rex/exploitation/js/utils.rb +33 -0
  61. data/lib/rex/exploitation/jsobfu.rb +448 -424
  62. data/lib/rex/exploitation/obfuscatejs.rb +301 -301
  63. data/lib/rex/exploitation/omelet.rb +257 -257
  64. data/lib/rex/exploitation/opcodedb.rb +699 -699
  65. data/lib/rex/exploitation/ropdb.rb +189 -0
  66. data/lib/rex/exploitation/seh.rb +68 -68
  67. data/lib/rex/file.rb +96 -49
  68. data/lib/rex/image_source.rb +0 -3
  69. data/lib/rex/image_source/disk.rb +45 -48
  70. data/lib/rex/image_source/image_source.rb +33 -36
  71. data/lib/rex/image_source/memory.rb +17 -20
  72. data/lib/rex/io/bidirectional_pipe.rb +118 -115
  73. data/lib/rex/io/datagram_abstraction.rb +13 -14
  74. data/lib/rex/io/ring_buffer.rb +273 -273
  75. data/lib/rex/io/stream.rb +284 -284
  76. data/lib/rex/io/stream_abstraction.rb +183 -181
  77. data/lib/rex/io/stream_server.rb +193 -193
  78. data/lib/rex/job_container.rb +167 -167
  79. data/lib/rex/logging.rb +0 -1
  80. data/lib/rex/logging/log_dispatcher.rb +113 -113
  81. data/lib/rex/logging/log_sink.rb +17 -17
  82. data/lib/rex/logging/sinks/flatfile.rb +36 -36
  83. data/lib/rex/logging/sinks/stderr.rb +27 -27
  84. data/lib/rex/mac_oui.rb +16572 -16571
  85. data/lib/rex/machparsey.rb +0 -1
  86. data/lib/rex/machparsey/exceptions.rb +0 -1
  87. data/lib/rex/machparsey/mach.rb +160 -161
  88. data/lib/rex/machparsey/machbase.rb +367 -368
  89. data/lib/rex/machscan.rb +0 -1
  90. data/lib/rex/machscan/scanner.rb +175 -176
  91. data/lib/rex/mime/encoding.rb +17 -0
  92. data/lib/rex/mime/header.rb +58 -58
  93. data/lib/rex/mime/message.rb +140 -137
  94. data/lib/rex/mime/part.rb +41 -12
  95. data/lib/rex/nop/opty2.rb +90 -90
  96. data/lib/rex/nop/opty2_tables.rb +273 -273
  97. data/lib/rex/ole.rb +0 -4
  98. data/lib/rex/ole/clsid.rb +26 -30
  99. data/lib/rex/ole/difat.rb +121 -125
  100. data/lib/rex/ole/directory.rb +205 -209
  101. data/lib/rex/ole/direntry.rb +217 -221
  102. data/lib/rex/ole/fat.rb +79 -83
  103. data/lib/rex/ole/header.rb +178 -182
  104. data/lib/rex/ole/minifat.rb +49 -53
  105. data/lib/rex/ole/propset.rb +113 -117
  106. data/lib/rex/ole/samples/create_ole.rb +8 -9
  107. data/lib/rex/ole/samples/dir.rb +10 -11
  108. data/lib/rex/ole/samples/dump_stream.rb +14 -15
  109. data/lib/rex/ole/samples/ole_info.rb +5 -6
  110. data/lib/rex/ole/storage.rb +372 -376
  111. data/lib/rex/ole/stream.rb +33 -37
  112. data/lib/rex/ole/substorage.rb +20 -24
  113. data/lib/rex/ole/util.rb +137 -141
  114. data/lib/rex/parser/acunetix_nokogiri.rb +398 -398
  115. data/lib/rex/parser/apple_backup_manifestdb.rb +116 -116
  116. data/lib/rex/parser/appscan_nokogiri.rb +359 -359
  117. data/lib/rex/parser/arguments.rb +88 -88
  118. data/lib/rex/parser/burp_session_nokogiri.rb +258 -258
  119. data/lib/rex/parser/ci_nokogiri.rb +184 -184
  120. data/lib/rex/parser/foundstone_nokogiri.rb +334 -333
  121. data/lib/rex/parser/fusionvm_nokogiri.rb +94 -94
  122. data/lib/rex/parser/ini.rb +167 -167
  123. data/lib/rex/parser/ip360_aspl_xml.rb +84 -84
  124. data/lib/rex/parser/ip360_xml.rb +77 -77
  125. data/lib/rex/parser/mbsa_nokogiri.rb +224 -224
  126. data/lib/rex/parser/nessus_xml.rb +100 -100
  127. data/lib/rex/parser/netsparker_xml.rb +89 -75
  128. data/lib/rex/parser/nexpose_raw_nokogiri.rb +677 -677
  129. data/lib/rex/parser/nexpose_simple_nokogiri.rb +322 -322
  130. data/lib/rex/parser/nexpose_xml.rb +105 -105
  131. data/lib/rex/parser/nmap_nokogiri.rb +386 -386
  132. data/lib/rex/parser/nmap_xml.rb +116 -116
  133. data/lib/rex/parser/nokogiri_doc_mixin.rb +223 -221
  134. data/lib/rex/parser/openvas_nokogiri.rb +162 -162
  135. data/lib/rex/parser/outpost24_nokogiri.rb +239 -0
  136. data/lib/rex/parser/retina_xml.rb +90 -90
  137. data/lib/rex/parser/unattend.rb +171 -0
  138. data/lib/rex/parser/wapiti_nokogiri.rb +89 -89
  139. data/lib/rex/payloads/win32/common.rb +14 -14
  140. data/lib/rex/payloads/win32/kernel.rb +36 -36
  141. data/lib/rex/payloads/win32/kernel/common.rb +32 -32
  142. data/lib/rex/payloads/win32/kernel/recovery.rb +27 -27
  143. data/lib/rex/payloads/win32/kernel/stager.rb +170 -170
  144. data/lib/rex/peparsey.rb +0 -3
  145. data/lib/rex/peparsey/exceptions.rb +0 -3
  146. data/lib/rex/peparsey/pe.rb +196 -199
  147. data/lib/rex/peparsey/pe_memdump.rb +35 -38
  148. data/lib/rex/peparsey/pebase.rb +1633 -1652
  149. data/lib/rex/peparsey/section.rb +115 -124
  150. data/lib/rex/pescan.rb +0 -3
  151. data/lib/rex/pescan/analyze.rb +351 -351
  152. data/lib/rex/pescan/scanner.rb +182 -182
  153. data/lib/rex/pescan/search.rb +59 -59
  154. data/lib/rex/platforms/windows.rb +37 -37
  155. data/lib/rex/poly.rb +111 -110
  156. data/lib/rex/poly/block.rb +419 -417
  157. data/lib/rex/poly/machine.rb +12 -0
  158. data/lib/rex/poly/machine/machine.rb +829 -0
  159. data/lib/rex/poly/machine/x86.rb +508 -0
  160. data/lib/rex/poly/register.rb +70 -70
  161. data/lib/rex/poly/register/x86.rb +22 -22
  162. data/lib/rex/post.rb +0 -1
  163. data/lib/rex/post/dir.rb +35 -36
  164. data/lib/rex/post/file.rb +140 -141
  165. data/lib/rex/post/file_stat.rb +198 -199
  166. data/lib/rex/post/io.rb +167 -168
  167. data/lib/rex/post/meterpreter.rb +1 -1
  168. data/lib/rex/post/meterpreter/channel.rb +389 -390
  169. data/lib/rex/post/meterpreter/channel_container.rb +33 -34
  170. data/lib/rex/post/meterpreter/channels/pool.rb +129 -130
  171. data/lib/rex/post/meterpreter/channels/pools/file.rb +35 -36
  172. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +72 -73
  173. data/lib/rex/post/meterpreter/channels/stream.rb +62 -63
  174. data/lib/rex/post/meterpreter/client.rb +442 -436
  175. data/lib/rex/post/meterpreter/client_core.rb +326 -310
  176. data/lib/rex/post/meterpreter/dependencies.rb +0 -1
  177. data/lib/rex/post/meterpreter/extension.rb +12 -13
  178. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +35 -36
  179. data/lib/rex/post/meterpreter/extensions/extapi/adsi/adsi.rb +71 -0
  180. data/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb +169 -0
  181. data/lib/rex/post/meterpreter/extensions/extapi/extapi.rb +45 -0
  182. data/lib/rex/post/meterpreter/extensions/extapi/service/service.rb +104 -0
  183. data/lib/rex/post/meterpreter/extensions/extapi/tlv.rb +77 -0
  184. data/lib/rex/post/meterpreter/extensions/extapi/window/window.rb +56 -0
  185. data/lib/rex/post/meterpreter/extensions/extapi/wmi/wmi.rb +75 -0
  186. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +70 -71
  187. data/lib/rex/post/meterpreter/extensions/kiwi/kiwi.rb +361 -0
  188. data/lib/rex/post/meterpreter/extensions/kiwi/tlv.rb +76 -0
  189. data/lib/rex/post/meterpreter/extensions/lanattacks/dhcp/dhcp.rb +78 -0
  190. data/lib/rex/post/meterpreter/extensions/lanattacks/lanattacks.rb +22 -78
  191. data/lib/rex/post/meterpreter/extensions/lanattacks/tftp/tftp.rb +49 -0
  192. data/lib/rex/post/meterpreter/extensions/lanattacks/tlv.rb +4 -4
  193. data/lib/rex/post/meterpreter/extensions/mimikatz/mimikatz.rb +128 -0
  194. data/lib/rex/post/meterpreter/extensions/mimikatz/tlv.rb +16 -0
  195. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +38 -39
  196. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +1 -1
  197. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +95 -96
  198. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +39 -40
  199. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +80 -85
  200. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +94 -95
  201. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +207 -147
  202. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +258 -259
  203. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +366 -301
  204. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +72 -73
  205. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +24 -25
  206. data/lib/rex/post/meterpreter/extensions/stdapi/net/arp.rb +59 -0
  207. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +227 -149
  208. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +107 -108
  209. data/lib/rex/post/meterpreter/extensions/stdapi/net/netstat.rb +97 -0
  210. data/lib/rex/post/meterpreter/extensions/stdapi/net/resolve.rb +106 -0
  211. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +41 -42
  212. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +102 -101
  213. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +151 -152
  214. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +142 -142
  215. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +185 -185
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +38118 -38117
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +7 -7
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +2086 -2084
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_crypt32.rb +15 -15
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +80 -80
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +3835 -3833
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +84 -28
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +151 -137
  224. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +15 -6
  225. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3155 -3155
  226. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_version.rb +41 -0
  227. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wlanapi.rb +70 -70
  228. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wldap32.rb +128 -0
  229. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +596 -596
  230. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +310 -301
  231. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +71 -61
  232. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +100 -100
  233. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb +14 -14
  234. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/mock_magic.rb +488 -488
  235. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +273 -264
  236. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb +5 -5
  237. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +240 -238
  238. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +17 -15
  239. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb +61 -61
  240. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +654 -635
  241. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +49 -49
  242. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +103 -102
  243. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +98 -68
  244. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +165 -166
  245. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +16 -17
  246. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +34 -36
  247. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +363 -364
  248. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +102 -103
  249. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +28 -29
  250. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +303 -304
  251. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +113 -114
  252. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +260 -261
  253. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +165 -166
  254. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +69 -70
  255. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb +160 -161
  256. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +143 -144
  257. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +29 -12
  258. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +230 -231
  259. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +181 -44
  260. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +12 -13
  261. data/lib/rex/post/meterpreter/object_aliases.rb +56 -57
  262. data/lib/rex/post/meterpreter/packet.rb +591 -592
  263. data/lib/rex/post/meterpreter/packet_dispatcher.rb +506 -496
  264. data/lib/rex/post/meterpreter/packet_parser.rb +72 -73
  265. data/lib/rex/post/meterpreter/packet_response_waiter.rb +56 -57
  266. data/lib/rex/post/meterpreter/ui/console.rb +112 -112
  267. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +53 -53
  268. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +911 -854
  269. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +86 -86
  270. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi.rb +65 -0
  271. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/adsi.rb +198 -0
  272. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb +444 -0
  273. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/service.rb +199 -0
  274. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/window.rb +118 -0
  275. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/wmi.rb +108 -0
  276. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +220 -220
  277. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/kiwi.rb +509 -0
  278. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks.rb +60 -0
  279. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/dhcp.rb +254 -0
  280. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/tftp.rb +159 -0
  281. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/mimikatz.rb +182 -0
  282. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +173 -173
  283. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +40 -40
  284. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +75 -77
  285. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +30 -30
  286. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +105 -105
  287. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +182 -182
  288. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +37 -37
  289. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +504 -482
  290. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +401 -330
  291. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +883 -581
  292. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +296 -299
  293. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +320 -153
  294. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +78 -78
  295. data/lib/rex/post/permission.rb +0 -1
  296. data/lib/rex/post/process.rb +39 -40
  297. data/lib/rex/post/thread.rb +41 -42
  298. data/lib/rex/post/ui.rb +35 -36
  299. data/lib/rex/proto/addp.rb +218 -0
  300. data/lib/rex/proto/dcerpc/client.rb +344 -344
  301. data/lib/rex/proto/dcerpc/exceptions.rb +128 -128
  302. data/lib/rex/proto/dcerpc/handle.rb +32 -32
  303. data/lib/rex/proto/dcerpc/ndr.rb +56 -56
  304. data/lib/rex/proto/dcerpc/packet.rb +249 -245
  305. data/lib/rex/proto/dcerpc/response.rb +170 -170
  306. data/lib/rex/proto/dcerpc/uuid.rb +65 -65
  307. data/lib/rex/proto/dcerpc/wdscp.rb +3 -0
  308. data/lib/rex/proto/dcerpc/wdscp/constants.rb +89 -0
  309. data/lib/rex/proto/dcerpc/wdscp/packet.rb +94 -0
  310. data/lib/rex/proto/dhcp.rb +0 -1
  311. data/lib/rex/proto/dhcp/constants.rb +0 -1
  312. data/lib/rex/proto/dhcp/server.rb +303 -304
  313. data/lib/rex/proto/drda/constants.rb +1 -1
  314. data/lib/rex/proto/drda/packet.rb +186 -186
  315. data/lib/rex/proto/drda/utils.rb +104 -104
  316. data/lib/rex/proto/http.rb +1 -0
  317. data/lib/rex/proto/http/client.rb +692 -820
  318. data/lib/rex/proto/http/client_request.rb +472 -0
  319. data/lib/rex/proto/http/handler.rb +25 -25
  320. data/lib/rex/proto/http/handler/erb.rb +104 -104
  321. data/lib/rex/proto/http/handler/proc.rb +37 -37
  322. data/lib/rex/proto/http/header.rb +149 -149
  323. data/lib/rex/proto/http/packet.rb +388 -382
  324. data/lib/rex/proto/http/request.rb +332 -335
  325. data/lib/rex/proto/http/response.rb +132 -72
  326. data/lib/rex/proto/http/server.rb +348 -338
  327. data/lib/rex/proto/iax2/call.rb +310 -310
  328. data/lib/rex/proto/iax2/client.rb +197 -197
  329. data/lib/rex/proto/iax2/codecs/alaw.rb +4 -4
  330. data/lib/rex/proto/iax2/codecs/mulaw.rb +4 -4
  331. data/lib/rex/proto/ipmi.rb +57 -0
  332. data/lib/rex/proto/ipmi/channel_auth_reply.rb +88 -0
  333. data/lib/rex/proto/ipmi/open_session_reply.rb +35 -0
  334. data/lib/rex/proto/ipmi/rakp2.rb +35 -0
  335. data/lib/rex/proto/ipmi/utils.rb +125 -0
  336. data/lib/rex/proto/natpmp.rb +1 -5
  337. data/lib/rex/proto/natpmp/constants.rb +4 -4
  338. data/lib/rex/proto/natpmp/packet.rb +25 -25
  339. data/lib/rex/proto/ntlm/base.rb +271 -271
  340. data/lib/rex/proto/ntlm/constants.rb +61 -61
  341. data/lib/rex/proto/ntlm/crypt.rb +348 -352
  342. data/lib/rex/proto/ntlm/exceptions.rb +3 -3
  343. data/lib/rex/proto/ntlm/message.rb +468 -471
  344. data/lib/rex/proto/ntlm/utils.rb +746 -746
  345. data/lib/rex/proto/pjl.rb +30 -0
  346. data/lib/rex/proto/pjl/client.rb +162 -0
  347. data/lib/rex/proto/proxy/socks4a.rb +440 -440
  348. data/lib/rex/proto/rfb.rb +1 -8
  349. data/lib/rex/proto/rfb/cipher.rb +46 -49
  350. data/lib/rex/proto/rfb/client.rb +179 -182
  351. data/lib/rex/proto/rfb/constants.rb +18 -21
  352. data/lib/rex/proto/smb/client.rb +1954 -1843
  353. data/lib/rex/proto/smb/constants.rb +533 -516
  354. data/lib/rex/proto/smb/crypt.rb +21 -21
  355. data/lib/rex/proto/smb/evasions.rb +43 -43
  356. data/lib/rex/proto/smb/exceptions.rb +791 -791
  357. data/lib/rex/proto/smb/simpleclient.rb +142 -286
  358. data/lib/rex/proto/smb/simpleclient/open_file.rb +106 -0
  359. data/lib/rex/proto/smb/simpleclient/open_pipe.rb +57 -0
  360. data/lib/rex/proto/smb/utils.rb +81 -81
  361. data/lib/rex/proto/sunrpc/client.rb +158 -158
  362. data/lib/rex/proto/tftp.rb +0 -1
  363. data/lib/rex/proto/tftp/client.rb +289 -289
  364. data/lib/rex/proto/tftp/constants.rb +9 -10
  365. data/lib/rex/proto/tftp/server.rb +466 -467
  366. data/lib/rex/random_identifier_generator.rb +176 -0
  367. data/lib/rex/registry.rb +1 -1
  368. data/lib/rex/registry/hive.rb +88 -88
  369. data/lib/rex/registry/lfkey.rb +25 -25
  370. data/lib/rex/registry/nodekey.rb +30 -30
  371. data/lib/rex/registry/regf.rb +10 -10
  372. data/lib/rex/registry/valuekey.rb +43 -43
  373. data/lib/rex/registry/valuelist.rb +13 -13
  374. data/lib/rex/ropbuilder/rop.rb +254 -253
  375. data/lib/rex/script.rb +21 -22
  376. data/lib/rex/script/base.rb +51 -50
  377. data/lib/rex/script/meterpreter.rb +2 -2
  378. data/lib/rex/service.rb +24 -24
  379. data/lib/rex/service_manager.rb +132 -132
  380. data/lib/rex/services/local_relay.rb +398 -398
  381. data/lib/rex/socket.rb +758 -763
  382. data/lib/rex/socket/comm.rb +95 -95
  383. data/lib/rex/socket/comm/local.rb +507 -440
  384. data/lib/rex/socket/ip.rb +118 -118
  385. data/lib/rex/socket/parameters.rb +351 -350
  386. data/lib/rex/socket/range_walker.rb +445 -368
  387. data/lib/rex/socket/ssl_tcp.rb +323 -317
  388. data/lib/rex/socket/ssl_tcp_server.rb +173 -158
  389. data/lib/rex/socket/subnet_walker.rb +48 -48
  390. data/lib/rex/socket/switch_board.rb +259 -259
  391. data/lib/rex/socket/tcp.rb +58 -56
  392. data/lib/rex/socket/tcp_server.rb +42 -42
  393. data/lib/rex/socket/udp.rb +152 -152
  394. data/lib/rex/sslscan/result.rb +200 -0
  395. data/lib/rex/sslscan/scanner.rb +205 -0
  396. data/lib/rex/struct2.rb +0 -1
  397. data/lib/rex/struct2/c_struct.rb +162 -163
  398. data/lib/rex/struct2/c_struct_template.rb +21 -22
  399. data/lib/rex/struct2/constant.rb +6 -7
  400. data/lib/rex/struct2/element.rb +30 -31
  401. data/lib/rex/struct2/generic.rb +60 -61
  402. data/lib/rex/struct2/restraint.rb +40 -41
  403. data/lib/rex/struct2/s_string.rb +60 -61
  404. data/lib/rex/struct2/s_struct.rb +97 -98
  405. data/lib/rex/sync.rb +0 -1
  406. data/lib/rex/sync/event.rb +62 -72
  407. data/lib/rex/sync/read_write_lock.rb +149 -149
  408. data/lib/rex/sync/ref.rb +42 -42
  409. data/lib/rex/sync/thread_safe.rb +59 -59
  410. data/lib/rex/text.rb +1803 -1315
  411. data/lib/rex/thread_factory.rb +25 -25
  412. data/lib/rex/time.rb +44 -44
  413. data/lib/rex/transformer.rb +91 -91
  414. data/lib/rex/ui/interactive.rb +265 -265
  415. data/lib/rex/ui/output.rb +66 -60
  416. data/lib/rex/ui/progress_tracker.rb +79 -79
  417. data/lib/rex/ui/subscriber.rb +144 -134
  418. data/lib/rex/ui/text/color.rb +76 -76
  419. data/lib/rex/ui/text/dispatcher_shell.rb +512 -505
  420. data/lib/rex/ui/text/input.rb +96 -96
  421. data/lib/rex/ui/text/input/buffer.rb +58 -58
  422. data/lib/rex/ui/text/input/readline.rb +114 -114
  423. data/lib/rex/ui/text/input/socket.rb +77 -77
  424. data/lib/rex/ui/text/input/stdio.rb +24 -24
  425. data/lib/rex/ui/text/irb_shell.rb +45 -41
  426. data/lib/rex/ui/text/output.rb +64 -60
  427. data/lib/rex/ui/text/output/buffer.rb +42 -42
  428. data/lib/rex/ui/text/output/buffer/stdout.rb +25 -0
  429. data/lib/rex/ui/text/output/file.rb +24 -24
  430. data/lib/rex/ui/text/output/socket.rb +24 -24
  431. data/lib/rex/ui/text/output/stdio.rb +29 -29
  432. data/lib/rex/ui/text/output/tee.rb +36 -36
  433. data/lib/rex/ui/text/progress_tracker.rb +37 -37
  434. data/lib/rex/ui/text/shell.rb +371 -361
  435. data/lib/rex/ui/text/table.rb +320 -284
  436. data/lib/rex/zip.rb +0 -1
  437. data/lib/rex/zip/archive.rb +115 -94
  438. data/lib/rex/zip/blocks.rb +101 -100
  439. data/lib/rex/zip/entry.rb +108 -99
  440. data/lib/rex/zip/jar.rb +261 -206
  441. data/lib/rex/zip/samples/comment.rb +1 -2
  442. data/lib/rex/zip/samples/mkwar.rb +12 -13
  443. data/lib/rex/zip/samples/mkzip.rb +1 -2
  444. data/lib/rex/zip/samples/recursive.rb +29 -30
  445. metadata +424 -446
  446. data/lib/rex/arch/sparc.rb.ut.rb +0 -19
  447. data/lib/rex/arch/x86.rb.ut.rb +0 -94
  448. data/lib/rex/assembly/nasm.rb.ut.rb +0 -23
  449. data/lib/rex/encoder/ndr.rb.ut.rb +0 -45
  450. data/lib/rex/encoder/xdr.rb.ut.rb +0 -30
  451. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -13
  452. data/lib/rex/encoding/xor.rb.ts.rb +0 -15
  453. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -22
  454. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -16
  455. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -16
  456. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -121
  457. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -14
  458. data/lib/rex/exceptions.rb.ut.rb +0 -45
  459. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -28
  460. data/lib/rex/exploitation/javascriptosdetect.js +0 -1014
  461. data/lib/rex/exploitation/javascriptosdetect.rb +0 -43
  462. data/lib/rex/exploitation/omelet.rb.ut.rb +0 -27
  463. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -280
  464. data/lib/rex/exploitation/seh.rb.ut.rb +0 -20
  465. data/lib/rex/file.rb.ut.rb +0 -17
  466. data/lib/rex/io/ring_buffer.rb.ut.rb +0 -135
  467. data/lib/rex/nop/opty2.rb.ut.rb +0 -24
  468. data/lib/rex/parser/arguments.rb.ut.rb +0 -68
  469. data/lib/rex/parser/ini.rb.ut.rb +0 -30
  470. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +0 -18
  471. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +0 -39
  472. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +0 -37
  473. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb.ut.rb +0 -52
  474. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +0 -43
  475. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +0 -128
  476. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb.ut.rb +0 -64
  477. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb.ut.rb +0 -29
  478. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb.ut.rb +0 -155
  479. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb.ut.rb +0 -128
  480. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +0 -124
  481. data/lib/rex/proto.rb.ts.rb +0 -9
  482. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -10
  483. data/lib/rex/proto/dcerpc/client.rb.ut.rb +0 -492
  484. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -86
  485. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -42
  486. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -57
  487. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -16
  488. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -47
  489. data/lib/rex/proto/drda.rb.ts.rb +0 -18
  490. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -24
  491. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -110
  492. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -85
  493. data/lib/rex/proto/http.rb.ts.rb +0 -13
  494. data/lib/rex/proto/http/client.rb.ut.rb +0 -96
  495. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -22
  496. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -1
  497. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -25
  498. data/lib/rex/proto/http/header.rb.ut.rb +0 -47
  499. data/lib/rex/proto/http/packet.rb.ut.rb +0 -166
  500. data/lib/rex/proto/http/request.rb.ut.rb +0 -215
  501. data/lib/rex/proto/http/response.rb.ut.rb +0 -150
  502. data/lib/rex/proto/http/server.rb.ut.rb +0 -80
  503. data/lib/rex/proto/ntlm.rb.ut.rb +0 -181
  504. data/lib/rex/proto/rfb.rb.ut.rb +0 -40
  505. data/lib/rex/proto/smb.rb.ts.rb +0 -9
  506. data/lib/rex/proto/smb/client.rb.ut.rb +0 -224
  507. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -19
  508. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -129
  509. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -21
  510. data/lib/rex/proto/tftp/server.rb.ut.rb +0 -29
  511. data/lib/rex/service_manager.rb.ut.rb +0 -33
  512. data/lib/rex/socket.rb.ut.rb +0 -108
  513. data/lib/rex/socket/comm/local.rb.ut.rb +0 -76
  514. data/lib/rex/socket/parameters.rb.ut.rb +0 -52
  515. data/lib/rex/socket/range_walker.rb.ut.rb +0 -56
  516. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -40
  517. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -62
  518. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -29
  519. data/lib/rex/socket/switch_board.rb.ut.rb +0 -53
  520. data/lib/rex/socket/tcp.rb.ut.rb +0 -65
  521. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -45
  522. data/lib/rex/socket/udp.rb.ut.rb +0 -45
  523. data/lib/rex/test.rb +0 -36
  524. data/lib/rex/text.rb.ut.rb +0 -193
  525. data/lib/rex/transformer.rb.ut.rb +0 -39
  526. data/lib/rex/ui/text/color.rb.ut.rb +0 -19
  527. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -35
  528. data/lib/rex/ui/text/table.rb.ut.rb +0 -56
@@ -1,9 +1,8 @@
1
- #!/usr/bin/env ruby
2
1
  # -*- coding: binary -*-
3
2
 
4
3
  #
5
4
  # ________________________________________________________________________________
6
- #
5
+ #
7
6
  # ,sSSs,,s, ,sSSSs, ALPHA 2: Zero-tolerance. (build 07)
8
7
  # SS" Y$P" SY" ,SY
9
8
  # iS' dY ,sS" Unicode-proof uppercase alphanumeric shellcode encoding.
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  # -*- coding: binary -*-
3
2
 
4
3
  require 'rex/encoder/alpha2/generic'
@@ -9,61 +8,61 @@ module Alpha2
9
8
 
10
9
  class AlphaMixed < Generic
11
10
 
12
- def self.gen_decoder_prefix(reg, offset)
13
- if (offset > 32)
14
- raise "Critical: Offset is greater than 32"
15
- end
11
+ def self.gen_decoder_prefix(reg, offset)
12
+ if (offset > 32)
13
+ raise "Critical: Offset is greater than 32"
14
+ end
16
15
 
17
- # use inc ebx as a nop here so we still pad correctly
18
- if (offset <= 16)
19
- nop = 'C' * offset
20
- mod = 'I' * (16 - offset) + nop + '7QZ' # dec ecx,,, push ecx, pop edx
21
- edxmod = 'J' * (17 - offset)
22
- else
23
- mod = 'A' * (offset - 16)
24
- nop = 'C' * (16 - mod.length)
25
- mod << nop + '7QZ'
26
- edxmod = 'B' * (17 - (offset - 16))
27
- end
28
- regprefix = {
29
- 'EAX' => 'PY' + mod, # push eax, pop ecx
30
- 'ECX' => 'I' + mod, # dec ecx
31
- 'EDX' => edxmod + nop + '7RY', # dec edx,,, push edx, pop ecx
32
- 'EBX' => 'SY' + mod, # push ebx, pop ecx
33
- 'ESP' => 'TY' + mod, # push esp, pop ecx
34
- 'EBP' => 'UY' + mod, # push ebp, pop ecx
35
- 'ESI' => 'VY' + mod, # push esi, pop ecx
36
- 'EDI' => 'WY' + mod, # push edi, pop ecx
37
- }
16
+ # use inc ebx as a nop here so we still pad correctly
17
+ if (offset <= 16)
18
+ nop = 'C' * offset
19
+ mod = 'I' * (16 - offset) + nop + '7QZ' # dec ecx,,, push ecx, pop edx
20
+ edxmod = 'J' * (17 - offset)
21
+ else
22
+ mod = 'A' * (offset - 16)
23
+ nop = 'C' * (16 - mod.length)
24
+ mod << nop + '7QZ'
25
+ edxmod = 'B' * (17 - (offset - 16))
26
+ end
27
+ regprefix = {
28
+ 'EAX' => 'PY' + mod, # push eax, pop ecx
29
+ 'ECX' => 'I' + mod, # dec ecx
30
+ 'EDX' => edxmod + nop + '7RY', # dec edx,,, push edx, pop ecx
31
+ 'EBX' => 'SY' + mod, # push ebx, pop ecx
32
+ 'ESP' => 'TY' + mod, # push esp, pop ecx
33
+ 'EBP' => 'UY' + mod, # push ebp, pop ecx
34
+ 'ESI' => 'VY' + mod, # push esi, pop ecx
35
+ 'EDI' => 'WY' + mod, # push edi, pop ecx
36
+ }
38
37
 
39
- reg.upcase!
40
- if (not regprefix.keys.include? reg)
41
- raise ArgumentError.new("Invalid register name")
42
- end
43
- return regprefix[reg]
44
- end
38
+ reg.upcase!
39
+ if (not regprefix.keys.include? reg)
40
+ raise ArgumentError.new("Invalid register name")
41
+ end
42
+ return regprefix[reg]
43
+ end
45
44
 
46
- def self.gen_decoder(reg, offset)
47
- decoder =
48
- gen_decoder_prefix(reg, offset) +
49
- "jA" + # push 0x41
50
- "X" + # pop eax
51
- "P" + # push eax
52
- "0A0" + # xor byte [ecx+30], al
53
- "A" + # inc ecx <---
54
- "kAAQ" + # imul eax, [ecx+42], 51 -> 10 |
55
- "2AB" + # xor al, [ecx + 42] |
56
- "2BB" + # xor al, [edx + 42] |
57
- "0BB" + # xor [edx + 42], al |
58
- "A" + # inc ecx |
59
- "B" + # inc edx |
60
- "X" + # pop eax |
61
- "P" + # push eax |
62
- "8AB" + # cmp [ecx + 42], al |
63
- "uJ" + # jnz short -------------------------
64
- "I" # first encoded char, fixes the above J
45
+ def self.gen_decoder(reg, offset)
46
+ decoder =
47
+ gen_decoder_prefix(reg, offset) +
48
+ "jA" + # push 0x41
49
+ "X" + # pop eax
50
+ "P" + # push eax
51
+ "0A0" + # xor byte [ecx+30], al
52
+ "A" + # inc ecx <---
53
+ "kAAQ" + # imul eax, [ecx+42], 51 -> 10 |
54
+ "2AB" + # xor al, [ecx + 42] |
55
+ "2BB" + # xor al, [edx + 42] |
56
+ "0BB" + # xor [edx + 42], al |
57
+ "A" + # inc ecx |
58
+ "B" + # inc edx |
59
+ "X" + # pop eax |
60
+ "P" + # push eax |
61
+ "8AB" + # cmp [ecx + 42], al |
62
+ "uJ" + # jnz short -------------------------
63
+ "I" # first encoded char, fixes the above J
65
64
 
66
- return decoder
67
- end
65
+ return decoder
66
+ end
68
67
 
69
68
  end end end end
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  # -*- coding: binary -*-
3
2
 
4
3
  require 'rex/encoder/alpha2/generic'
@@ -8,73 +7,73 @@ module Encoder
8
7
  module Alpha2
9
8
 
10
9
  class AlphaUpper < Generic
11
- def self.default_accepted_chars ; ('B' .. 'Z').to_a + ('0' .. '9').to_a ; end
10
+ def self.default_accepted_chars ; ('B' .. 'Z').to_a + ('0' .. '9').to_a ; end
12
11
 
13
- def self.gen_decoder_prefix(reg, offset)
14
- if (offset > 20)
15
- raise "Critical: Offset is greater than 20"
16
- end
12
+ def self.gen_decoder_prefix(reg, offset)
13
+ if (offset > 20)
14
+ raise "Critical: Offset is greater than 20"
15
+ end
17
16
 
18
- # use inc ebx as a nop here so we still pad correctly
19
- if (offset <= 10)
20
- nop = 'C' * offset
21
- mod = 'I' * (10 - offset) + nop + 'QZ' # dec ecx,,, push ecx, pop edx
22
- edxmod = 'J' * (11 - offset)
23
- else
24
- mod = 'A' * (offset - 10)
25
- nop = 'C' * (10 - mod.length)
26
- mod << nop + 'QZ'
27
- edxmod = 'B' * (11 - (offset - 10))
28
- end
29
- regprefix = {
30
- 'EAX' => 'PY' + mod, # push eax, pop ecx
31
- 'ECX' => 'I' + mod, # dec ecx
32
- 'EDX' => edxmod + nop + 'RY', # mod edx,,, push edx, pop ecx
33
- 'EBX' => 'SY' + mod, # push ebx, pop ecx
34
- 'ESP' => 'TY' + mod, # push esp, pop ecx
35
- 'EBP' => 'UY' + mod, # push ebp, pop ecx
36
- 'ESI' => 'VY' + mod, # push esi, pop ecx
37
- 'EDI' => 'WY' + mod, # push edi, pop edi
38
- }
17
+ # use inc ebx as a nop here so we still pad correctly
18
+ if (offset <= 10)
19
+ nop = 'C' * offset
20
+ mod = 'I' * (10 - offset) + nop + 'QZ' # dec ecx,,, push ecx, pop edx
21
+ edxmod = 'J' * (11 - offset)
22
+ else
23
+ mod = 'A' * (offset - 10)
24
+ nop = 'C' * (10 - mod.length)
25
+ mod << nop + 'QZ'
26
+ edxmod = 'B' * (11 - (offset - 10))
27
+ end
28
+ regprefix = {
29
+ 'EAX' => 'PY' + mod, # push eax, pop ecx
30
+ 'ECX' => 'I' + mod, # dec ecx
31
+ 'EDX' => edxmod + nop + 'RY', # mod edx,,, push edx, pop ecx
32
+ 'EBX' => 'SY' + mod, # push ebx, pop ecx
33
+ 'ESP' => 'TY' + mod, # push esp, pop ecx
34
+ 'EBP' => 'UY' + mod, # push ebp, pop ecx
35
+ 'ESI' => 'VY' + mod, # push esi, pop ecx
36
+ 'EDI' => 'WY' + mod, # push edi, pop edi
37
+ }
39
38
 
40
- reg.upcase!
41
- if (not regprefix.keys.include? reg)
42
- raise ArgumentError.new("Invalid register name")
43
- end
44
- return regprefix[reg]
39
+ reg.upcase!
40
+ if (not regprefix.keys.include? reg)
41
+ raise ArgumentError.new("Invalid register name")
42
+ end
43
+ return regprefix[reg]
45
44
 
46
- end
45
+ end
47
46
 
48
- def self.gen_decoder(reg, offset)
49
- decoder =
50
- gen_decoder_prefix(reg, offset) +
51
- "V" + # push esi
52
- "T" + # push esp
53
- "X" + # pop eax
54
- "30" + # xor esi, [eax]
55
- "V" + # push esi
56
- "X" + # pop eax
57
- "4A" + # xor al, 41
58
- "P" + # push eax
59
- "0A3" + # xor [ecx+33], al
60
- "H" + # dec eax
61
- "H" + # dec eax
62
- "0A0" + # xor [ecx+30], al
63
- "0AB" + # xor [ecx+42], al
64
- "A" + # inc ecx <---------------
65
- "A" + # inc ecx |
66
- "B" + # inc edx |
67
- "TAAQ" + # imul eax, [ecx+41], 10 * |
68
- "2AB" + # xor al [ecx+42] |
69
- "2BB" + # xor al, [edx+42] |
70
- "0BB" + # xor [edx+42], al |
71
- "X" + # pop eax |
72
- "P" + # push eax |
73
- "8AC" + # cmp [ecx+43], al |
74
- "JJ" + # jnz * --------------------
75
- "I" # first encoded char, fixes the above J
47
+ def self.gen_decoder(reg, offset)
48
+ decoder =
49
+ gen_decoder_prefix(reg, offset) +
50
+ "V" + # push esi
51
+ "T" + # push esp
52
+ "X" + # pop eax
53
+ "30" + # xor esi, [eax]
54
+ "V" + # push esi
55
+ "X" + # pop eax
56
+ "4A" + # xor al, 41
57
+ "P" + # push eax
58
+ "0A3" + # xor [ecx+33], al
59
+ "H" + # dec eax
60
+ "H" + # dec eax
61
+ "0A0" + # xor [ecx+30], al
62
+ "0AB" + # xor [ecx+42], al
63
+ "A" + # inc ecx <---------------
64
+ "A" + # inc ecx |
65
+ "B" + # inc edx |
66
+ "TAAQ" + # imul eax, [ecx+41], 10 * |
67
+ "2AB" + # xor al [ecx+42] |
68
+ "2BB" + # xor al, [edx+42] |
69
+ "0BB" + # xor [edx+42], al |
70
+ "X" + # pop eax |
71
+ "P" + # push eax |
72
+ "8AC" + # cmp [ecx+43], al |
73
+ "JJ" + # jnz * --------------------
74
+ "I" # first encoded char, fixes the above J
76
75
 
77
- return decoder
78
- end
76
+ return decoder
77
+ end
79
78
 
80
79
  end end end end
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  # -*- coding: binary -*-
3
2
 
4
3
  require 'rex/text'
@@ -9,83 +8,83 @@ module Alpha2
9
8
 
10
9
  class Generic
11
10
 
12
- # Note: 'A' is presumed to be accepted, but excluded from the accepted characters, because it serves as the terminator
13
- def Generic.default_accepted_chars ; ('a' .. 'z').to_a + ('B' .. 'Z').to_a + ('0' .. '9').to_a ; end
14
-
15
- def Generic.gen_decoder_prefix(reg, offset)
16
- # Should never happen - have to pick a specifc
17
- # encoding:
18
- # alphamixed, alphaupper, unicodemixed, unicodeupper
19
- ''
20
- end
21
-
22
- def Generic.gen_decoder(reg, offset)
23
- # same as above
24
- return ''
25
- end
26
-
27
- def Generic.gen_second(block, base)
28
- # XOR encoder for ascii - unicode uses additive
29
- (block^base)
30
- end
31
-
32
- def Generic.encode_byte(block, badchars)
33
- accepted_chars = default_accepted_chars.dup
34
-
35
- badchars.each_char {|c| accepted_chars.delete(c) } if badchars
36
-
37
- # No, not nipple.
38
- nibble_chars = Array.new(0x10) {[]}
39
- accepted_chars.each {|c| nibble_chars[c.unpack('C')[0] & 0x0F].push(c) }
40
-
41
- poss_encodings = []
42
-
43
- block_low_nibble = block & 0x0F
44
- block_high_nibble = block >> 4
45
-
46
- # Get list of chars suitable for expressing lower part of byte
47
- first_chars = nibble_chars[block_low_nibble]
48
-
49
- # Build a list of possible encodings
50
- first_chars.each do |first_char|
51
- first_high_nibble = first_char.unpack('C')[0] >> 4
52
-
53
- # In the decoding process, the low nibble of the second char gets combined
54
- # (either ADDed or XORed depending on the encoder) with the high nibble of the first char,
55
- # and we want the high nibble of our input byte to result
56
- second_low_nibble = gen_second(block_high_nibble, first_high_nibble) & 0x0F
57
-
58
- # Find valid second chars for this first char and add each combination to our possible encodings
59
- second_chars = nibble_chars[second_low_nibble]
60
- second_chars.each {|second_char| poss_encodings.push(second_char + first_char) }
61
- end
62
-
63
- if poss_encodings.empty?
64
- raise RuntimeError, "No encoding of #{"0x%.2X" % block} possible with limited character set"
65
- end
66
-
67
- # Return a random encoding
68
- poss_encodings[rand(poss_encodings.length)]
69
- end
70
-
71
- def Generic.encode(buf, reg, offset, badchars = '')
72
- encoded = gen_decoder(reg, offset)
73
-
74
- buf.each_byte {
75
- |block|
76
-
77
- encoded << encode_byte(block, badchars)
78
- }
79
-
80
- encoded << add_terminator()
81
-
82
- return encoded
83
- end
84
-
85
- # 'A' signifies the end of the encoded shellcode
86
- def Generic.add_terminator()
87
- 'AA'
88
- end
11
+ # Note: 'A' is presumed to be accepted, but excluded from the accepted characters, because it serves as the terminator
12
+ def Generic.default_accepted_chars ; ('a' .. 'z').to_a + ('B' .. 'Z').to_a + ('0' .. '9').to_a ; end
13
+
14
+ def Generic.gen_decoder_prefix(reg, offset)
15
+ # Should never happen - have to pick a specifc
16
+ # encoding:
17
+ # alphamixed, alphaupper, unicodemixed, unicodeupper
18
+ ''
19
+ end
20
+
21
+ def Generic.gen_decoder(reg, offset)
22
+ # same as above
23
+ return ''
24
+ end
25
+
26
+ def Generic.gen_second(block, base)
27
+ # XOR encoder for ascii - unicode uses additive
28
+ (block^base)
29
+ end
30
+
31
+ def Generic.encode_byte(block, badchars)
32
+ accepted_chars = default_accepted_chars.dup
33
+
34
+ badchars.each_char {|c| accepted_chars.delete(c) } if badchars
35
+
36
+ # No, not nipple.
37
+ nibble_chars = Array.new(0x10) {[]}
38
+ accepted_chars.each {|c| nibble_chars[c.unpack('C')[0] & 0x0F].push(c) }
39
+
40
+ poss_encodings = []
41
+
42
+ block_low_nibble = block & 0x0F
43
+ block_high_nibble = block >> 4
44
+
45
+ # Get list of chars suitable for expressing lower part of byte
46
+ first_chars = nibble_chars[block_low_nibble]
47
+
48
+ # Build a list of possible encodings
49
+ first_chars.each do |first_char|
50
+ first_high_nibble = first_char.unpack('C')[0] >> 4
51
+
52
+ # In the decoding process, the low nibble of the second char gets combined
53
+ # (either ADDed or XORed depending on the encoder) with the high nibble of the first char,
54
+ # and we want the high nibble of our input byte to result
55
+ second_low_nibble = gen_second(block_high_nibble, first_high_nibble) & 0x0F
56
+
57
+ # Find valid second chars for this first char and add each combination to our possible encodings
58
+ second_chars = nibble_chars[second_low_nibble]
59
+ second_chars.each {|second_char| poss_encodings.push(second_char + first_char) }
60
+ end
61
+
62
+ if poss_encodings.empty?
63
+ raise RuntimeError, "No encoding of #{"0x%.2X" % block} possible with limited character set"
64
+ end
65
+
66
+ # Return a random encoding
67
+ poss_encodings[rand(poss_encodings.length)]
68
+ end
69
+
70
+ def Generic.encode(buf, reg, offset, badchars = '')
71
+ encoded = gen_decoder(reg, offset)
72
+
73
+ buf.each_byte {
74
+ |block|
75
+
76
+ encoded << encode_byte(block, badchars)
77
+ }
78
+
79
+ encoded << add_terminator()
80
+
81
+ return encoded
82
+ end
83
+
84
+ # 'A' signifies the end of the encoded shellcode
85
+ def Generic.add_terminator()
86
+ 'AA'
87
+ end
89
88
 
90
89
  end end end end
91
90
 
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  # -*- coding: binary -*-
3
2
 
4
3
  require 'rex/encoder/alpha2/generic'
@@ -8,105 +7,110 @@ module Encoder
8
7
  module Alpha2
9
8
 
10
9
  class UnicodeMixed < Generic
11
-
12
- def self.gen_second(block, base)
13
- # unicode uses additive encoding
14
- (block - base)
15
- end
16
-
17
- def self.gen_decoder_prefix(reg, offset)
18
- if (offset > 21)
19
- raise "Critical: Offset is greater than 21"
20
- end
21
10
 
22
- # offset untested for unicode :(
23
- if (offset <= 14)
24
- nop = 'CP' * offset
25
- mod = 'IA' * (14 - offset) + nop # dec ecx,,, push ecx, pop edx
26
- else
27
- mod = 'AA' * (offset - 14) # inc ecx
28
- nop = 'CP' * (14 - mod.length)
29
- mod += nop
30
- end
31
- regprefix = { # nops ignored below
32
- 'EAX' => 'PPYA' + mod, # push eax, pop ecx
33
- 'ECX' => mod + "4444", # dec ecx
34
- 'EDX' => 'RRYA' + mod, # push edx, pop ecx
35
- 'EBX' => 'SSYA' + mod, # push ebx, pop ecx
36
- 'ESP' => 'TUYA' + mod, # push esp, pop ecx
37
- 'EBP' => 'UUYA' + mod, # push ebp, pop ecx
38
- 'ESI' => 'VVYA' + mod, # push esi, pop ecx
39
- 'EDI' => 'WWYA' + mod, # push edi, pop edi
40
- }
11
+ def self.gen_second(block, base)
12
+ # unicode uses additive encoding
13
+ (block - base)
14
+ end
41
15
 
42
- return regprefix[reg]
43
- end
16
+ def self.gen_decoder_prefix(reg, offset)
17
+ if (offset > 21)
18
+ raise "Critical: Offset is greater than 21"
19
+ end
44
20
 
45
- def self.gen_decoder(reg, offset)
46
- decoder =
47
- gen_decoder_prefix(reg, offset) +
48
- "j" + # push 0
49
- "XA" + # pop eax, NOP
50
- "QA" + # push ecx, NOP
51
- "DA" + # inc esp, NOP
52
- "ZA" + # pop edx, NOP
53
- "BA" + # inc edx, NOP
54
- "RA" + # push edx, NOP
55
- "LA" + # dec esp, NOP
56
- "YA" + # pop ecx, NOP
57
- "IA" + # dec ecx, NOP
58
- "QA" + # push ecx, NOP
59
- "IA" + # dec ecx, NOP
60
- "QA" + # push ecx, NOP
61
- "IA" + # dec ecx, NOP
62
- "hAAA" + # push 00410041, NOP
63
- "Z" + # pop edx
64
- "1A" + # add [ecx], dh NOP
65
- "IA" + # dec ecx, NOP
66
- "IA" + # dec ecx, NOP
67
- "J" + # dec edx
68
- "1" + # add [ecx], dh
69
- "1A" + # add [ecx], dh NOP
70
- "IA" + # dec ecx, NOP
71
- "IA" + # dec ecx, NOP
72
- "BA" + # inc edx, NOP
73
- "BA" + # inc edx, NOP
74
- "B" + # inc edx
75
- "Q" + # add [ecx], dl
76
- "I" + # dec ecx
77
- "1A" + # add [ecx], dh NOP
78
- "I" + # dec ecx
79
- "Q" + # add [ecx], dl
80
- "IA" + # dec ecx, NOP
81
- "I" + # dec ecx
82
- "Q" + # add [ecx], dh
83
- "I" + # dec ecx
84
- "1" + # add [ecx], dh
85
- "1" + # add [ecx], dh
86
- "1A" + # add [ecx], dh NOP
87
- "IA" + # dec ecx, NOP
88
- "J" + # dec edx
89
- "Q" + # add [ecx], dl
90
- "YA" + # pop ecx, NOP
91
- "Z" + # pop edx
92
- "B" + # add [edx], al
93
- "A" + # inc ecx <-------
94
- "B" + # add [edx], al |
95
- "A" + # inc ecx |
96
- "B" + # add [edx], al |
97
- "A" + # inc ecx |
98
- "B" + # add [edx], al |
99
- "A" + # inc ecx |
100
- "B" + # add [edx], al |
101
- "kM" + # imul eax, [eax], 10 * |
102
- "A" + # add [edx], al |
103
- "G" + # inc edi |
104
- "B" + # add [edx], al |
105
- "9" + # cmp [eax], eax |
106
- "u" + # jnz ------------------
107
- "4JB"
21
+ # offset untested for unicode :(
22
+ if (offset <= 14)
23
+ nop = 'CP' * offset
24
+ mod = 'IA' * (14 - offset) + nop # dec ecx,,, push ecx, pop edx
25
+ else
26
+ mod = 'AA' * (offset - 14) # inc ecx
27
+ nop = 'CP' * (14 - mod.length)
28
+ mod += nop
29
+ end
30
+ regprefix = { # nops ignored below
31
+ 'EAX' => 'PPYA' + mod, # push eax, pop ecx
32
+ 'ECX' => mod + "4444", # dec ecx
33
+ 'EDX' => 'RRYA' + mod, # push edx, pop ecx
34
+ 'EBX' => 'SSYA' + mod, # push ebx, pop ecx
35
+ 'ESP' => 'TUYA' + mod, # push esp, pop ecx
36
+ 'EBP' => 'UUYA' + mod, # push ebp, pop ecx
37
+ 'ESI' => 'VVYA' + mod, # push esi, pop ecx
38
+ 'EDI' => 'WWYA' + mod, # push edi, pop edi
39
+ }
108
40
 
109
- return decoder
110
- end
41
+ prefix = regprefix[reg.upcase]
42
+ if prefix.nil?
43
+ raise "Critical: Invalid register"
44
+ end
45
+
46
+ return prefix
47
+ end
48
+
49
+ def self.gen_decoder(reg, offset)
50
+ decoder =
51
+ gen_decoder_prefix(reg, offset) +
52
+ "j" + # push 0
53
+ "XA" + # pop eax, NOP
54
+ "QA" + # push ecx, NOP
55
+ "DA" + # inc esp, NOP
56
+ "ZA" + # pop edx, NOP
57
+ "BA" + # inc edx, NOP
58
+ "RA" + # push edx, NOP
59
+ "LA" + # dec esp, NOP
60
+ "YA" + # pop ecx, NOP
61
+ "IA" + # dec ecx, NOP
62
+ "QA" + # push ecx, NOP
63
+ "IA" + # dec ecx, NOP
64
+ "QA" + # push ecx, NOP
65
+ "IA" + # dec ecx, NOP
66
+ "hAAA" + # push 00410041, NOP
67
+ "Z" + # pop edx
68
+ "1A" + # add [ecx], dh NOP
69
+ "IA" + # dec ecx, NOP
70
+ "IA" + # dec ecx, NOP
71
+ "J" + # dec edx
72
+ "1" + # add [ecx], dh
73
+ "1A" + # add [ecx], dh NOP
74
+ "IA" + # dec ecx, NOP
75
+ "IA" + # dec ecx, NOP
76
+ "BA" + # inc edx, NOP
77
+ "BA" + # inc edx, NOP
78
+ "B" + # inc edx
79
+ "Q" + # add [ecx], dl
80
+ "I" + # dec ecx
81
+ "1A" + # add [ecx], dh NOP
82
+ "I" + # dec ecx
83
+ "Q" + # add [ecx], dl
84
+ "IA" + # dec ecx, NOP
85
+ "I" + # dec ecx
86
+ "Q" + # add [ecx], dh
87
+ "I" + # dec ecx
88
+ "1" + # add [ecx], dh
89
+ "1" + # add [ecx], dh
90
+ "1A" + # add [ecx], dh NOP
91
+ "IA" + # dec ecx, NOP
92
+ "J" + # dec edx
93
+ "Q" + # add [ecx], dl
94
+ "YA" + # pop ecx, NOP
95
+ "Z" + # pop edx
96
+ "B" + # add [edx], al
97
+ "A" + # inc ecx <-------
98
+ "B" + # add [edx], al |
99
+ "A" + # inc ecx |
100
+ "B" + # add [edx], al |
101
+ "A" + # inc ecx |
102
+ "B" + # add [edx], al |
103
+ "A" + # inc ecx |
104
+ "B" + # add [edx], al |
105
+ "kM" + # imul eax, [eax], 10 * |
106
+ "A" + # add [edx], al |
107
+ "G" + # inc edi |
108
+ "B" + # add [edx], al |
109
+ "9" + # cmp [eax], eax |
110
+ "u" + # jnz ------------------
111
+ "4JB"
112
+
113
+ return decoder
114
+ end
111
115
 
112
116
  end end end end