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,28 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # -*- coding: binary -*-
3
-
4
- $:.unshift(File.join(File.dirname(__FILE__), '..', '..'))
5
-
6
- require 'test/unit'
7
- require 'rex/exploitation/egghunter'
8
-
9
- class Rex::Exploitation::Egghunter::UnitTest < Test::Unit::TestCase
10
-
11
- Klass = Rex::Exploitation::Egghunter
12
-
13
- def test_egghunter
14
- payload = "\xcc" * 1023
15
-
16
- r = Klass.new('bogus')
17
- assert_nil(r.generate(payload))
18
-
19
- r = Klass.new('win')
20
- assert_nil(r.generate(payload))
21
-
22
- r = Klass.new('win', ARCH_X86)
23
- assert_not_nil(r.generate(payload))
24
- assert_not_nil(r.generate(payload)[0])
25
- assert_not_nil(r.generate(payload)[1])
26
- end
27
-
28
- end
@@ -1,1014 +0,0 @@
1
-
2
- // Case matters, see lib/msf/core/constants.rb
3
- // All of these should match up with constants in ::Msf::HttpClients
4
- clients_opera = "Opera";
5
- clients_ie = "MSIE";
6
- clients_ff = "Firefox";
7
- clients_chrome= "Chrome";
8
- clients_safari= "Safari";
9
-
10
- // All of these should match up with constants in ::Msf::OperatingSystems
11
- oses_linux = "Linux";
12
- oses_windows = "Microsoft Windows";
13
- oses_mac_osx = "Mac OS X";
14
- oses_freebsd = "FreeBSD";
15
- oses_netbsd = "NetBSD";
16
- oses_openbsd = "OpenBSD";
17
-
18
- // All of these should match up with the ARCH_* constants
19
- arch_armle = "armle";
20
- arch_x86 = "x86";
21
- arch_x86_64 = "x86_64";
22
- arch_ppc = "ppc";
23
-
24
- window.os_detect = {};
25
-
26
- /**
27
- * This can reliably detect browser versions for IE and Firefox even in the
28
- * presence of a spoofed User-Agent. OS detection is more fragile and
29
- * requires truthful navigator.appVersion and navigator.userAgent strings in
30
- * order to be accurate for more than just IE on Windows.
31
- **/
32
- window.os_detect.getVersion = function(){
33
- //Default values:
34
- var os_name;
35
- var os_flavor;
36
- var os_sp;
37
- var os_lang;
38
- var ua_name;
39
- var ua_version;
40
- var arch = "";
41
- var useragent = navigator.userAgent;
42
- // Trust but verify...
43
- var ua_is_lying = false;
44
-
45
- var version = "";
46
- var unknown_fingerprint = null;
47
-
48
- //--
49
- // Client
50
- //--
51
- if (window.opera) {
52
- ua_name = clients_opera;
53
- if (!navigator.userAgent.match(/Opera/)) {
54
- ua_is_lying = true;
55
- }
56
- // This seems to be completely accurate, e.g. "9.21" is the return
57
- // value of opera.version() when run on Opera 9.21
58
- ua_version = opera.version();
59
- if (!os_name) {
60
- // The 'inconspicuous' argument is there to give us a real value on
61
- // Opera 6 where, without it, the return value is supposedly
62
- // 'Hm, were you only as smart as Bjorn Vermo...'
63
- // though I have not verfied this claim.
64
- switch (opera.buildNumber('inconspicuous')) {
65
- case "344": // opera-9.0-20060616.1-static-qt.i386-en-344
66
- case "1347": // Opera 9.80 / Ubuntu 10.10 (Karmic Koala)
67
- case "2091": // opera-9.52-2091.gcc3-shared-qt3.i386.rpm
68
- case "2444": // opera-9.60.gcc4-shared-qt3.i386.rpm
69
- case "2474": // Opera 9.63 / Debian Testing (Lenny)
70
- case "4102": // Opera 10.00 / Ubuntu 8.04 LTS (Hardy Heron)
71
- case "6386": // 10.61
72
- os_name = oses_linux;
73
- break;
74
- case "1074": // Opera 11.50 / Windows XP
75
- case "1100": // Opera 11.52 / Windows XP
76
- case "3445": // 10.61
77
- case "3516": // Opera 10.63 / Windows XP
78
- case "7730": // Opera 8.54 / Windows XP
79
- case "8502": // "Opera 9 Eng Setup.exe"
80
- case "8679": // "Opera_9.10_Eng_Setup.exe"
81
- case "8771": // "Opera_9.20_Eng_Setup.exe"
82
- case "8776": // "Opera_9.21_Eng_Setup.exe"
83
- case "8801": // "Opera_9.22_Eng_Setup.exe"
84
- case "10108": // "Opera_952_10108_en.exe"
85
- case "10467": // "Opera_962_en_Setup.exe"
86
- case "10476": // Opera 9.63 / Windows XP
87
- case "WMD-50433": // Windows Mobile - "Mozilla/5.0 (Windows Mobile; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 10.00"
88
- os_name = oses_windows;
89
- break;
90
- case "2480": // Opera 9.64 / FreeBSD 7.0
91
- os_name = oses_freebsd;
92
- break;
93
- case "6386": // 10.61
94
- os_name = oses_mac_osx;
95
- break;
96
- case "1407":
97
- // In the case of mini versions, the UA is quite a bit
98
- // harder to spoof, so it's correspondingly easier to
99
- // trust. Unfortunately, despite being fairly truthful in
100
- // what OS it's running on, Opera mini seems to lie like a
101
- // rug in regards to the browser version.
102
- //
103
- // iPhone, iOS 5.0.1
104
- // Opera/9.80 (iPhone; Opera Mini/7.1.32694/27.1407; U; en) Presto/2.8.119 Version/11.10.10
105
- // Android 2.3.6, opera mini 7.1
106
- // Opera/9.80 (Android; Opera Mini/7.29530/27.1407; U; en) Presto/2.8.119 Version/11.101.10
107
- if (navigator.userAgent.indexOf("Android")) {
108
- os_name = oses_linux;
109
- os_flavor = "Android";
110
- } else if (navigator.userAgent.indexOf("iPhone")) {
111
- os_name = oses_mac_osx;
112
- os_flavor = "iPhone";
113
- }
114
- break;
115
- // A few are ambiguous, record them here
116
- case "1250":
117
- // Opera 9.80 / Windows XP
118
- // Opera 11.61 / Windows XP
119
- // Opera 11.61 / Debian 4.0 (Etch)
120
- break;
121
- default:
122
- unknown_fingerprint = opera.buildNumber('inconspicuous');
123
- break;
124
- }
125
- }
126
- } else if (typeof window.onmousewheel != 'undefined' && ! (typeof ScriptEngineMajorVersion == 'function') ) { // IE 10 now has onmousewheel
127
-
128
- // Then this is webkit, could be Safari or Chrome.
129
- // Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1
130
- // Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.78 Safari/532.5
131
- // Mozilla/5.0 (Linux; U; Android 2.2; en-au; GT-I9000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
132
- // Mozilla/5.0 (iPod; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8C148
133
- // Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405
134
- // Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3
135
-
136
- // Google Chrome has window.google (older versions), window.chromium (older versions), and window.window.chrome (3+)
137
- if (window.chromium || window.google || window.chrome) {
138
- ua_name = clients_chrome;
139
- search = "Chrome";
140
- } else {
141
- ua_name = clients_safari;
142
- search = "Version";
143
- }
144
-
145
- platform = navigator.platform.toLowerCase();
146
- // Just to be a pain, iPod and iPad both leave off "Safari" and
147
- // "Version" in the UA, see example above. Grab the webkit version
148
- // instead. =/
149
- if (platform.match(/ipod/)) {
150
- os_name = oses_mac_osx;
151
- os_flavor = "iPod";
152
- arch = arch_armle;
153
- search = "AppleWebKit";
154
- } else if (platform.match(/ipad/)) {
155
- os_name = oses_mac_osx;
156
- os_flavor = "iPad";
157
- arch = arch_armle;
158
- search = "AppleWebKit";
159
- } else if (platform.match(/iphone/)) {
160
- os_name = oses_mac_osx;
161
- os_flavor = "iPhone";
162
- arch = arch_armle;
163
- } else if (platform.match(/macintel/)) {
164
- os_name = oses_mac_osx;
165
- arch = arch_x86;
166
- } else if (platform.match(/linux/)) {
167
- os_name = oses_linux;
168
- if (platform.match(/x86_64/)) {
169
- arch = arch_x86_64;
170
- } else if (platform.match(/arm/)) {
171
- // Android and maemo
172
- arch = arch_armle;
173
- }
174
- } else if (platform.match(/windows/)) {
175
- os_name = oses_windows;
176
- }
177
-
178
- ua_version = this.searchVersion(search, navigator.userAgent);
179
- if (!ua_version || 0 == ua_version.length) {
180
- ua_is_lying = true;
181
- }
182
- } else if (!document.all && navigator.taintEnabled) {
183
- // Use taintEnabled to identify FF since other recent browsers
184
- // implement window.getComputedStyle now. For some reason, checking for
185
- // taintEnabled seems to cause IE 6 to stop parsing, so make sure this
186
- // isn't IE first.
187
- //
188
- // Then this is a Gecko derivative, assume Firefox since that's the
189
- // only one we have sploits for. We may need to revisit this in the
190
- // future. This works for multi/browser/mozilla_compareto against
191
- // Firefox and Mozilla, so it's probably good enough for now.
192
- ua_name = clients_ff;
193
- // Thanks to developer.mozilla.org "Firefox for developers" series for most
194
- // of these.
195
- if ('mozConnection' in navigator) {
196
- ua_version = "12.0";
197
- } else if ('mozVibrate' in navigator) {
198
- ua_version = "11.0";
199
- } else if ('mozCancelFullScreen' in document) {
200
- ua_version = "9.0";
201
- } else if ('insertAdjacentHTML' in document.body) {
202
- ua_version = "8.0";
203
- } else if ('ondeviceorientation' in window && !('createEntityReference' in document)) {
204
- ua_version = "7.0";
205
- } else if ('MozBlobBuilder' in window) {
206
- ua_version = "6.0";
207
- } else if ('isGenerator' in Function) {
208
- ua_version = "5.0";
209
- } else if ('isArray' in Array) {
210
- ua_version = "4.0";
211
- } else if (document.readyState) {
212
- ua_version = "3.6";
213
- } else if (String.trimRight) {
214
- ua_version = "3.5";
215
- } else if (document.getElementsByClassName) {
216
- ua_version = "3";
217
- } else if (window.Iterator) {
218
- ua_version = "2";
219
- } else if (Array.every) {
220
- ua_version = "1.5";
221
- } else {
222
- ua_version = "1";
223
- }
224
-
225
- if (navigator.oscpu != navigator.platform) {
226
- ua_is_lying = true;
227
- }
228
- // oscpu is unaffected by changes in the useragent and has values like:
229
- // "Linux i686"
230
- // "Windows NT 6.0"
231
- // haven't tested on 64-bit Windows
232
- version = navigator.oscpu;
233
- if (version.match(/i.86/)) {
234
- arch = arch_x86;
235
- }
236
- if (version.match(/x86_64/)) {
237
- arch = arch_x86_64;
238
- }
239
- if (version.match(/Windows/)) {
240
- os_name = oses_windows;
241
- switch(version) {
242
- case "Windows NT 5.0": os_flavor = "2000"; break;
243
- case "Windows NT 5.1": os_flavor = "XP"; break;
244
- case "Windows NT 5.2": os_flavor = "2003"; break;
245
- case "Windows NT 6.0": os_flavor = "Vista"; break;
246
- case "Windows NT 6.1": os_flavor = "7"; break;
247
- case "Windows NT 6.2": os_flavor = "8"; break;
248
- }
249
- }
250
- if (version.match(/Linux/)) {
251
- os_name = oses_linux;
252
- }
253
- // end navigator.oscpu checks
254
-
255
- // buildID is unaffected by changes in the useragent and typically has
256
- // the compile date which in some cases can be used to map to specific
257
- // Version & O/S (including Distro and even Arch). Depending upon the
258
- // buildID, sometime navigator.productSub will be needed.
259
- //
260
- // This technique, and the laboriously compiled associated table,
261
- // submitted by Mark Fioravanti.
262
-
263
- var buildid = navigator.buildID;
264
-
265
- switch(buildid) {
266
- case "2008041514": ua_version = "3.0.0.b5"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
267
- case "2008041515": ua_version = "3.0.0.b5"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
268
- case "2008052312": ua_version = "3.0.0"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
269
- case "2008052906": ua_version = "3.0.0"; os_name = oses_windows; break;
270
- case "2008052909": ua_version = "3.0.0.rc1"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
271
- case "2008052912": ua_version = "3.0.0"; os_name = oses_linux; break;
272
- case "2008060309": ua_version = "3.0.0"; os_name = oses_linux; os_flavor = "Ubuntu"; break;
273
- case "2008070205": ua_version = "2.0.0.16"; os_name = oses_windows; break;
274
- case "2008070206": ua_version = "3.0.1"; os_name = oses_linux; break;
275
- case "2008070208": ua_version = "3.0.1"; os_name = oses_windows; break;
276
- case "2008071222": ua_version = "3.0.1"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
277
- case "2008072820":
278
- switch (navigator.productSub) {
279
- case "2008072820": ua_version = "3.0.1"; os_name = oses_linux; break;
280
- case "2008092313": ua_version = "3.0.2"; os_name = oses_linux; break;
281
- } break;
282
- case "2008082909": ua_version = "2.0.0.17"; os_name = oses_windows; break;
283
- case "2008091618": ua_version = "3.0.2"; os_name = oses_linux; break;
284
- case "2008091620": ua_version = "3.0.2"; os_name = oses_windows; break;
285
- case "2008092313": ua_version = "3.0.3"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
286
- case "2008092416": ua_version = "3.0.3"; os_name = oses_linux; break;
287
- case "2008092417": ua_version = "3.0.3"; os_name = oses_windows; break;
288
- case "2008092510": ua_version = "3.0.4"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
289
- case "2008101315":
290
- switch (navigator.productSub) {
291
- case "2008101315": ua_version = "3.0.3"; os_name = oses_linux; break;
292
- case "2008111318": ua_version = "3.0.4"; os_name = oses_linux; arch = arch_x86; break;
293
- } break;
294
- case "2008102918": ua_version = "2.0.0.18"; os_name = oses_windows; break;
295
- case "2008102920": ua_version = "3.0.4"; break;
296
- case "2008112309": ua_version = "3.0.4"; os_name = oses_linux; os_flavor = "Debian"; break; // browsershots: Iceweasel 3.0.4 / Debian Testing (Lenny)
297
- case "2008111317": ua_version = "3.0.5"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
298
- case "2008111318": ua_version = "3.0.5"; os_name = oses_linux; os_flavor = "Ubuntu"; break;
299
- case "2008120119": ua_version = "2.0.0.19"; os_name = oses_windows; break;
300
- case "2008120121": ua_version = "3.0.5"; os_name = oses_linux; break;
301
- case "2008120122": ua_version = "3.0.5"; os_name = oses_windows; break;
302
- case "2008121623": ua_version = "2.0.0.19"; os_name = oses_linux; os_flavor = "Ubuntu"; break; // browsershots: Firefox 2.0.0.19 / Ubuntu 8.04 LTS (Hardy Heron)
303
- case "2008121709": ua_version = "2.0.0.20"; os_name = oses_windows; break;
304
- case "2009011912": ua_version = "3.0.6"; os_name = oses_linux; break;
305
- case "2009011913": ua_version = "3.0.6"; os_name = oses_windows; break;
306
- case "2009012615": ua_version = "3.0.6"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
307
- case "2009012616": ua_version = "3.0.6"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
308
- case "2009021906": ua_version = "3.0.7"; os_name = oses_linux; break;
309
- case "2009021910": ua_version = "3.0.7"; os_name = oses_windows; break;
310
- case "2009030422": ua_version = "3.0.8"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
311
- case "2009032608": ua_version = "3.0.8"; os_name = oses_linux; break;
312
- case "2009032609": ua_version = "3.0.8"; os_name = oses_windows; break;
313
- case "2009032711": ua_version = "3.0.9"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
314
- case "2009033100":
315
- switch (navigator.productSub) {
316
- case "2009033100": ua_version = "3.0.8"; os_name = oses_linux; os_flavor = "Ubuntu"; break;
317
- case "2009042113": ua_version = "3.0.9"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
318
- } break;
319
- case "2009040820": ua_version = "3.0.9"; os_name = oses_linux; break;
320
- case "2009040821": ua_version = "3.0.9"; os_name = oses_windows; break;
321
- case "2009042113": ua_version = "3.0.10"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
322
- case "2009042114": ua_version = "3.0.10"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
323
- case "2009042315": ua_version = "3.0.10"; os_name = oses_linux; break;
324
- case "2009042316": ua_version = "3.0.10"; os_name = oses_windows; break;
325
- case "20090427153806": ua_version = "3.5.0.b4"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86; break;
326
- case "20090427153807": ua_version = "3.5.0.b4"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86_64; break;
327
- case "2009060214": ua_version = "3.0.11"; os_name = oses_linux; break;
328
- case "2009060215": ua_version = "3.0.11"; os_name = oses_windows; break;
329
- case "2009060308":
330
- switch (navigator.productSub) {
331
- case "2009060308": ua_version = "3.0.11"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
332
- case "2009070811": ua_version = "3.0.12"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
333
- } break;
334
- case "2009060309":
335
- switch (navigator.productSub) {
336
- case "2009060309": ua_version = "3.0.11"; os_name = oses_linux; os_flavor = "Ubuntu"; break;
337
- case "2009070811": ua_version = "3.0.12"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
338
- } break;
339
- case "2009060310": ua_version = "3.0.11"; os_name = oses_linux; os_flavor = "BackTrack"; break;
340
- case "2009062005": ua_version = "3.0.11"; os_name = oses_linux; os_flavor = "PCLunixOS"; break;
341
- case "20090624012136": ua_version = "3.5.0"; os_name = oses_mac_osx; break;
342
- case "20090624012820": ua_version = "3.5.0"; os_name = oses_linux; break;
343
- case "20090701234143": ua_version = "3.5.0"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86; break;
344
- case "20090702060527": ua_version = "3.5.0"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86_64; break;
345
- case "2009070610": ua_version = "3.0.12"; os_name = oses_linux; break;
346
- case "2009070611": ua_version = "3.0.12"; os_name = oses_windows; break;
347
- case "2009070811": ua_version = "3.0.13"; os_name = oses_linux; os_flavor = "Ubuntu"; break;
348
- case "20090715083437": ua_version = "3.5.1"; os_name = oses_mac_osx; break;
349
- case "20090715083816": ua_version = "3.5.1"; os_name = oses_linux; break;
350
- case "20090715094852": ua_version = "3.5.1"; os_name = oses_windows; break;
351
- case "2009072202": ua_version = "3.0.12"; os_name = oses_linux; os_flavor = "Oracle"; break;
352
- case "2009072711": ua_version = "3.0.12"; os_name = oses_linux; os_flavor = "CentOS"; break;
353
- case "20090729211433": ua_version = "3.5.2"; os_name = oses_mac_osx; break;
354
- case "20090729211829": ua_version = "3.5.2"; os_name = oses_linux; break;
355
- case "20090729225027": ua_version = "3.5.2"; os_name = oses_windows; break;
356
- case "2009073021": ua_version = "3.0.13"; os_name = oses_linux; break;
357
- case "2009073022": ua_version = "3.0.13"; os_name = oses_windows; break;
358
- case "20090824085414": ua_version = "3.5.3"; os_name = oses_mac_osx; break;
359
- case "20090824085743": ua_version = "3.5.3"; os_name = oses_linux; break;
360
- case "20090824101458": ua_version = "3.5.3"; os_name = oses_windows; break;
361
- case "2009082707": ua_version = "3.0.14"; break;
362
- case "2009090216": ua_version = "3.0.14"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
363
- case "20090914014745": ua_version = "3.5.3"; os_name = oses_linux; os_flavor = "Mandriva"; arch = arch_x86; break;
364
- case "20090915065903": ua_version = "3.5.3"; os_name = oses_linux; os_flavor = "Sabayon"; arch = arch_x86_64; break;
365
- case "20090915070141": ua_version = "3.5.3"; os_name = oses_linux; os_flavor = "Sabayon"; arch = arch_x86; break;
366
- case "20091007090112": ua_version = "3.5.3"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break; // Could also be Mint x86
367
- case "20091007095328": ua_version = "3.5.3"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break; // Could also be Mint x86-64
368
- case "2009101600":
369
- switch (navigator.productSub) {
370
- case "2009101600": ua_version = "3.0.15"; break; // Can be either Mac or Linux
371
- case "20091016": ua_version = "3.5.4"; os_name = oses_linux; os_flavor = "SUSE"; arch = arch_x86; break;
372
- } break;
373
- case "2009101601": ua_version = "3.0.15"; os_name = oses_windows; break;
374
- case "20091016081620": ua_version = "3.5.4"; os_name = oses_mac_osx; break;
375
- case "20091016081727": ua_version = "3.5.4"; os_name = oses_linux; break;
376
- case "20091016092926": ua_version = "3.5.4"; os_name = oses_windows; break;
377
- case "20091020122601": ua_version = "3.5.4"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break; // Could also be Mint x86-64
378
- case "2009102814":
379
- switch (navigator.productSub) {
380
- case "2009121601": ua_version = "3.0.16"; os_name = oses_linux; os_flavor = "Ubuntu"; break;
381
- case "2009121602": ua_version = "3.0.16"; os_name = oses_linux; os_flavor = "Ubuntu"; break;
382
- case "2010010604": ua_version = "3.0.17"; os_name = oses_linux; os_flavor = "Mint"; break;
383
- case "2010021501": ua_version = "3.0.17;xul1.9.0.18"; os_name = oses_linux; os_flavor = "Mint"; arch = arch_x86; break;
384
- case "2010021502": ua_version = "3.0.17;xul1.9.0.18"; os_name = oses_linux; os_flavor = "Mint"; arch = arch_x86_64; break;
385
- } break;
386
- case "2009102815":
387
- switch (navigator.productSub) {
388
- case "2009102815": ua_version = "3.0.15"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
389
- case "2009121601": ua_version = "3.0.16"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
390
- } break;
391
- case "20091029152254": ua_version = "3.6.0.b1"; os_name = oses_linux; break;
392
- case "20091029171059": ua_version = "3.6.0.b1"; os_name = oses_windows; break;
393
- case "20091102134505": ua_version = "3.5.5"; os_name = oses_mac_osx; break;
394
- case "20091102141836": ua_version = "3.5.5"; os_name = oses_linux; break;
395
- case "20091102152451": ua_version = "3.5.5"; os_name = oses_windows; break;
396
- case "2009110421": ua_version = "3.0.15"; os_name = oses_freebsd; arch = arch_x86; break;
397
- case "20091106091959": ua_version = "3.5.5"; os_name = oses_linux; os_flavor = "Mandriva"; arch = arch_x86; break;
398
- case "20091106140514": ua_version = "3.5.5"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86; break;
399
- case "20091106145609": ua_version = "3.5.5"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86_64; break;
400
- case "20091108163911": ua_version = "3.6.0.b2"; os_name = oses_linux; break;
401
- case "20091108181924": ua_version = "3.6.0.b2"; os_name = oses_windows; break;
402
- case "20091109125225":
403
- switch (navigator.productSub) {
404
- case "20091109": ua_version = "3.5.5"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
405
- case "20091215": ua_version = "3.5.6"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
406
- } break;
407
- case "20091109134913": ua_version = "3.5.5"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
408
- case "20091115172547": ua_version = "3.6.0.b3"; os_name = oses_linux; break;
409
- case "20091115182845": ua_version = "3.6.0.b3"; os_name = oses_windows; break;
410
- case "20091124201530": ua_version = "3.6.0.b4"; os_name = oses_mac_osx; break;
411
- case "20091124201751": ua_version = "3.6.0.b4"; os_name = oses_linux; break;
412
- case "20091124213835": ua_version = "3.6.0.b4"; os_name = oses_windows; break;
413
- case "2009120100": ua_version = "3.5.6"; os_name = oses_linux; os_flavor = "SUSE"; break;
414
- case "20091201203240": ua_version = "3.5.6"; os_name = oses_mac_osx; break;
415
- case "20091201204959": ua_version = "3.5.6"; os_name = oses_linux; break;
416
- case "20091201220228": ua_version = "3.5.6"; os_name = oses_windows; break;
417
- case "2009120206": ua_version = "3.0.16"; break; // Can be either Mac or Linux
418
- case "2009120208": ua_version = "3.0.16"; os_name = oses_windows; break;
419
- case "20091204132459": ua_version = "3.6.0.b5"; os_name = oses_linux; break;
420
- case "20091204132509": ua_version = "3.6.0.b5"; os_name = oses_mac_osx; break;
421
- case "20091204143806": ua_version = "3.6.0.b5"; os_name = oses_windows; break;
422
- case "20091215230859": ua_version = "3.5.7"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
423
- case "20091215230946": ua_version = "3.5.7"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
424
- case "20091215231400": ua_version = "3.5.7"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break; // Could also be Mint x86
425
- case "20091215231754":
426
- switch (navigator.productSub) {
427
- case "20091215": ua_version = "3.5.6"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
428
- case "20100106": ua_version = "3.5.7"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break; // Could also be Mint x86-64
429
- } break;
430
- case "2009121601":
431
- switch (navigator.productSub) {
432
- case "2009121601": ua_version = "3.0.16"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
433
- case "2010010604": ua_version = "3.0.17"; os_name = oses_linux; os_flavor = "Ubuntu"; break; // Could also be Mint x86-64
434
- } break;
435
- case "2009121602": ua_version = "3.0.17"; os_name = oses_linux; os_flavor = "Ubuntu"; break;
436
- case "20091216104148": ua_version = "3.5.6"; os_name = oses_linux; os_flavor = "Mandriva"; break;
437
- case "20091216132458": ua_version = "3.5.6"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86; break;
438
- case "20091216132537": ua_version = "3.5.6"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86_64; break;
439
- case "20091216142458": ua_version = "3.5.6"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86_64; break;
440
- case "20091216142519": ua_version = "3.5.6"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86; break;
441
- case "2009121708": ua_version = "3.0.16"; os_name = oses_linux; os_flavor = "CentOS"; arch = arch_x86; break;
442
- case "20091221151141": ua_version = "3.5.7"; os_name = oses_mac_osx; break;
443
- case "20091221152502": ua_version = "3.5.7"; os_name = oses_linux; break;
444
- case "2009122115": ua_version = "3.0.17"; break; // Can be either Mac or Linux
445
- case "20091221164558": ua_version = "3.5.7"; os_name = oses_windows; break;
446
- case "2009122116": ua_version = "3.0.17"; os_name = oses_windows; break;
447
- case "2009122200": ua_version = "3.5.7"; os_name = oses_linux; os_flavor = "SUSE"; break;
448
- case "20091223231431": ua_version = "3.5.6"; os_name = oses_linux; os_flavor = "PCLunixOS"; arch = arch_x86; break;
449
- case "20100105194006": ua_version = "3.6.0.rc1"; os_name = oses_mac_osx; break;
450
- case "20100105194116": ua_version = "3.6.0.rc1"; os_name = oses_linux; break;
451
- case "20100105212446": ua_version = "3.6.0.rc1"; os_name = oses_windows; break;
452
- case "2010010604": ua_version = "3.0.18"; os_name = oses_linux; os_flavor = "Ubuntu"; break;
453
- case "20100106054534": ua_version = "3.5.8"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break; // Could also be Mint x86
454
- case "20100106054634": ua_version = "3.5.8"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break; // Could also be Mint x86-64
455
- case "2010010605": ua_version = "3.0.18"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
456
- case "20100106211825": ua_version = "3.5.7"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86; break;
457
- case "20100106212742": ua_version = "3.5.7"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86_64; break;
458
- case "20100106215614": ua_version = "3.5.7"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86; break;
459
- case "20100110112429": ua_version = "3.5.7"; os_name = oses_linux; os_flavor = "Mandriva"; break;
460
- case "20100115132715": ua_version = "3.6.0"; os_name = oses_mac_osx; break;
461
- case "20100115133306": ua_version = "3.6.0"; os_name = oses_linux; break;
462
- case "20100115144158": ua_version = "3.6.0"; os_name = oses_windows; break;
463
- case "20100125074043": ua_version = "3.6.0"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break; // Could also be Mint x86
464
- case "20100125074127": ua_version = "3.6.0"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break; // Could also be Mint x86-64
465
- case "20100125204847": ua_version = "3.6.0"; os_name = oses_linux; os_flavor = "Sabayon"; arch = arch_x86; break; // Could also be Mint x86
466
- case "20100125204903": ua_version = "3.6.0"; os_name = oses_linux; os_flavor = "Sabayon"; arch = arch_x86_64; break; // Could also be Mint x86-64
467
- case "20100202152834": ua_version = "3.5.8"; os_name = oses_mac_osx; break;
468
- case "20100202153512": ua_version = "3.5.8"; os_name = oses_linux; break;
469
- case "20100202165920": ua_version = "3.5.8"; os_name = oses_windows; break;
470
- case "2010020219": ua_version = "3.0.18"; os_name = oses_mac_osx; break;
471
- case "2010020220": ua_version = "3.0.18"; os_name = oses_windows; break;
472
- case "2010020400": ua_version = "3.5.8"; os_name = oses_linux; os_flavor = "SUSE"; break;
473
- case "20100212131909": ua_version = "3.6.0.2"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
474
- case "20100212132013": ua_version = "3.6.0.2"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
475
- case "20100216105329": ua_version = "3.5.8"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86_64; break;
476
- case "20100216105348": ua_version = "3.5.8"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86; break;
477
- case "20100216105410": ua_version = "3.5.8"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86; break;
478
- case "20100216110009": ua_version = "3.5.8"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86_64; break;
479
- case "2010021718": ua_version = "3.0.18"; os_name = oses_linux; os_flavor = "CentOS"; arch = arch_x86; break;
480
- case "20100218022359": ua_version = "3.6.0.4"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
481
- case "20100218022705": ua_version = "3.6.0.4"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
482
- case "20100218112915": ua_version = "3.5.8"; os_name = oses_linux; os_flavor = "Mandriva"; arch = arch_x86; break;
483
- case "20100222120605": ua_version = "3.6.0.5"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
484
- case "20100222120717": ua_version = "3.6.0.5"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
485
- case "20100301015346": ua_version = "3.6.0"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86; break;
486
- case "20100305054927": ua_version = "3.6.0"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86_64; break;
487
- case "20100307204001": ua_version = "3.6.0"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86; break;
488
- case "20100308142847": ua_version = "3.6.0.6"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
489
- case "20100308151019": ua_version = "3.6.0.6"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
490
- case "2010031218": ua_version = "3.0.19"; break; // Mac OS X or Linux
491
- case "2010031422": ua_version = "3.0.19"; os_name = oses_windows; break;
492
- case "20100315075757": ua_version = "3.5.9"; os_name = oses_linux; break;
493
- case "20100315080228": ua_version = "3.5.9"; os_name = oses_mac_osx; break;
494
- case "20100315083431": ua_version = "3.5.9"; os_name = oses_windows; break;
495
- case "20100316055951": ua_version = "3.6.2"; os_name = oses_mac_osx; break;
496
- case "20100316060223": ua_version = "3.6.2"; os_name = oses_linux; break;
497
- case "20100316074819": ua_version = "3.6.2"; os_name = oses_windows; break;
498
- case "2010031700": ua_version = "3.5.9"; os_name = oses_linux; os_flavor = "SUSE"; break;
499
- case "20100323102218": ua_version = "3.6.2"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86_64; break;
500
- case "20100323102339": ua_version = "3.6.2"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86; break;
501
- case "20100323194640": ua_version = "3.6.2"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86_64; break;
502
- case "20100324182054": ua_version = "3.6.2"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86; break;
503
- case "20100330071911": ua_version = "3.5.9"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86_64; break;
504
- case "20100330072017": ua_version = "3.5.9"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86_64; break;
505
- case "20100330072020": ua_version = "3.5.9"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86; break;
506
- case "20100330072034": ua_version = "3.5.9"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86; break;
507
- case "20100401064631": ua_version = "3.6.3"; os_name = oses_mac_osx; break;
508
- case "20100401074458": ua_version = "3.6.3"; os_name = oses_linux; break;
509
- case "20100401080539": ua_version = "3.6.3"; os_name = oses_windows; break;
510
- case "20100401144201": ua_version = "3.6.2"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
511
- case "2010040116": ua_version = "3.0.19"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
512
- case "2010040118": ua_version = "3.0.19"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
513
- case "2010040119": ua_version = "3.0.19"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
514
- case "20100401213457": ua_version = "3.5.9"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
515
- case "2010040121": ua_version = "3.0.19"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
516
- case "2010040123": ua_version = "3.0.19"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
517
- case "2010040200": ua_version = "3.0.19"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
518
- case "20100402010516": ua_version = "3.5.9"; os_name = oses_linux; os_flavor = "Mint"; arch = arch_x86_64; break;
519
- case "20100402041908": ua_version = "3.6.2"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
520
- case "20100403042003": ua_version = "3.6.3"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86_64; break;
521
- case "20100403082016": ua_version = "3.6.3"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86; break;
522
- case "20100404024515": ua_version = "3.6.3"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
523
- case "20100404024646": ua_version = "3.6.3"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
524
- case "20100404104043": ua_version = "3.6.3"; os_name = oses_linux; os_flavor = "PClinuxOS"; arch = arch_x86_64; break;
525
- case "20100409151117": ua_version = "3.6.3.2"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
526
- case "20100409170726": ua_version = "3.6.3.2"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
527
- case "20100412125148": ua_version = "3.6.3"; os_name = oses_linux; os_flavor = "Mandriva"; arch = arch_x86; break;
528
- case "20100413152922": ua_version = "3.6.4.b1"; os_name = oses_mac_osx; break;
529
- case "20100413154310": ua_version = "3.6.4.b1"; os_name = oses_linux; break;
530
- case "20100413172113": ua_version = "3.6.4.b1"; os_name = oses_windows; break;
531
- case "20100415062243": ua_version = "3.6.3.3"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
532
- case "20100415103754": ua_version = "3.6.3.3"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
533
- case "20100416101101": ua_version = "3.6.3.2"; os_name = oses_linux; os_flavor = "Mandriva"; arch = arch_x86; break;
534
- case "2010041700": ua_version = "3.6.4.1"; os_name = oses_linux; os_flavor = "SUSE"; break;
535
- case "20100419015333": ua_version = "3.6.3"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86_64; break;
536
- case "20100423043606": ua_version = "3.6.3"; os_name = oses_linux; os_flavor = "Sabayon"; arch = arch_x86_64; break;
537
- case "20100423140709": ua_version = "3.6.3"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
538
- case "20100423141150": ua_version = "3.6.3"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
539
- case "20100423142835": ua_version = "3.6.3"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86; break;
540
- case "20100502202326": ua_version = "3.6.4.b2"; os_name = oses_linux; break;
541
- case "20100502202401": ua_version = "3.6.4.b2"; os_name = oses_mac_osx; break;
542
- case "20100502221517": ua_version = "3.6.4.b2"; os_name = oses_windows; break;
543
- case "20100503113315": ua_version = "3.6.4.b3"; os_name = oses_mac_osx; break;
544
- case "20100503113541": ua_version = "3.6.4.b3"; os_name = oses_linux; break;
545
- case "20100503122926": ua_version = "3.6.4.b3"; os_name = oses_windows; break;
546
- case "20100504085637": ua_version = "3.5.10"; os_name = oses_linux; break;
547
- case "20100504085753": ua_version = "3.5.10"; os_name = oses_mac_osx; break;
548
- case "20100504093643": ua_version = "3.5.10"; os_name = oses_windows; break;
549
- case "2010050600": ua_version = "3.5.10"; os_name = oses_linux; os_flavor = "SUSE"; break;
550
- case "2010051300": ua_version = "3.6.4.1"; os_name = oses_linux; os_flavor = "SUSE"; break;
551
- case "20100513134853": ua_version = "3.6.4.b4"; os_name = oses_mac_osx; break;
552
- case "20100513140540": ua_version = "3.6.4.b4"; os_name = oses_linux; break;
553
- case "20100513144105": ua_version = "3.6.4.b4"; os_name = oses_windows; break;
554
- case "20100513190740": ua_version = "3.6.3"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86_64; break;
555
- case "20100523180910": ua_version = "3.6.4.b5"; os_name = oses_mac_osx; break;
556
- case "20100523181754": ua_version = "3.6.4.b5"; os_name = oses_linux; break;
557
- case "20100523185824": ua_version = "3.6.4.b5"; os_name = oses_windows; break;
558
- case "20100527084110": ua_version = "3.6.4.b6"; os_name = oses_mac_osx; break;
559
- case "20100527085242": ua_version = "3.6.4.b6"; os_name = oses_linux; break;
560
- case "20100527093236": ua_version = "3.6.4.b6"; os_name = oses_windows; break;
561
- case "2010061100": ua_version = "3.6.4"; os_name = oses_linux; os_flavor = "SUSE"; break;
562
- case "20100611134546": ua_version = "3.6.4.b7"; os_name = oses_mac_osx; break;
563
- case "20100611135942": ua_version = "3.6.4.b7"; os_name = oses_linux; break;
564
- case "20100611143157": ua_version = "3.6.4.b7"; os_name = oses_windows; break;
565
- case "20100622203044": ua_version = "3.6.4"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86_64; break;
566
- case "20100622203045": ua_version = "3.6.4"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86; break;
567
- case "20100622204750": ua_version = "3.5.10"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86_64; break;
568
- case "20100622204830": ua_version = "3.5.10"; os_name = oses_linux; os_flavor = "Fedora"; arch = arch_x86; break;
569
- case "20100622205038": ua_version = "3.6.4"; os_name = oses_linux; os_flavor = "PClinuxOS"; arch = arch_x86_64; break;
570
- case "20100623081410": ua_version = "3.6.4"; os_name = oses_linux; os_flavor = "CentOS"; arch = arch_x86_64; break;
571
- case "20100623081921": ua_version = "3.6.4"; os_name = oses_linux; os_flavor = "CentOS"; arch = arch_x86; break;
572
- case "20100623155731": ua_version = "3.6.4.b7"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
573
- case "20100623200132": ua_version = "3.6.4.b7"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
574
- case "20100625222733": ua_version = "3.6.6"; os_name = oses_linux; break;
575
- case "20100625223402": ua_version = "3.6.6"; os_name = oses_mac_osx; break;
576
- case "20100625231939": ua_version = "3.6.6"; os_name = oses_windows; break;
577
- case "20100626104508": ua_version = "3.6.4"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86; break;
578
- case "20100627211341": ua_version = "3.6.4"; os_name = oses_freebsd; os_flavor = "PC-BSD"; arch = arch_x86_64; break;
579
- case "20100628082832": ua_version = "3.6.6"; os_name = oses_linux; os_flavor = "PClinuxOS"; arch = arch_x86_64; break;
580
- case "20100628124739": ua_version = "3.6.6"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
581
- case "20100628143222": ua_version = "3.6.6"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
582
- case "20100628232431": ua_version = "3.6.6"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
583
- case "20100629034705": ua_version = "3.6.6"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
584
- case "20100629105354": ua_version = "3.6.6"; os_name = oses_linux; os_flavor = "Mandriva"; arch = arch_x86; break;
585
- case "20100630130433": ua_version = "3.6.6"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
586
- case "20100630131607": ua_version = "4.0.0.b1"; os_name = oses_mac_osx; break;
587
- case "20100630132217": ua_version = "4.0.0.b1"; os_name = oses_linux; break;
588
- case "20100630141702": ua_version = "4.0.0.b1"; os_name = oses_windows; break;
589
- case "20100630174226": ua_version = "3.6.6"; os_name = oses_linux; os_flavor = "Sabayon"; arch = arch_x86_64; break;
590
- case "20100630180611": ua_version = "3.6.6"; os_name = oses_linux; os_flavor = "Sabayon"; arch = arch_x86; break;
591
- case "20100709115208": ua_version = "3.6.7.b1"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86; break;
592
- case "20100709183408": ua_version = "3.6.7.b1"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
593
- case "20100716093011": ua_version = "3.6.7.b2"; os_name = oses_linux; os_flavor = "Ubuntu"; arch = arch_x86_64; break;
594
- case "20101203075014": ua_version = "3.6.13"; os_name = oses_windows; break;
595
- case "20101206122825": ua_version = "3.6.13"; os_name = oses_linux; os_flavor = "Ubuntu"; break;
596
- case "20110318052756": ua_version = "4.0"; os_name = oses_windows; break; // browsershots: Firefox 4.0 / Windows XP
597
- case "20110420144310": ua_version = "3.5.19"; os_name = oses_linux; os_flavor = "Debian"; break; // browsershots: Firefox 3.5.19 / Debian 4.0 (Etch)
598
- case "20110615151330": ua_version = "5.0"; os_name = oses_windows; break; // browsershots: Firefox 5.0 / Windows XP
599
- case "20110811165603": ua_version = "6.0"; os_name = oses_windows; break; // browsershots: Firefox 6.0 / Windows XP
600
- case "20110830092941": ua_version = "6.0.1"; os_name = oses_linux; os_flavor = "Debian"; break; // browsershots: Firefox 6.0.1 / Debian 4.0 (Etch)
601
- case "20110922153450": ua_version = "7.0"; os_name = oses_windows; break; // browsershots: Firefox 7.0 / Windows XP
602
- case "20110928134238": ua_version = "7.0.1"; os_name = oses_linux; os_flavor = "Debian"; break; // browsershots: Firefox 7.0.1 / Debian 4.0 (Etch)
603
- case "20111104165243": ua_version = "8.0"; os_name = oses_windows; break; // browsershots: Firefox 8.0 / Windows XP
604
- case "20111115183813": ua_version = "8.0"; os_name = oses_linux; os_flavor = "Ubuntu"; break; // browsershots: Firefox 8.0 / Ubuntu 9.10 (Karmic Koala)
605
- case "20111216140209": ua_version = "9.0"; os_name = oses_windows; break; // browsershots: Firefox 9.0 / Windows XP
606
- case "20120129021758": ua_version = "10.0"; os_name = oses_windows; break; // browsershots: Firefox 10.0 / Windows 2000
607
- case "20120201083324": ua_version = "3.5.16"; os_name = oses_linux; os_flavor = "Debian"; break; // browsershots: Iceweasel 3.5.16 / Debian 4.0 (Etch)
608
- case "20120216013254": ua_version = "3.6.27"; os_name = oses_linux; os_flavor = "Debian"; break; // browsershots: Firefox 3.6.27 / Debian 4.0 (Etch)
609
- case "20120216100510": ua_version = "10.0.2"; os_name = oses_linux; os_flavor = "Ubuntu"; break; // browsershots: Firefox 10.0.2 / Ubuntu 9.10 (Karmic Koala)
610
- case "20120310010316": ua_version = "11.0"; os_name = oses_linux; os_flavor = "Ubuntu"; break; // browsershots: Firefox 11.0 / Ubuntu 9.10 (Karmic Koala)
611
- case "20120310194926": ua_version = "11.0"; os_name = oses_linux; os_flavor = "Ubuntu"; break;
612
- case "20120312181643":
613
- // It is disconcerting that a buildID is the same on Windows
614
- // and Mac, need to examine more versions on Mac.
615
- ua_version = "11.0";
616
- if (/Mac/.test(navigator.oscpu)) {
617
- os_name = oses_mac_osx;
618
- } else {
619
- os_name = oses_windows; // browsershots: Firefox 11.0 / Windows XP
620
- }
621
- break;
622
- case "20120314195616": ua_version = "12.0"; os_name = oses_linux; os_flavor = "Debian"; break; // browsershots: Firefox 12.0 / Debian 4.0 (Etch)
623
- case "20120423142301": ua_version = "12.0"; os_name = oses_linux; os_flavor = "Ubuntu"; break;
624
- case "20120424151700": ua_version = "12.0"; os_name = oses_linux; os_flavor = "Fedora"; break;
625
- default:
626
- version = this.searchVersion("Firefox", navigator.userAgent);
627
- // Verify whether the ua string is lying by checking if it contains
628
- // the major version we detected using known objects above. If it
629
- // appears to be truthful, then use its more precise version number.
630
- if (version && version.split(".")[0] == ua_version.split(".")[0]) {
631
- // The version number will sometimes end with a space or end of
632
- // line, so strip off anything after a space if one exists
633
- if (-1 != version.indexOf(" ")) {
634
- version = version.substr(0,version.indexOf(" "));
635
- }
636
- ua_version = version;
637
- } else {
638
- ua_is_lying = true;
639
- }
640
- break;
641
- }
642
- //if (ua_is_lying) { alert("UA is lying"); }
643
- //alert(ua_version + " vs " + navigator.userAgent);
644
-
645
- // end navigator.buildID checks
646
-
647
- } else if (typeof ScriptEngineMajorVersion == "function") {
648
- // Then this is IE and we can very reliably detect the OS.
649
- // Need to add detection for IE on Mac. Low priority, since we
650
- // don't have any sploits for it yet and it's a very low market
651
- // share.
652
- os_name = oses_windows;
653
- ua_name = clients_ie;
654
- version = ScriptEngineMajorVersion().toString();
655
- version += ScriptEngineMinorVersion().toString();
656
- version += ScriptEngineBuildVersion().toString();
657
- //document.write("ScriptEngine: "+version+"<br />");
658
- switch (version){
659
- case "514615":
660
- // IE 5.00.2920.0000, 2000 Advanced Server SP0 English
661
- ua_version = "5.0";
662
- os_flavor = "2000";
663
- os_sp = "SP0";
664
- break;
665
- case "515907":
666
- os_flavor = "2000";
667
- os_sp = "SP3"; //or SP2: oCC.getComponentVersion('{22d6f312-b0f6-11d0-94ab-0080c74c7e95}', 'componentid') => 6,4,9,1109
668
- break;
669
- case "518513":
670
- os_flavor = "2000";
671
- os_sp = "SP4";
672
- break;
673
- case "566626":
674
- // IE 6.0.2600.0000, XP SP0 English
675
- // IE 6.0.2800.1106, XP SP1 English
676
- ua_version = "6.0";
677
- os_flavor = "XP";
678
- os_sp = "SP0";
679
- break;
680
- case "568515":
681
- // IE 6.0.3790.0, 2003 Standard SP0 English
682
- ua_version = "6.0";
683
- os_flavor = "2003";
684
- os_sp = "SP0";
685
- break;
686
- case "568820":
687
- // IE 6.0.2900.2180, xp sp2 english
688
- os_flavor = "XP";
689
- os_sp = "SP2";
690
- break;
691
- case "568827":
692
- os_flavor = "2003";
693
- os_sp = "SP1";
694
- break;
695
- case "568831": //XP SP2 -OR- 2K SP4
696
- if (os_flavor == "2000"){
697
- os_sp = "SP4";
698
- }
699
- else{
700
- os_flavor = "XP";
701
- os_sp = "SP2";
702
- }
703
- break;
704
- case "568832":
705
- os_flavor = "2003";
706
- os_sp = "SP2";
707
- break;
708
- case "568837":
709
- // IE 6.0.2900.2180, XP Professional SP2 Korean
710
- ua_version = "6.0";
711
- os_flavor = "XP";
712
- os_sp = "SP2";
713
- break;
714
- case "5716599":
715
- // IE 6.0.2900.5512, XP Professional SP3 English
716
- // IE 6.0.2900.5512, XP Professional SP3 Spanish
717
- ua_version = "6.0";
718
- os_flavor = "XP";
719
- os_sp = "SP3";
720
- break;
721
- case "575730":
722
- // IE 7.0.5730.13, Server 2003 Standard SP2 English
723
- // IE 7.0.5730.13, Server 2003 Standard SP1 English
724
- // IE 7.0.5730.13, XP Professional SP2 English
725
- // Rely on the user agent matching above to determine the OS.
726
- // This will incorrectly identify 2k3 SP1 as SP2
727
- ua_version = "7.0";
728
- os_sp = "SP2";
729
- break;
730
- case "5718066":
731
- // IE 7.0.5730.13, XP Professional SP3 English
732
- ua_version = "7.0";
733
- os_flavor = "XP";
734
- os_sp = "SP3";
735
- break;
736
- case "5722589":
737
- // browsershots.org, MSIE 7.0 / Windows XP
738
- ua_version = "7.0";
739
- os_flavor = "XP";
740
- // don't know what the service pack is =(
741
- break;
742
- case "576000":
743
- // IE 7.0.6000.16386, Vista Ultimate SP0 English
744
- ua_version = "7.0";
745
- os_flavor = "Vista";
746
- os_sp = "SP0";
747
- break;
748
- case "5818702":
749
- // IE 8.0.6001.18702, XP Professional SP3 English
750
- case "5822960":
751
- // IE 8.0.6001.18702, XP Professional SP3 Greek
752
- ua_version = "8.0";
753
- os_flavor = "XP";
754
- os_sp = "SP3";
755
- break;
756
- case "580":
757
- // IE 8.0.7100.0, Windows 7 English
758
- // IE 8.0.7100.0, Windows 7 64-bit English
759
- case "5816385":
760
- // IE 8.0.7600.16385, Windows 7 English
761
- case "5816475":
762
- case "5816762":
763
- // IE 8.0.7600.16385, Windows 7 English
764
- ua_version = "8.0";
765
- os_flavor = "7";
766
- os_sp = "SP0";
767
- break;
768
- case "9016406":
769
- // IE 9.0.7930.16406, Windows 7 64-bit
770
- ua_version = "9.0";
771
- os_flavor = "7";
772
- os_sp = "SP0";
773
- break;
774
- case "9016441":
775
- // IE 9.0.8112.16421, Windows 7 32-bit English
776
- ua_version = "9.0";
777
- os_flavor = "7";
778
- os_sp = "SP1";
779
- break;
780
- case "9016443":
781
- // IE 9.0.8112.16421, Windows 7 Polish
782
- // Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
783
- ua_version = "9.0";
784
- os_flavor = "7";
785
- os_sp = "SP1";
786
- break;
787
- case "9016446":
788
- // IE 9.0.8112.16421, Windows 7 English (Update Versions: 9.0.7 (KB2699988)
789
- // Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MASA; InfoPath.3; MS-RTC LM 8; BRI/2)Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MASA; InfoPath.3; MS-RTC LM 8; BRI/2)
790
- os_flavor = "7";
791
- ua_version = "9.0";
792
- os_sp = "SP1";
793
- break;
794
- case "1000":
795
- // IE 10.0.8400.0 (Pre-release + KB2702844), Windows 8 x86 English Pre-release
796
- ua_version = "10.0";
797
- os_flavor = "8";
798
- os_sp = "SP0";
799
- break;
800
- default:
801
- unknown_fingerprint = version;
802
- break;
803
- }
804
-
805
- if (!ua_version) {
806
- // The ScriptEngine functions failed us, try some object detection
807
- if (document.documentElement && (typeof document.documentElement.style.maxHeight)!="undefined") {
808
- // IE8 detection straight from IEBlog. Thank you Microsoft.
809
- try {
810
- ua_version = "8.0";
811
- document.documentElement.style.display = "table-cell";
812
- } catch(e) {
813
- // This executes in IE7,
814
- // but not IE8, regardless of mode
815
- ua_version = "7.0";
816
- }
817
- } else if (document.compatMode) {
818
- ua_version = "6.0";
819
- } else if (window.createPopup) {
820
- ua_version = "5.5";
821
- } else if (window.attachEvent) {
822
- ua_version = "5.0";
823
- } else {
824
- ua_version = "4.0";
825
- }
826
- switch (navigator.appMinorVersion){
827
- case ";SP2;":
828
- ua_version += ";SP2";
829
- break;
830
- }
831
- }
832
- }
833
-
834
- if (!os_name && navigator.platform == "Win32") { os_name = oses_windows; }
835
-
836
- //--
837
- // Flavor
838
- //--
839
- if (!ua_is_lying) {
840
- version = useragent.toLowerCase();
841
- } else if (navigator.oscpu) {
842
- // Then this is Gecko and we can get at least os_name without the
843
- // useragent
844
- version = navigator.oscpu.toLowerCase();
845
- } else {
846
- // All we have left is the useragent and we know it's lying, so don't bother
847
- version = " ";
848
- }
849
- if (!os_name || 0 == os_name.length) {
850
- if (version.indexOf("windows") != -1) { os_name = oses_windows; }
851
- else if (version.indexOf("mac") != -1) { os_name = oses_mac_osx; }
852
- else if (version.indexOf("linux") != -1) { os_name = oses_linux; }
853
- }
854
- if (os_name == oses_windows && (!os_flavor || 0 == os_flavor.length)) {
855
- if (version.indexOf("windows 95") != -1) { os_flavor = "95"; }
856
- else if (version.indexOf("windows nt 4") != -1) { os_flavor = "NT"; }
857
- else if (version.indexOf("win 9x 4.9") != -1) { os_flavor = "ME"; }
858
- else if (version.indexOf("windows 98") != -1) { os_flavor = "98"; }
859
- else if (version.indexOf("windows nt 5.0") != -1) { os_flavor = "2000"; }
860
- else if (version.indexOf("windows nt 5.1") != -1) { os_flavor = "XP"; }
861
- else if (version.indexOf("windows nt 5.2") != -1) { os_flavor = "2003"; }
862
- else if (version.indexOf("windows nt 6.0") != -1) { os_flavor = "Vista"; }
863
- else if (version.indexOf("windows nt 6.1") != -1) { os_flavor = "7"; }
864
- else if (version.indexOf("windows nt 6.2") != -1) { os_flavor = "8"; }
865
- }
866
- if (os_name == oses_linux && (!os_flavor || 0 == os_flavor.length)) {
867
- if (version.indexOf("gentoo") != -1) { os_flavor = "Gentoo"; }
868
- else if (version.indexOf("ubuntu") != -1) { os_flavor = "Ubuntu"; }
869
- else if (version.indexOf("debian") != -1) { os_flavor = "Debian"; }
870
- else if (version.indexOf("rhel") != -1) { os_flavor = "RHEL"; }
871
- else if (version.indexOf("red hat") != -1) { os_flavor = "RHEL"; }
872
- else if (version.indexOf("centos") != -1) { os_flavor = "CentOS"; }
873
- else if (version.indexOf("fedora") != -1) { os_flavor = "Fedora"; }
874
- else if (version.indexOf("android") != -1) { os_flavor = "Android"; }
875
- }
876
-
877
- //--
878
- // Language
879
- //--
880
- if (navigator.systemLanguage) {
881
- // ie
882
- os_lang = navigator.systemLanguage;
883
- } else if (navigator.language) {
884
- // gecko derivatives, safari, opera
885
- os_lang = navigator.language;
886
- } else {
887
- // some other browser and we don't know how to get the language, so
888
- // just guess english
889
- os_lang = "en";
890
- }
891
-
892
- //--
893
- // Architecture
894
- //--
895
- if (typeof(navigator.cpuClass) != 'undefined') {
896
- // Then this is IE or Opera9+ and we can grab the arch directly
897
- switch (navigator.cpuClass) {
898
- case "x86":
899
- arch = arch_x86;
900
- break;
901
- case "x64":
902
- arch = arch_x86_64;
903
- break;
904
- }
905
- }
906
- if (!arch || 0 == arch.length) {
907
- // We don't have the handy-dandy navagator.cpuClass, so infer from
908
- // platform
909
- version = navigator.platform;
910
- //document.write(version + "\\n");
911
- // IE 8 does a bit of wacky user-agent switching for "Compatibility View";
912
- // 64-bit client on Windows 7, 64-bit:
913
- // Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0)
914
- // 32-bit client on Windows 7, 64-bit:
915
- // Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0)
916
- // 32-bit client on Vista, 32-bit, "Compatibility View":
917
- // Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)
918
- //
919
- // Report 32-bit client on 64-bit OS as being 32 because exploits will
920
- // need to know the bittedness of the process, not the OS.
921
- if ( ("Win32" == version) || (version.match(/i.86/)) ) {
922
- arch = arch_x86;
923
- } else if (-1 != version.indexOf('x64') || (-1 != version.indexOf('x86_64'))) {
924
- arch = arch_x86_64;
925
- } else if (-1 != version.indexOf('PPC')) {
926
- arch = arch_ppc;
927
- }
928
- }
929
-
930
- this.ua_is_lying = ua_is_lying;
931
- this.os_name = os_name;
932
- this.os_flavor = os_flavor;
933
- this.os_sp = os_sp;
934
- this.os_lang = os_lang;
935
- this.arch = arch;
936
- this.ua_name = ua_name;
937
- this.ua_version = ua_version;
938
- this.ua_version = ua_version;
939
-
940
- return { os_name:os_name, os_flavor:os_flavor, os_sp:os_sp, os_lang:os_lang, arch:arch, ua_name:ua_name, ua_version:ua_version };
941
- }; // function getVersion
942
-
943
- window.os_detect.searchVersion = function(needle, haystack) {
944
- var index = haystack.indexOf(needle);
945
- var found_version;
946
- if (index == -1) { return; }
947
- found_version = haystack.substring(index+needle.length+1);
948
- if (found_version.indexOf(' ') != -1) {
949
- // Strip off any junk at the end such as a CLR declaration
950
- found_version = found_version.substring(0,found_version.indexOf(' '));
951
- }
952
- return found_version;
953
- };
954
-
955
-
956
- /*
957
- * Return -1 if a < b, 0 if a == b, 1 if a > b
958
- */
959
- window.ua_ver_cmp = function(ver_a, ver_b) {
960
- // shortcut the easy case
961
- if (ver_a == ver_b) {
962
- return 0;
963
- }
964
-
965
- a = ver_a.split(".");
966
- b = ver_b.split(".");
967
- for (var i = 0; i < Math.max(a.length, b.length); i++) {
968
- // 3.0 == 3
969
- if (!b[i]) { b[i] = "0"; }
970
- if (!a[i]) { a[i] = "0"; }
971
-
972
- if (a[i] == b[i]) { continue; }
973
-
974
- a_int = parseInt(a[i]);
975
- b_int = parseInt(b[i]);
976
- a_rest = a[i].substr(a_int.toString().length);
977
- b_rest = b[i].substr(b_int.toString().length);
978
- if (a_int < b_int) {
979
- return -1;
980
- } else if (a_int > b_int) {
981
- return 1;
982
- } else { // ==
983
- // Then we need to deal with the stuff after the ints, e.g.:
984
- // "b4pre"
985
- if (a_rest == "b" && b_rest.length == 0) {
986
- return -1;
987
- }
988
- if (b_rest == "b" && a_rest.length == 0) {
989
- return 1;
990
- }
991
- // Just give up and try a lexicographical comparison
992
- if (a_rest < b_rest) {
993
- return -1;
994
- } else if (a_rest > b_rest) {
995
- return 1;
996
- }
997
- }
998
- }
999
- // If we get here, they must be equal
1000
- return 0;
1001
- };
1002
-
1003
- window.ua_ver_lt = function(a, b) {
1004
- if (-1 == this.ua_ver_cmp(a,b)) { return true; }
1005
- return false;
1006
- };
1007
- window.ua_ver_gt = function(a, b) {
1008
- if (1 == this.ua_ver_cmp(a,b)) { return true; }
1009
- return false;
1010
- };
1011
- window.ua_ver_eq = function(a, b) {
1012
- if (0 == this.ua_ver_cmp(a,b)) { return true; }
1013
- return false;
1014
- };