Сейчас на форуме: Rio, vsv1, site-pro (+6 невидимых)

 eXeL@B —› Софт, инструменты —› Ariadne Framework & Deobfuscator
<< . 1 . 2 . 3 . >>
Посл.ответ Сообщение


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 29 ноября 2011 23:50 · Поправил: reversecode
· Личное сообщение · #1

http://ariadne.group-ib.ru/ru/

Ariadne – это фреймворк для всех, кто занимается reverse engineering и смежными задачами (анализ вирусов, защита ПО и ее анализ, forensic и т.д.). Во всех этих случаях Ariadne позволит сэкономить существенную часть времени за счет предоставления решения нудных типовых задач. А ведь создание кода, решающего эти нудные типовые задачи, может занимать до 80% времени! При этом никто не застрахован от повторения уже неоднократно совершенных кем- то ошибок, исправление которых отнимает время. Ariadne позволит сэкономить время и творческий потенциал для решения действительно инновационных задач.

http://ariadne.group-ib.ru/ru/download
демо версия ariadne.zip

http://www.slideshare.net/dschelkunov/on-deobfuscation-in-practice
какая то презентация, если кто может скачайте и переложите на нормальный фо

ps мне почему то кажется это работа кого то с форума, не?

| Сообщение посчитали полезным: mak, vden


Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 01 декабря 2011 21:49
· Личное сообщение · #2

Ariadne: Optimized successfully

MC: Id = { 0x3, 0x0, 0x0, uninit, uninit }, offset = uninit, size = uninit;
MC: Id = { 0x5, 0x0, 0x3e9, uninit, uninit }, offset = uninit, size = 0x0;



--------------------------------------------------------------------------------------------------------------
{ 0x1, 0x0, 0xc9c82a, uninit, uninit }: FUNC memory_cell ( { 0x5, 0x0, 0x3e9, uninit, uninit } );
--------------------------------------------------------------------------------------------------------------


-----
zzz




Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 01 декабря 2011 21:53
· Личное сообщение · #3

zeppe1in
и у меня также, ничего дельного не получил

-----
SaNX





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 01 декабря 2011 21:56 · Поправил: reversecode
· Личное сообщение · #4

вообщем заветной картинки
before


after



похоже не будет))


Archer
так мы с пониманием
просто есть подозрение что проект не дает именно такой или похожей картинки
а выдает просто IR текст
а хотелось бы - оптимизированый код

Archer пишет:
Дык плагин асм-код давать и не должен, он должен дать листинг в промежуточном языке,

пока что нет и псевдо листинга
ждем комментарии и разьяснения автора

Ultras это было почти сразу понятно, автор занимается разработкой защит которые здесь же на форуме и ломают

На cracklab-е --> обсуждается <-- тема взлома конверта, разработкой которого я занимался раньше Интересно, сколько времени потребуется на решение задачки (восстановление извлеченных инструкций).




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 01 декабря 2011 22:27 · Поправил: Модератор
· Личное сообщение · #5

Вы б это, приняли во внимание, что версия ещё типа альфа/бета и лучше сразу выкладывали, на чём не работает и где. Чтоб аргументированно разговор шёл, а не флудотоп разводить.
Дык плагин асм-код давать и не должен, он должен дать листинг в промежуточном языке, но бинарь получить можно, если поглядеть на АПИ. Хотя он будет несколько страшноватый, но это из-за локальных переменных, походу.



Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 01 декабря 2011 22:45 · Поправил: vden
· Личное сообщение · #6

.



Ранг: 123.0 (ветеран), 10thx
Активность: 0.060
Статус: Участник

Создано: 01 декабря 2011 22:50
· Личное сообщение · #7

На сайте сказано: "Ни одна из продаваемых версий не будет содержать полноценный деобфускатор" - собственно отпадают многие вопросы, в т.ч. и про оптимизацию деобфусцированной трассы.

-----
.[ rE! p0w4 ].




Ранг: 3.3 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 декабря 2011 10:27
· Личное сообщение · #8

reversecode пишет:
Ultras это было почти сразу понятно, автор занимается разработкой защит которые здесь же на форуме и ломают

