Сейчас на форуме: bartolomeo, -Sanchez-, morgot, sashalogout (+5 невидимых)

 eXeL@B —› Софт, инструменты —› Detect It Easy 2.0
<< . 1 . 2 . 3 . 4 . 5 . 6 . >>
Посл.ответ Сообщение


Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 03 августа 2018 19:32 · Поправил: hors
· Личное сообщение · #1



2.05

[+] Many bugs have been fixed.
[+] JSON output in console version.
[+] No UPX build for Windows version

Full changelog: --> Link <--
How to build DiE from sources: --> Link <--

Download: --> Link <--



-----
http://ntinfo.biz


| Сообщение посчитали полезным: yashechka, hypn0, mak, RevCred, VOLKOFF, TRPD, HandMill, MarcElBichon, Bronco, BlackCode, -=AkaBOSS=-, sendersu, sefkrd, Autokent, mushr00m, =TS=, ==DJ==[ZLO], Isaev, ibmCORE, apslash, darkBLACK, Crawler, ELF_7719116, ADMIN-CRACK, Adler, Bad_guy


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 14 июня 2019 15:15
· Личное сообщение · #2

ARCHANGEL

Плаг под сабж значит. Может кому то пригодится

Надеюсь что там будет что то дельное

-----
vx





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

Создано: 14 июня 2019 15:19
· Личное сообщение · #3

difexacaw
На паблик его никто не даст

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





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 14 июня 2019 15:50 · Поправил: difexacaw
· Личное сообщение · #4

ARCHANGEL

Разумеется. Так как вы этот тулз собрались использовать автоматикой на файловом потоке. Это блэк и конечно же всё приват. Его после этого спалят аверы.

-----
vx





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

Создано: 14 июня 2019 16:23
· Личное сообщение · #5

они и сами аверы
видишь какой он зеленый




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

Создано: 14 июня 2019 16:50
· Личное сообщение · #6

Это блэк и конечно же всё приват. Его после этого спалят аверы.

Я вас прошу. Не смешите людей. Этот тул никому прост нахер не впал, кроме меня.

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





Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 15 июня 2019 17:44
· Личное сообщение · #7

ARCHANGEL пишет:
Ругается на вот это:
Q_EXPORT_PLUGIN2(simpleexample, SimpleExample)


Спасибо за тестирование. Я это исправлю в будущем.

Версии DiE 1.ХХ собирались под Qt 4.XX, а Версии DiE 2.ХХ собираются под Qt 5.ХХ. Поэтому плагин от SDK старого DiE ругается на новую Qt.

ARCHANGEL пишет:
difexacaw
Для своих девелоперских нужд делаю плагин, чтобы клацать пкм по исполняемому файлу, потом выбирать плагин и в нём жать "Сделать офигенненько". Параллельо для справки буду смотреть версию компилятора, чтобы на вообще всякой ненужной шняге кнопушку не жать.


Тогда для этих целей лучше взять за основу вот эту утилиту: --> Link <-- Она легче и быстрее классического DiE и не тянет всю огромную базу сигнатур. Все сигнатуры вшитые. То что надо вписывется в в код и компилируется. Информация по сборке --> Link <--

Добавлено спустя 17 минут
difexacaw пишет:
Тест на протекторах, определение OEP:

- Safeengine
- Themida
- Armadillo
- Aspack
- Asprotect
- Obsidium
+ Pecompact
- Privexeprot
- UPX
- VMP
- YC
- Enigma
- Mpress
- Nice
- Nspack
- Winlic
- Pelock
- Winunpack
- Mew

Не рабочее говно.


Если я правильно понял, ты взял множество файлов накрытых разными протекторами и стал с помощью DiE искать OEP?
С чего ты решил, что DiE может делать это? Где-то прочитал или кто-то рассказал? Как ты к этому пришёл?

difexacaw пишет:
Норм анпакер может справиться с другим протектором, не на который расчитан.


Глупости.

-----
http://ntinfo.biz





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 15 июня 2019 22:30
· Личное сообщение · #8

hors

> С чего ты решил, что DiE может делать это?

Так если пакер определят, то и OEP определять должен. Ну а проверить было не долго.

-----
vx




Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 15 июня 2019 22:48
· Личное сообщение · #9

