книги хакеры / журнал хакер / 108_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
>>
ХАКЕР
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
E |
|
|
||||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|||
.PROBUY |
|
|
|
|
||||||
w Click |
to |
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
- |
|
n |
e |
|
||
|
|
|
|
x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
Внешний вид неперехваченной функции
уразработчиковмалваринетникакогожеланияотслеживатьвыходновых версий,ониограничиваютсяатакойтипаWM_X,сводящейсякманипуляцииэлементамипользовательскогоинтерфейсапутемпосылкисоответствующихсообщений(WindowMessages),удаляющихобнаруженныеруткитыизсписка,отображаемогоRootkitRevealer’ом,чтоработаетсовсеми версиями.Новлог-файлобнаруженныеруткитывсе-такипопадают.
КтомужеRootkitRevealerнаходиттолькотеруткиты,которые:а)модифицируютреестри/илифайловуюсистему;б)скрываютследысвоегоприсутствия.Еслихотябыодноизэтихусловийневыполняется,руткитнебудетобнаружен.Анализкоданекоторыхруткитовпоказывает,чтоониотслеживают появлениеокнаRootkitRevealer’аипрекращаютсвоюмаскировкунавремя егоработы.Разработчикамзащитныхутилитужедавнопоравзятьполи- морфизмнавооружение—покаонибудутобнаруживатьсяруткитами,нио какойзащитеиречибытьнеможет!Антивируснедолжениметьпостоянной сигнатуры(равнокакиоконсзаранееизвестнымизаголовками)!
Мирруткитовнеисчерпываетсятемидемонстрационнымиэкземплярами, чтовыложенынаwww.rootkits.com.Судисам:разработкакачественного руткита—сложнаяинженернаязадача,изаодинвечертакиеруткиты непишутся.Торговатьруткитами(всилуихполулегальногоположения)
отваживаютсятолькосамыенуждающиеся(илиотчаявшиеся).Таккакойже резонвыкладыватьруткитвобщественныйдоступ?Развечтодлятого,чтобы заявитьосебеипосостязатьсявкрутостисдругимихакерами.Но!Профессиональныепрограммистыужедавноминовалистадиюсамоутвержденияи, вместотогочтобыработатьзаидею,предпочитаюткодитьзаденьгипоиндивидуальнымзаказам(покрайнеймере,будетначтонаниматьадвоката). Реюз(тоестьповторноеиспользованиекода)втакихруткитахпрактическиневстречается,ивантивирусныебазыпопадаютлишьнемногие.Как ужеговорилосьвыше,правильноспланированнаяатакапредполагает самоуничтожениеруткитапоистечениинекотороговремени.Даикакего ловить,еслионсуществуеттольковоперативнойпамяти?!Можно,конечно,передаватьантивируснымкомпаниямдампядраоперационнойсис- темы,нотутестьтрино.Во-первых,какаяантивируснаякомпаниябудетв немковыряться?Во-вторых,этожесколькотрафикапотратит!В-третьих, вдампекромеруткитаможетнаходитьсятьмасекретнойинформации, которуюразглашатькрайненежелательно,напримерпароли.
Важнопонять,что,вотличиеотвирусовичервей,распространяющихся откомпьютераккомпьютеруираноилипозднопопадающихвантивирусныекапканы,настоящиеруткитысуществуютвединичныхэкземплярах,ипотомуобнаружитьихмогутлишьпроактивныетехнологии, напримерэвристическийанализ.Однако,еслизаказчикруткитахоть немногодружитсголовой,онобязательнопроверит,палитсялируткит последнимиверсиямиантивирусовприсамомстрогомрежимеэвристики (прикоторомантивирусругаетсядаженачестныепрограммы),и,еслида, возвратитегоназаднадоработку.
Поэтомувкачестверабочеготезисанеобходимопринять,чторуткиты антивирусаминеобнаруживаются,какбынамнипромывалимозгисоздателиантивирусов.
Удаленное сканирование портов
Вэпохурасцветаbackdoor’овудаленноесканированиепортовсчиталось абсолютнонадежнымметодомобнаруженияруткитов.Действительно, какбыруткитнимаскировалсетевыесоединенияикакиебысистемныевызовыниперехватывал,всеэтовоздействуетлишьналокальную
Внешний вид перехваченной функции
машину.Да,конечно,можнообманутьиtcpdump,иnetstat,но…только локально.Всякаяжепопыткасканированиязараженногокомпьютерас соседнеймашинынемедленновыявитоткрытыепорты,еслиони,разумеется,таместь.Ируткитникакнеможетэтомупротивостоять.
Однакозачеммаскироватьфактоткрытияпортов,еслиникакиепорты можновообщенеоткрывать,аиспользоватьужеоткрытые?Мыщъхисследовалнесколькоруткитов,которыепутемперехватасистемныхфункций мониторилиHTTP-трафикипередавалинахакерскийузелчерез80 йпорт информациюотекущемномерепоследовательностиTCP/IP-соединения, чтобыхакермогпослатьлевыйпакет(скомандамидляруткита),который бывоспринималсясистемойкакправильный.Ачтобысоединениес текущимweb-узломнеразрывалось,хакерпосылалемуещеодинпакет, предотвращающийсрывсинхронизацииномерапоследовательности. Другимисловами,руткитпередавал/принималданныевконтекстесущес- твующегоTCP/IP-соединения,инициированногокомпьютером-жертвой,
ипотомусканированиепортовничегоподозрительногоневыявляло,авот внимательныйанализTCP/IP-пакетовпоказал,чтопакеты,переданные руткитомхакеру,имелиIP-адрес,отличныйотIP-адресацелевогоузла,с которымибылоустановленосоединение.
Однаконестоитобольщаться—невсеруткитытакиепростые,иприже- ланиитрафикможноспрятатьтак,чтоегониктоиникогданенайдет.На сайтеЖанныРутковской(www.invisiblethings.org/tools.html)выложены готовыеутилиты,прячущиесамфактприсутствияпостороннеготрафика
ивдобавокшифрующиеегоалгоритмомRSA,благодарякоторомуразбор логовtcpdump’астановитсяпустойтратойвремени.
Выдвигаемследующийтезис:руткитынеоткрываютновыхпортов,а генерируемыйимитрафикнилокальными,ниудаленнымисниферамине обнаруживается.
Свет в конце тоннеля или встречный?
Извечныйвопрос:какбыть,чтоделать?!Поборотьновыеруткитыстарымисредствамиуженеудается,ановыхсредств,ксожалению,нет.Поэтому приходитсявозвращатьсякскомпрометированноймашинеиискатьруткитнепосредственнонаней.Весьвопросвтом,какнайтипроизвольный руткит,еслионемзаранееничегонеизвестно?Нисигнатур,нидругих опознавательныхпризнаковунаснет.
Ксчастью,существуетнетакужмногометодовперехватасистемных функций,ивсеониоставляютзасобойвполнеосязаемыеследы,обнаружитькоторыеможнодажебезглубокихзнанийособенностейреализации операционнойсистемыиассемблера.Естественно,никакихгарантийу наснет,новсе-такиручнойпоискнамногонадежнееавтоматизированно- го,пускайонитребуетопределеннойквалификации.Запуститьантивирусможетидомохозяйка,чтонивелируетразницумеждунейиопытным хакером,поэтомулучшеразвиватьсвоисобственныеспособности,тренировать«нюх»,чемдоверятьбезопасностькомпьютерачужимдядям. Руткитыпринятоклассифицироватьподвумосновнымкритериям:по местуобитания(ядроилиприкладнойуровень)испособувнедрения(например,перехватфункцийпутембитхака).Такаяклассификацияочень условна,ивреальнойжизнисплошьирядомвстречаютсягибридныеварианты,одновременноработающиекакнауровнеядра,такинаприкладномуровне.Забавно,норуткиты,полностьюработающиенаприкладном уровне,обнаружитьсложнеевсего,посколькуимдоступноогромное количествометодиквнедрениявчужиепроцессы,адляманипуляцийс
xàêåð 12 /108/ 07 |
159 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
E |
|
|
||||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
NOW! |
o |
|||||
|
|
|
|
|
||||||
|
|
|
|
|
|
|||||
w Click |
to BUY |
|
>> ХАКЕР.PRO |
|||||||
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
|||
|
|
|
|
|
|
|
||||
|
|
|
|
-xcha |
|
|
|
|
|
Таблица системных вызовов
трафикомникакихфункцийвообщеперехватыватьненужно—достаточ- новоспользоватьсясырымисокетами.Норуткитыприкладногоуровня
—это«некруто»ивообще«непопонятиям».Взорхакеровустремленв ядро,вкоторомможноделатьвсечтоугодно.Воттолькометодикперехва- тасистемныхфункцийтам—раз,дваиобчелся,апотомуобнаружение ядерныхруткитовпредставляетсобойдовольнопростуюзадачу.
Мыбудемговоритьименнооруткитахуровняядра,семействокоторых делитсянадваподтипа:однивнедряютсяпутемправкимашинногокода, вставляявначало(редко—всередину)функциикомандуJMPилиCALL дляпереходанасвоетело;адругиемодифицируютструктурыданных, напримертаблицусистемныхвызовов,хранящуюуказателинафункции.
ВNTобаподтипаруткитоввстречаютсяприблизительносодинаковой частотой.АвLinux/xBSDвосновномпреобладаетвторойподтип,что связаностемфактом,чтоядроNTэкспортируетNativeAPI-функциикак обычнаядинамическаябиблиотека(DLL),ачтобынайтиNativeAPI-фун- кциивLinux/BSD,следуеточеньпостараться.Датолькозачемстараться, еслитаблицасистемныхвызововунасподрукой?!
Существуетмножествоутилит,проверяющихцелостностьтаблицысистемныхвызововивосстанавливающихеевслучаенеобходимости,номне неизвестнаниоднаутилита,проверяющаяцелостностьсамихсистемных функций,внедрениевкоторыесущественноусиливаетжизнестойкость руткита(механизмPatchGuard,реализованныйвx86-64версияхNT,мыне рассматриваем,посколькуегооченьлегкообойти).
Собственноговоря,привсемразличииNTиLinux/BSDтехникапоискаруткитоводнаитаже.Первымделомнамнеобходимозаполучитьдампядраили запуститьядерныйотладчик.Теоретическируткитымогутперехватывать любыеоперации,втомчислеипопыткусохранениядампа.ВNTдляэтого имдостаточноперехватитьNativeAPI-функциюKeBugCheckExи,преждечем возвратитьейуправление,вычиститьвсеследысвоегопребываниявоперативнойпамяти.Техническиреализоватьэтонесложно.Понадобитсяне большепарысотенстрокассемблерногокода,но…мненеизвестенниодин руткит,реальноделающийэто.Такжеможнообхитритьиядерныйотладчик. Устанавливаемвсемхакнутымстраницаматрибуттольконаисполнение (еслиЦПподдерживаетбитNX/XD)илиставимстраницувNO_ACCESS,а привозникновенииисключениясмотрим,пытаютсялинаспрочестьили исполнить.Иеслинасчитают,тоэтоявноотладчик,дляобманакоторого временноснимаемперехват.Ноэтовсеголишьтеория.Напрактикеонаеще никемнереализована,икогдабудетреализована—неизвестно.
Увы,абсолютнонадежныхспособовдетекциируткитовнесуществует,ина любуюмеруестьсвояконтрмера.Нонебудемтеоретизировать,вернемся креальносуществующимруткитам,аточнее,кполучениюдампапамяти.
ВNTв«Свойствахсистемы»(<Win-Pause>)необходимовыбрать«Полный дамп»,затемзапустить«Редакторреестра»,открытьветвьHKLM\System\ CurrentControlSet\Services\i8042prt\Parametersиустановитьпараметр CrashOnCtrlScroll(типаREG_DWORD)влюбоененулевоезначение,
послечегонажатие<Ctrl>споследующимдвойнымнажатием<Pause>
вызоветголубойэкранскодомE2h(MANUALLY_INITIATED_CRASH).К
сожалению,чтобыизмененияреестравступиливсилу,необходимоперезагрузитьмашину,прибивприэтомруткит,которыймыпытаемсянайти, такчтоэтуоперациюследуетосуществлятьзаблаговременно.
Кстати говоря, последовательность <Ctrl-Scroll Lock-Scroll Lock>
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
срабатывает, даже если машина ушла в нирвану и уже не реагирует на
<Ctrl-Alt-Del>. Причем, в отличие от RESET, комбинация <Ctrl-Scroll Lock-Scroll Lock> выполняет сброс дисковых буферов, что уменьшает риск потери данных, поэтому CrashOnCtrlScroll стоит настроить и в том случае, когда мы не собираемся охотиться на руткиты.
Втехслучаях,когдаCrashOnCtrlScrollненастроен,аперезагрузкане приемлема,можновзятьлюбойдрайверизNTDDKивставитьвначало DriverEntryкакую-нибудьнедопустимуюоперацию:делениенаноль, обращениекпамятипонулевомууказателюит.д.Тогдапризагрузке драйверанемедленновспыхнетголубойэкран,анадискбудетсброшен полныйдамппамятиядрасовсеймалварью,внемсодержащейся.
ВLinuxручнойсбросдампаосуществляетсяпринажатии<Alt-SysRq-C> (приэтомядродолжнобытьоткомпилированоспараметромCONFIG_ MAGIC_SYSRQ,равным«yes»,илидолжнабытьвыполненакоманда«echo1 >/proc/sys/kernel/sysrq»).
ВxBSD-системахкомбинация<Ctrl-Alt-Esc>(кстатиговоря,изменен-
наявнекоторыхраскладкахклавиатуры)вызываетвсплытиеядерного отладчика(аналог<Ctrl-D>дляSoftICEвNT),который,ксожалению,по умолчаниюневходитвядро,ипотомуегонеобходимопредварительно перекомпилировать,добавивстроки«optionsDDB»и«optionsBREAK_ TO_DEBUGGER»вфайлконфигурацииядра.Еслижепоследняяопцияне обозначена(онейчастозабывают),товотладчикможновойтиизконсоли командой«sysctldebug.enter_debugger=ddb». Полученныйдампядра можноанализироватьлюбойсподручнойутилитой,благонедостаткавних ощущатьнеприходится.Например,вNTдляэтойцелиобычноиспользуетсяWinDbg,номыщъхпредпочитаетисследоватьсистемувживуюспомощьюSoftICE,ближайшиманалогомкотороговмиреLinuxявляетсяLinICE.
Значит,нажимаеммы<Ctrl-D>(SoftICE),<Ctrl-Q>(LinICE)или<Ctrl- Alt-Esc>(xBSD)иоказываемсявядре.Далеепишем«uимя_функции»и последовательноперебираемименавсехфункций(нуилиневсех,асамых соблазнительныхдляперехвата),списоккоторыхподNTможнополучить командой«dumpbin.exentoskrnl.exe/export>output.txt»(гдеdumpbin.exe
—утилита,входящаявсоставMicrosoftVisualStudioиPlatformSDK).Апод
Linux/xBSDэтужезадачуможнорешить,изучивсимвольнуюинформациюнесжатогоинестрипнутогоядра.
Вначаленормальных,неперехваченныхфункцийдолженнаходитьсястандартныйпрологвида«PUSHEBP/MOVEBP,ESP»илитипатого.Еслижетуда воткнутJMPилиCALL,тосвероятностью,близкойкединице,даннаяфунк- циякем-топерехвачена.Авоткем—этовопрос.Кромеруткитовперехва- томзанимаютсяантивирусы,брандмауэрыидругиепрограммы,поэтому, преждечемотправлятьсянапоискмалвари,необходимохорошоизучить особенностисвоейсистемысовсемиустановленнымиприложениями. ПродвинутыеруткитывнедряютJMP/CALLневначалофункции,авее середину,чтобыневызыватьподозрений.Насамомделе,проанализировавкодхакнутойфункции,легкоубедитьсявнекоторойегоненормальности.ЛевыйJMP/CALLпростоневписываетсявалгоритм!Однако,чтобы прийтикподобномузаключению,необходимонетолькознатьассемблер, ноииметьопытдизассемблирования.Ксчастью,продвинутыеруткиты встречаютсядостаточноредко,иподавляющеебольшинствоизнихвнедряетсявсамоеначало.
Просмотрев все функции и убедившись в отсутствии следов явного перехвата, приступаем к изучению таблицы системных функций, которая под SoftICE вызывается командой NTCALL, а под LinIce — командой D sys_call_table. Поскольку функции, перечисленные в таблице, не экспортируются ядром NT, то в отсутствие символьной информации (которую можно получить с сервераMicrosoftспомощьюутилиты SymbolRetriverотNuMega)SoftICEотображаетимяближайшейэкспортируемойфункцииплюссмещение.Апотомумынеможембыстросказать: перехваченаданнаяфункцияилинет,инампридетсянабиратькоманду«u адрес_функции»,чтобыпосмотреть,чтотамнаходится:нормальный,неперехваченныйпрологилиJMP/CALL.Вниксахинформацияосимволах присутствуетпоумолчаниюиподобныхпроблемневозникает. Естественно, помимо описанных существуют и другие методики перехвата, используемые руткитами, однако они довольно сложны для понимания и требуют предварительной подготовки, а потому здесь не рассматриваются.z
160 |
xàêåð 12 /108/ 07 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|||
|
|
|
|
-x cha |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
07)ДЕКАБРЬ12( x
WE ARE TOGETHER
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
108