Авторов на самом деле несколько. Один из авторов, о котором идет речь, уже более года никаких защит не пишет, в компании той не работает и никаких отношений коммерческих с ней не поддерживает, а занимается всецело движком Ariadne. Инфа в бложике устарела и человек ее подправит. Тем не менее, конкретно этот человек не приветствует использование Ariadne для взлома нормального защищенного софта, каким бы из протов он не был бы накрыт. Деобфускации трассы в большинстве случаев достаточно для анализа, но недостаточно для снятия защиты. Поэтому даже если мы и зарелизим полноценный деобфускатор, то инструмент этот в широкий паблик выпускать не особо хочется. Особого желания пихать это в демку, как все понимают, тем более нет. Если кому-нибудь, тем не менее, нужна полноценная деобфускация CFG, то мы готовы обсуждать это, но конкретно с заказчиком. В таком случае это будет сугубо индивидуальный продукт для конкретного заказчика под его требования на базе нашего движка.
По поводу багов. Они наверняка есть Все-таки речь идет о ранней бете. Поэтому, если у кого-то что-то не заработало, плз, кидайте в личку. Мы обязательно посмотрим и постараемся пофиксить.
Archer пишет:
Дык плагин асм-код давать и не должен, он должен дать листинг в промежуточном языке, но бинарь получить можно, если поглядеть на АПИ. Хотя он будет несколько страшноватый, но это из-за локальных переменных, походу.

Ага, именно так. Да не настолько и страшноватый



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 02 декабря 2011 10:51
· Личное сообщение · #9

Ariadne пишет:
Тем не менее, конкретно этот человек не приветствует использование Ariadne для взлома нормального защищенного софта, каким бы из протов он не был бы накрыт.

а для взлома ненормального защищенного софта?

Ariadne пишет:
Деобфускации трассы в большинстве случаев достаточно для анализа, но недостаточно для снятия защиты. Поэтому даже если мы и зарелизим полноценный деобфускатор, то инструмент этот в широкий паблик выпускать не особо хочется.

ну прости за прямолинейность.. а кому он тада нужен?! мы написали мощный деобфускатор и теперь срубим кучу бабла, но потом подумав решили вырезать из него половину функционала, чтобы его возможностей было недостаточно для снятия защиты ибо мы заботимся о шароварах, потому-что мы сами шаровары, но мы пишем софт для реверсеров. берд. ИМХО, но так оно и выглядит.




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 02 декабря 2011 11:05
· Личное сообщение · #10

Да нет такой волшебной палочки чтоб раз,и снялся VM_prot или тому подобная защита и получить чистый код,темболее проект как я понял делался для анализа восновном малвари накрытую разными крипторами,ещё Крис Касперский хотел в всвоё время писать деобфускатор, неудевлюсь что к этому проекту приложил руку Крис
Ariadne пишет:
Деобфускации трассы в большинстве случаев достаточно для анализа, но недостаточно для снятия защиты

Ну для понятия логику хватит,а остальное дело техники(прямые руки,трезвый ум и усидчивость)

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 02 декабря 2011 12:21
· Личное сообщение · #11

Деобфускация трассы - это лишь малая часть. Грубо говоря, при таком раскладе мы получаем только одну деобфускированную орцепь, и пусть даже алго некоей функции (которую нам нужно изучить) представлен ориентированным упорядоченным деревом (т.е. к каждому листу существует только один маршрут), и общее количество листов N (хотя маршрутов в реальной задаче может быть многим больше, если граф - просто произвольный связный орграф). Тогда остаётся ещё N-1 обфускированных маршрутов, для которых даже неизвестны условия, при которых можно получить для них покрытие, т.к. обфускация.

Так что как игрушка - сгодится.

ClockMan пишет:
Да нет такой волшебной палочки чтоб раз,и снялся VM_prot или тому подобная защита и получить чистый код

Да-да. +1.

-----
Stuck to the plan, always think that we would stand up, never ran.


| Сообщение посчитали полезным: Vamit

Ранг: 3.3 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 декабря 2011 12:29
· Личное сообщение · #12

MasterSoft пишет:
ну прости за прямолинейность.. а кому он тада нужен?! мы написали мощный деобфускатор и теперь срубим кучу бабла, но потом подумав решили вырезать из него половину функционала, чтобы его возможностей было недостаточно для снятия защиты ибо мы заботимся о шароварах, потому-что мы сами шаровары, но мы пишем софт для реверсеров. берд. ИМХО, но так оно и выглядит.

За прямолинейность не надо просить прощения
Мы считаем неразумным вываливать в демку весь функционал. Обычно так никто не делает, и мы не будем. Для задачи анализа вполне достаточно трассы. В демке деобфускация статическая. В полнофункциональной версии будет и динамическая. Если же по каким-либо причинам функционала Ariadne не хватает и нет желания, используя наше API, его самостоятельно дорисовывать, мы готовы это обсуждать и сделать продукт по желанию в рамках расширенной техподдержки.



Ранг: 3.3 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 декабря 2011 13:32
· Личное сообщение · #13