difexacaw пишет:
Так если пакер определят, то и OEP определять должен. Ну а проверить было не долго.

так если пакер определяет, то и анпакать обязано, не ?

| Сообщение посчитали полезным: hors, =TS=


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 15 июня 2019 22:56
· Личное сообщение · #10

tihiy_grom

> так если пакер определяет, то и анпакать обязано, не ?

Нет, это операция посложнее. А так очевидно - пакер определил и EP тоже. По идеи как то обработать образ нужно после распаковки, тоесть на OEP. А для этого нужно её определить в идеале, но конечно можно просто запустить и потом уже когда всё распакуется работать с образом.

hors

> Глупости.

Почему же глупости, так многие анпакеры работают: ожидание распаковки -> дамп + фикс/сборка IAT.

-----
vx





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

Создано: 15 июня 2019 23:07
· Личное сообщение · #11

hors
Если DiE 2.xx будет работать с новыми версиями Qt, то, возможно, и мне удастся переделать старый плагин. Меня всё устраивает именно как оно сделано в DiE, его размер и скорость работы - тоже устраивают. Я бы остановился на нём всё же. Но, если что, то воспользуюсь линком на альтернативную тулзу.

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





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 15 июня 2019 23:14
· Личное сообщение · #12

hors

Кстате нужно добавить что дамп возможен именно на OEP, пока апп не инициализировано(небыло W-выборки). Тоесть можно пропустить OEP для работы с анпакед образом, но что бы дампить нужно это чётко выделить событие.

-----
vx


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


Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 16 июня 2019 00:16
· Личное сообщение · #13

difexacaw пишет:
Почему же глупости, так многие анпакеры работают: ожидание распаковки -> дамп + фикс/сборка IAT.


Да. Проблема только в том что поиск OEP, дамп и фикс IAT для распаковщиков разных пакеров может сильно различаться.

Теперь по пунктам:

1) Поиск OEP. Есть общеизвестные методы поиска OEP, которые срабатывают в 80% случаев. Но существуют и пакеры/протекторы, которые успешно запутывают общие методы поиска OEP

2) Дамп. В общем случае дампится вся память от ImageBase до конца участков памяти с атрибутами MEMORY_BASIC_INFORMATION.AllocationBase==ImageBase (если мы говорим сейчас о Windows).
Но есть пакеры/протекторы, которые при загрузке выделяют намного больше памяти и забивают её мусором после распаковки. При обычном дампе образуются файлы колоссального размера и не всегда работоспособные.

3) Фикс IAT. Как и в случае с OEP есть общеизвестные методы поиска оригинальной IAT и есть способы это всё запутать. Способы разные у разных пакеров/протекторов. Универсального решения, который бы работал во всех случаях здесь тоже нет. Кстати помимо фикса IAT в некоторых случаях нужен фикс TLS, релоков и иногда также ресурсов.

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

Более перспективное направление, это сделать для каждого пакера/протектора свой отдельный модуль, учитывающий все конкретные тонкости распаковки.

difexacaw пишет:
Кстате нужно добавить что дамп возможен именно на OEP, пока апп не инициализировано(небыло W-выборки). Тоесть можно пропустить OEP для работы с анпакед образом, но что бы дампить нужно это чётко выделить событие.


Да.

-----
http://ntinfo.biz





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 16 июня 2019 00:40 · Поправил: difexacaw
· Личное сообщение · #14

hors

Проблемы идут по цепочке. Раньше небыло способа чётко определить OEP. Соотвественно если что то дампить то образ становится не рабочим.

2. Когда анпакер отработал, те пройдена OEP и всё настроено, апп уже не зависит от слоя пакера, но это не всегда так, некоторые частично остаются частью апп, к примеру переносят какие то процедуры в буфера. Но это редко и не является проблемой. Все операции с памятью до OEP не относятся к исходному апп, это работает анпакер. Тут вся суть в выборке, впрочем это и есть критерий OEP.

3. Собрать импорт это наверно главная проблема, потому что во первых это работа с форматом и лишний раз это трогать не хочется, а во вторых часто импорт запутанный и сложный, там бывают части протектора.

> Исходя из этого невозможно создать распаковщик

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