ARCHANGEL пишет:
Деобфускация трассы - это лишь малая часть. Грубо говоря, при таком раскладе мы получаем только одну деобфускированную орцепь, и пусть даже алго некоей функции (которую нам нужно изучить) представлен ориентированным упорядоченным деревом (т.е. к каждому листу существует только один маршрут), и общее количество листов N (хотя маршрутов в реальной задаче может быть многим больше, если граф - просто произвольный связный орграф). Тогда остаётся ещё N-1 обфускированных маршрутов, для которых даже неизвестны условия, при которых можно получить для них покрытие, т.к. обфускация.

Это верно, но с учетом того, что вероятность прохождения по всем путям равнозначна. На практике, как правило, известно, как при определенных входных параметрах ведет себя программа и можно вполне осознанно задавать их. Обычно интересует конкретный путь.



Ранг: 8.5 (гость), 2thx
Активность: 0.010
Статус: Участник

Создано: 02 декабря 2011 13:36 · Поправил: HaRpY
· Личное сообщение · #14

Практически любой нормальный код в той или иной мере содержит циклы. Развертывание такого кода в трасу (даже с небольшим количеством итераций) превращает листиг в длинющую портянку, ковыряться в которой то еще удовольствие. Кроме этого, хранение трасы будет сжирать слишком много памяти.
Как я понял, в предлагаемом демо-фреймворке, оптимизация не приводит к сворачиванию циклов.

Есть ли в полной версии возможность оптимизации со свертыванием повторяющихся кусков (циклов)?

Может Вам в примерах на сайте показать деобфускацию на чем-нибудь поинтереснее чем из original.exe:
Code:
  1.         mov         eax,5
  2.         je        l1
  3.         mov         eax,1
  4.         jmps    l2
  5. l1:    mov         eax,2
  6. l2:    retn





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 02 декабря 2011 14:40
· Личное сообщение · #15

ущипните меня я так и не понял
что будет результатом в IDA при удачном разборе вашим плагином?
можно пример?



Ранг: 3.3 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 декабря 2011 14:49
· Личное сообщение · #16

HaRpY пишет:
Есть ли в полной версии возможность оптимизации со свертыванием повторяющихся кусков (циклов)?

Да, оптимизация не приводит к сворачиванию циклов на данный момент, но новые методы оптимизации будут добавляться по мере развития продукта.

HaRpY пишет:
Может Вам в примерах на сайте показать деобфускацию на чем-нибудь поинтереснее чем из original.exe:

Может быть. Подумаем.

Насчет полного покрытия. Пример с нашего сайта:

00401165 MOV EAX,5
0040116A JE SHORT testfile.00401173
0040116C MOV EAX,1
00401171 JMP SHORT testfile.00401178
00401173 MOV EAX,2
00401178 RET

Прогнали этот пример через одну популярную CISC VM с выкрученными на максимум настройками морфера. После обфускации получили 82668 инструкции IR, 19955 переменных, 594 базовых блока. На 32-й итерации работы деобфускатора получили следующее:

{ 0x2, 0x0, 0x4b98, uninit, uninit }: var0 = %EFLAGS & 0x40;
{ 0x2, 0x0, 0x5a77, uninit, uninit }: if( var0 == 0x0 ) goto label { 0x8, 0xfffffffe, 0x463, uninit, uninit };
{ 0x2, 0x0, 0x6e99, uninit, uninit }: var2 = 0x2;
{ 0x8, 0x0, 0xd3aa0, 0x1000, uninit }: label { 0x8, 0x0, 0xd3aa0, 0x1000, uninit };
{ 0x2, 0x0, 0xa87b, uninit, uninit }: %eax = var2;
{ 0x2, 0x0, 0xa881, uninit, uninit }: var1 = dword ptr *%esp;
{ 0x2, 0x0, 0xa882, uninit, uninit }: %esp = %esp + 0x4;
{ 0x2, 0x0, 0xa883, uninit, uninit }: goto var1;
{ 0x8, 0xfffffffe, 0x463, uninit, uninit }: label { 0x8, 0xfffffffe, 0x463, uninit, uninit };
{ 0x2, 0x0, 0xd8c0, uninit, uninit }: var2 = 0x1;
{ 0x2, 0x0, 0xe7b4, uninit, uninit }: goto label { 0x8, 0x0, 0xd3aa0, 0x1000, uninit };

Т.е. сделать деобфускацию полного покрытия возможно в принципе и мы готовы обсуждать эти вещи, хотя в продукте, который мы представляем, полного покрытия нет.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 02 декабря 2011 14:55
· Личное сообщение · #17

reversecode
Листинг должен быть промежуточного кода, аналогичный тому, что приведён в посте выше, который откроется в отдельном идовом окне, если всё прошло успешно. На паре семплов с вм, что у меня валялись, показало код, похожий на правду, сравнивал с анвиртуалайзером код.



Ранг: 3.3 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 декабря 2011 14:58
· Личное сообщение · #18

reversecode пишет:
ущипните меня я так и не понял
что будет результатом в IDA при удачном разборе вашим плагином?
можно пример?

Чуть позже выложим видео. В процессе.



Ранг: 8.5 (гость), 2thx
Активность: 0.010
Статус: Участник

Создано: 02 декабря 2011 15:33 · Поправил: HaRpY
· Личное сообщение · #19

Ariadne пишет:
Насчет полного покрытия. Пример с нашего сайта:

Я имел ввиду ровно обратное: исходный пример original.exe непоказателен, чем бы он не обрабатывался.
Вот, например, расчет CRC обработанный oreans' макросом MUTATE, у меня после прогона получается нечто отпугивающее. Хотя обычным статическим анализом без эмуляции(трассировки) можно получить код очень близкий к оригиналу.



b81e_02.12.2011_EXELAB.rU.tgz - TestAri.zip



Ранг: 22.4 (новичок), 19thx
Активность: 0.020
Статус: Участник

Создано: 02 декабря 2011 17:24
· Личное сообщение · #20

1900 $



Ранг: 3.3 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 декабря 2011 19:39 · Поправил: Ariadne
· Личное сообщение · #21

Пример работы плагина под IDA здесь
HaRpY
Посмотрели файлик. Результат работы движка в аттаче. Добавим, кстати, лог от движка:
AidCreateEngine...
AidLoadPeFile...
AidDisassemble...
AirCreateFactory...
AirCreateCtx...
AirGenerateTrace...
AirCompile...
AirGetInstr...before:
instructions: 113280
basic blocks: 7271
local variables: 35365

AirOptimize...after:
instructions: 39
basic blocks: 1
local variables: 15

0591_02.12.2011_EXELAB.rU.tgz - after2.txt



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 02 декабря 2011 19:49
· Личное сообщение · #22

Johnny Mnemonic пишет:
1900 $

да, это явно адекватная ценовая политика, желаю удачи.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 02 декабря 2011 19:49 · Поправил: reversecode
· Личное сообщение · #23

по видео я так понял код с которого была снята обфускация обратно вернулся уже в ida для дальнейшего анализа, тоесть то что я показывал на картинке выше,
так?
демка это будет позволять?
тогда подожду версии с иправлеными багами на моем примере

Ariadne пишет:
смотрим как раз

собственно мне не горит
это просто первый попавшийся из паблика для тестов
но результаты позапускать исправленый плагин поглядеть в живую - хочется



Ранг: 3.3 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 декабря 2011 19:56 · Поправил: Ariadne
· Личное сообщение · #24

reversecode пишет:
так?

да, так
пардон. он вернулся для дальнейшего анализа уже в IR. есть желание анализировать в асме его? на наш взгляд в IR проще...

reversecode пишет:
демка это будет позволять?

конечно

reversecode пишет:
тогда подожду версии с иправлеными багами на моем примере

смотрим как раз



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 02 декабря 2011 21:01
· Личное сообщение · #25

=) для продукта такой готовности цена, имхо, завышена. особенно, если учесть то что деобфускатор будет резанный.
p.s. а ида у вас пиратская, походу ;)

-----
старый пень




Ранг: 3.3 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 декабря 2011 21:09
· Личное сообщение · #26

r_e пишет:
p.s. а ида у вас пиратская, походу ;)

такое мнение, потому что последняя 6.2, а на ней только Qt гуй? если это смущает, можем собрать плагин, а также и видео и под 6.2. вот только нужно ли?



Ранг: 8.5 (гость), 2thx
Активность: 0.010
Статус: Участник

Создано: 02 декабря 2011 21:44
· Личное сообщение · #27

Ariadne пишет:
Посмотрели файлик. Результат работы движка в аттаче.

Разница ощутима У меня вышло ~50К строк ИР кода. Это из-за ограничений демки или моя кривость при использовании?
Касательно примерчика - траса покрывала 100% кода процедуры, но оптимизатор вместе с водой выплеснул и младенца. Странно, что результат вообще не свелся к банальному
Code:
  1. %eax =   0x7050be6d;

Хотя я ожидал увидеть что-то подобное, тому что в аттаче. Скорее всего переоптимизация произошла из-за использования значений аргументов. Каков будет результат для диапазона RVA 1050h-1A3Ah? Надеюсь наша переписка позволит общественности расширить преставление о Вашем продукте.