В общем я как то не думал раньше над распаковкой, тоесть мне например это никогда нужно небыло. А зачем, если после само-распаковки апп открыто, всегда было достаточно обождать событие OEP прикрутив загрузчик. Не вижу особо смысла сохранять распакованный образ, это лишние трудности. Но теоретически это возможно.

Добавлено спустя 10 минут
hors

> Но существуют и пакеры/протекторы, которые успешно запутывают общие методы поиска OEP

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

-----
vx





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

Создано: 16 июня 2019 12:16
· Личное сообщение · #15

Ну что я вам могу сказать. Сборку-то самого плагина я пофиксил, теперь оно собирается. Но с версией 1 дая - не работает. Кладу dll в папку stuff/plugins, но плагинов не добавляется. В версии 2 такой папки, как plugins, нет вообще. И совершенно непонятно, куда его класть. Похоже, плагины в DiE - не особо кому нужны. Склоняюсь заюзать какой-то другой анализатор с более вменяемым SDK. Мож, кто юзал такой - подскажет что-то.

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





Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 16 июня 2019 14:10 · Поправил: =TS=
· Личное сообщение · #16

ARCHANGEL
"base\plugins" ?
(в поставке есть "base\plugins\platforms\qwindows.dll")

-----
DREAMS CALL US


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


Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 16 июня 2019 15:38
· Личное сообщение · #17

ARCHANGEL пишет:
Но с версией 1 дая - не работает. Кладу dll в папку stuff/plugins, но плагинов не добавляется.


Спасибо за тестирование. Проблема скорее всего в несовместимости разных версий Qt. Для DiE1.ХХ нужно 4.8.7

1) Устанавливаем VS2010: http://msdn.microsoft.com/en-us/library/dd831853%28v=vs.100%29.aspx
2) Устанавливаем QT 4.8.7 http://download.qt.io/archive/qt/4.8/4.8.7/qt-opensource-windows-x86-vs2010-4.8.7.exe
3) Компилируем плагин.
4) Кладем его в папку с плагинами. Папка указана в настройках. Options -> Paths -> Plugins
5) Options -> Plugins -> Enable plugins

ARCHANGEL пишет:
Похоже, плагины в DiE - не особо кому нужны


Увы. Это действительно так.
Если плагин сложный, то лучше оформить его в виде отдельной программы. А если нужны небольшие улучшения, то плагины тоже не нужны.
Правильнее связаться с автором и он добавит это в основную программу.

Это касается не только DiE, но и других программ тоже.

ARCHANGEL пишет:
Склоняюсь заюзать какой-то другой анализатор с более вменяемым SDK. Мож, кто юзал такой - подскажет что-то.


Можно попробовать Exeinfo PE. Там тоже есть SDK,

Добавлено спустя 5 минут
difexacaw пишет:
Вы можите такой прот для примера привести, просто те что выше в списке подчиняются общему правилу поиска OEP. Я не нашёл где это не работает.


Если это так, то это уже очень и очень неплохо.

-----
http://ntinfo.biz





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

Создано: 16 июня 2019 19:18
· Личное сообщение · #18

=TS=
Есть base/platforms, но там ни слова про плагины.

hors
С 4 версией понятно. Я бы хотел юзать 5 версию qt, и в связи с этим возникает вопрос - куда положить скомпилированный плагин и какое имя использовать для регистрации метаданных? Сейчас вот так:

Code:
  1. class SimpleExample : public QObject, PluginInterface
  2. {
  3.     Q_OBJECT
  4.     Q_INTERFACES(PluginInterface)
  5.     Q_PLUGIN_METADATA(IID "die.plugininterface/1.0" FILE "plugininterface.json")  //вот тут что написать?
  6. public:
  7.     bool init(DIEPLUGIN *pDiePlugin);
  8.     QString getName();
  9.  
  10. private slots:
  11.     void process();
  12. private:
  13.     DIEPLUGIN *pDiePlugin;
  14.     QPushButton *button;
  15. };


Добавлено спустя 3 часа 31 минуту
В общем, взял --> Exeinfo PE <--, у которого SDK совместим с Peid. Т.е. достаточно написать плагин для Peid, и он автоматически будет валидным для Exeinfo PE. Для Peid SDK дотаточно простой, и можно найти инфу о нём --> Peid Plugin SDK <--. Для С++ можно всё уместить так:

Code:
  1. #ifdef _DLLMACRO
  2.          #define  DllExport        __declspec(dllexport)
  3. #else
  4.          #define  DllExport        __declspec(dllimport)
  5. #endif
  6.  
  7. DllExport DWORD DoMyJob(HWND hMainDlg, char *szFname, DWORD lpReserved, LPVOID lpParam);
  8. DllExport LPSTR LoadDll();


На том и порешил юзать Exeinfo PE. Всем участвовавшим в дискуссии - спасибо.

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





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

Создано: 17 июня 2019 04:05
· Личное сообщение · #19

ARCHANGEL пишет:
достаточно написать плагин для Peid


Смысл? Все, что делает PEID - передает имя загруженного файла. Извратившись, можно еще подменить строчку в главном окне на что-то свое. Все это проще и удобнее сделать Stand-alone.

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


Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 30 июня 2019 00:10
· Личное сообщение · #20

2.04

[+] Many bugs have been fixed.

Download: --> Link <--

How to build DiE from sources: --> Link <--

-----
http://ntinfo.biz


| Сообщение посчитали полезным: plutos, Adler, BlackCode, mak, TRPD, DimitarSerg, mushr00m, esa_r


Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 30 июня 2019 04:54
· Личное сообщение · #21

hors пишет:
How to build DiE from sources: --> Link <--

Проверь пожалуйста линк, а то вот такой вылазит:

Code:
  1. К сожалению, страница, которую вы искали в этом блоге, не существует.


А все остальное - работает отлично! Спасибо за great tools!

-----
Give me a HANDLE and I will move the Earth.





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 30 июня 2019 07:34
· Личное сообщение · #22

plutos пишет:
Проверь пожалуйста линк

Fixed:
--> Link <--

-----
EnJoy!


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


Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 30 июня 2019 08:32
· Личное сообщение · #23

Jupiter пишет:
Fixed:

Теперь все путем! Спасибо!

-----
Give me a HANDLE and I will move the Earth.


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

Ранг: 8.2 (гость), 11thx
Активность: 0.050.04
Статус: Участник

Создано: 30 июня 2019 23:23
· Личное сообщение · #24

Просьба, когда будет время, допилить флаги DllCharacteristics. Отображаются не все.
Полный список флагов: DLL Characteristics


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


Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 01 июля 2019 00:37
· Личное сообщение · #25

d745150 пишет:
Просьба, когда будет время, допилить флаги DllCharacteristics. Отображаются не все.
Полный список флагов: DLL Characteristics


Спасибо за предложение. Это будет в следующей версии.

-----
http://ntinfo.biz


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

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

Создано: 01 октября 2019 13:42
· Личное сообщение · #26

1) В случае если ELF файл имеет не корректные значения в полях ei_class и/или ei_data DiE (версия 2.04 х64 linux) не распознаёт это как валидный ELF и выводит тип файла как binary. Но при этом скриптовая функция ELFFile.isValid() распознаёт его как валидный.
Это баг?

2) Эксперементально определил наличие функции readQword(). При этом упоминаний про них на гитхабе ни в editor/autocomplete/ELF.lst, ни в help/ELF.js нет. Они специально удалены из документации или их просто забыли добавить?

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


Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 01 октября 2019 18:06 · Поправил: hors
· Личное сообщение · #27

vilimax пишет:
1) В случае если ELF файл имеет не корректные значения в полях ei_class и/или ei_data DiE (версия 2.04 х64 linux) не распознаёт это как валидный ELF и выводит тип файла как binary. Но при этом скриптовая функция ELFFile.isValid() распознаёт его как валидный.
Это баг?


Спасибо за тестирование.
Это философский вопрос можно ли считать файл с неправильными значениями ei_class и/или ei_data настоящим ELF файлом. Так как от этих значений зависит последующий разбор всего файла.

vilimax пишет:
2) Эксперементально определил наличие функции readQword(). При этом упоминаний про них на гитхабе ни в editor/autocomplete/ELF.lst, ни в help/ELF.js нет. Они специально удалены из документации или их просто забыли добавить?


Функция readQword будет везде прописана в следующей версии DiE.

Новые функции добавляются по просьбам пользователей, поэтому если есть ещё какие-то идеи для новых функций, то не стесняемся писать здесь или на почту horsicq[at]gmail.com

-----
http://ntinfo.biz


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

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

Создано: 02 октября 2019 09:54
· Личное сообщение · #28

hors пишет:
Это философский вопрос можно ли считать файл с неправильными значениями ei_class и/или ei_data настоящим ELF файлом. Так как от этих значений зависит последующий разбор всего файла.


Спасибо за быстрый ответ.

Возможно я не точно выразился. ELFFile.isValid() считает валидным файл абсолютно любое значение ei_class, даже когда оно отличается от указанного в спецификации (ELFCLASSNONE, ELFCLASS32, ELFCLASS64). Тоже самое и/или для ei_data. Хотя в спецификации остальные значения зарезервированы.

И второй вопрос (хотя мне кажется что это больше относится к javascript): потеря точности в последнем байте чтении 8-битных указателей. Пример следующий кусок скрипта:
Code:
  1. function run()
  2. {
  3. var file=BinaryFile;
  4. var szCurrentFile=script.getCurrentFileName();
  5. file.setFileName(szCurrentFile)
  6. i=0
  7. temp=""
  8.         while (i<8)
  9.         {
  10.         temp=file.readByte(0x0+i).toString(16)+temp
  11.         i=i+1
  12.         }
  13. script.addMessage("Qword adress pointer as text: "+temp)
  14. script.addWarningMessage("Qword adress pointer as digit: "+file.readQword(0x0).toString(16))
  15. script.addWarningMessage("Qword adress pointer convert by qwordToHex() "+script.qwordToHex(file.readQword(0x0)))
  16. }


Выводит:
Qword adress pointer as text: 987654321fedcba
Qword adress pointer as digit: 987654321fedc80
Qword adress pointer convert by qwordToHex() 0987654321fedc80

Соответственно вопрос как правильно работать с 8-битными значениями для сохранения точности?




Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 02 октября 2019 11:34
· Личное сообщение · #29

vilimax пишет:
Возможно я не точно выразился. ELFFile.isValid() считает валидным файл абсолютно любое значение ei_class, даже когда оно отличается от указанного в спецификации (ELFCLASSNONE, ELFCLASS32, ELFCLASS64). Тоже самое и/или для ei_data. Хотя в спецификации остальные значения зарезервированы.


Ок. Я подправлю ELFFile.isValid() чтобы она проверяла ELFCLASS32/ELFCLASS64.

vilimax пишет:
И второй вопрос (хотя мне кажется что это больше относится к javascript): потеря точности в последнем байте чтении 8-битных указателей. Пример следующий кусок скрипта:


Да, это проблема JavaScript.

vilimax пишет:
Соответственно вопрос как правильно работать с 8-битными значениями для сохранения точности?


Есть несколько способов:

1) Конвертировать в строку.
2) Работать с DWORD.
3) Написать на C++ функции для конкретных задач, а потом вызывать их из скрипта.

Например поправить эти файлы:
https://github.com/horsicq/DIE-engine/blob/master/die_source/scriptbinary.h
https://github.com/horsicq/DIE-engine/blob/master/die_source/scriptbinary.cpp

А потом пересобрать DiE.

http://n10info.blogspot.com/2019/06/build-detect-it-easy-on-linux-windows.html

-----
http://ntinfo.biz





Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 07 октября 2019 00:29 · Поправил: hors
· Личное сообщение · #30



2.05

[+] Many bugs have been fixed.
[+] JSON output in console version.
[+] No UPX build for Windows version

Download: --> Link <--

-----
http://ntinfo.biz


| Сообщение посчитали полезным: plutos, d745150, Adler, BlackCode, parfetka, TRPD, mushr00m

Ранг: 25.2 (посетитель), 8thx
Активность: 0.030.01
Статус: Участник

Создано: 07 октября 2019 09:13
· Личное сообщение · #31

hors пишет:
2.05

[+] Many bugs have been fixed.
[+] JSON output in console version.
[+] No UPX build for Windows version

Download: --> Link <--


На сайте картинка от версии 2.05, а ссылки на 2.04

| Сообщение посчитали полезным: hors
<< . 1 . 2 . 3 . 4 . 5 . 6 . >>
 eXeL@B —› Софт, инструменты —› Detect It Easy 2.0
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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