9028_02.12.2011_EXELAB.rU.tgz - __txtD.rar



Ранг: 3.3 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 декабря 2011 22:26 · Поправил: Ariadne
· Личное сообщение · #28

HaRpY пишет:
Разница ощутима У меня вышло ~50К строк ИР кода. Это из-за ограничений демки или моя кривость при использовании?

Нет, Вы всё сделали правильно, мы просто заменили длл и запускали Ваш файл в неизменном виде, так что это ограничение демки.
HaRpY пишет:
Касательно примерчика - траса покрывала 100% кода процедуры, но оптимизатор вместе с водой выплеснул и младенца. Странно, что результат вообще не свелся к банальному

Можно сказать, что почти к %eax = 0x7050be6d; результат и свёлся, просто ещё заполняется строка. сначала нам тоже показалось, что произошла некоторая переоптимизация, потому что нет зависимости от входных значений, но мы исследовали этот вопрос, и дело оказалось вот в чём. Если поглядеть этот код, то видно, что учитывается каждый бит входного буфера отдельно. Причём, за это отвечает вот такой код:
Code:
  1. 004012B5  RCR AL,1
  2. 004012B7  JNB TestAri.00401347

Выходит, что от входных данных зависит исключительно CFG, но у нас трасса, потому и вышли константы.

HaRpY пишет:
Каков будет результат для диапазона RVA 1050h-1A3Ah?

По сути, при задании такого диапазона в функцию параметры не переданы, и эмулятору они неизвестны. в таком случае эмулятор в качестве неизвестных значений берёт 0, а функция построена таким образом, что она сначала делает вычисления, потом декрементирует счётчик и проверяет его на 0. Таким образом, будет пройдено 0xffffffff итераций подсчёта, на что памяти скорее всего не хватит.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 03 декабря 2011 06:03
· Личное сообщение · #29

Я что то не вдуплю. Это выходит динамическая деобфускация, а при статической должен восстановиться исходный алгоритм? Иначе такая оптимизация мало отличается от эмуляции и практической ценности мало представляет.

-----
Yann Tiersen best and do not fuck




Ранг: 8.5 (гость), 2thx
Активность: 0.010
Статус: Участник

Создано: 03 декабря 2011 11:51
· Личное сообщение · #30

PE_Kill пишет:
Это выходит динамическая деобфускация, а при статической должен восстановиться исходный алгоритм?

Как я понимаю, из-за принятой стратегии "работать только с трассой" и возникает проблема полноценного восстановления исходного алгоритма. Статический способ не справится с циклами и будет много лишнего, а динамический поглотит сам алгоритм, поставив во главу угла результат работы алгоритма. Применительно к приведенному выше примеру расчета CRC: будет получаться либо оооочень развернутый код, либо сам результат расчета CRC (0x7050be6d), а получить алго в том виде как это было до мутации не получится. Кроме этого, трасса не гарантирует полного покрытия исходного кода, таким образом на развилке типа триал/релиз в оптимизированном варианте мы получим только лишь одну часть алгоритма.
В общем, данный фреймворк (по текущему состоянию) следует позиционировать как мощнейшее средство оптимизации трассы. Но, как я думаю, большинству интересно именно приведение обфусцированного кода к исходному виду, т.е. нужно видеть код таким, каким он был до обработки обфускатором. Так что позволю себе дать совет авторам: если у Вас есть желание и возможность сделать кроме оптимизации трассы еще и оптимизацию CFG то делайте. Потом уже решайте оставить у себя или продавать.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 03 декабря 2011 12:06
· Личное сообщение · #31

HaRpY

"В AIR Wave Deobfuscation Technology используется два метода деобфускации – статический и динамический. Статический метод более приближен к классическим подходам из теории компиляторов. Динамический метод основан на эмуляции IR инструкций и дает более мощные результаты там, где не справляется статический."

Отсюда я сделал вывод, что статическая деобфускация как раз и оптимизирует CFG, но:
"Заметим сразу, что речь идет о деобфускации трассы. Ни одна из продаваемых версий не будет содержать полноценный деобфускатор, чтобы предотвратить использование технологий Ariadne в нелегитимных целях для снятия программных защит."

Т.е. она реализована, она есть, но увидеть ее не получится, ибо в паблик релизах работа только с трассой. Применение оптимизации трассы (не полное покрытие кода), я, даже подумав немного, придумать не могу.

-----
Yann Tiersen best and do not fuck



<< . 1 . 2 . 3 . >>
 eXeL@B —› Софт, инструменты —› Ariadne Framework & Deobfuscator
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати