eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: Adler, PsySerg, DeeDee (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Основной форум —› Опять .net
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 49 . 50 . >>
Посл.ответ Сообщение

Ранг: 60.6 (постоянный)
Статус: Участник

Создано: 30 августа 2010 22:59 · Поправил: 2 сентября 2016 10:10 s0l New!
Цитата · Личное сообщение · #1

Со времени создания топика много обсудили, во много м разобрались и много осталось за кадром. Решил подшить выкладываемый софт и линки

Инструменты:

dnSpy - бодрый декомпилятор и отладчик тут беты

Gray Wolf - DE-ObfuScatE / Edit IL(Live) / Add payloads / Edit attributes(public/privet) / Copy strong names signing on EXE/DLL
ReSharper 6.0 Build 2093 Pre-Release - Очень навороченый декомпилер, побробности --> ТУТ <--.
Рег-данные:
Code:
  1. User Name: ReSharper EAP User
  2. License Key: 0-A60kqsqDMPkvPrLC3bz1/jmns4/DAUV6
  3. which is valid until 31 March 2010

Reflector 8.3.3.115 - платный декомпилятор .NET 8.3.0.95 + (дополнение к нему)
Седьмая версия рефлектора - думаю все знают
Сборка Add-in'ов для Reflector - есть много полезных вещей
.Net ID 1.0.0.3 - определение защиты
DNiD by Rue - сигнатурный анализатор
Dotnet IL Editor (DILE)- Opensource дизассемблер и дебаггер
Xenocode Fox Code Analyzer- профайлер и дизассемблер
Reactor Decryptor 1.7 - что то декриптит, но что не понятно(с) zeppe1in
Simple Assembly Explor (SAE) - Assembler, Disassembler, Deobfuscator, IL editor and more...
DotNet Dumper 1.0 - Дампер .net'овских приложений. Подробное описание
Kurapica dotNET Tracer 1.1 - трейсер от известного автора инструментов для .net
ILSpy 1.0.0.481 - Opensource комбайн, на подобие SAE. Подробности тут
dotTrace Performance 4.0.665.4 - Неплохой трейсер для .Net приложений. Умеет делать трейсы не смешивая потоки как KDT. Умеет сравнивать трейсы двух запусков программы
Рег-данные:
Code:
  1. Name: exelab
  2. Serial: OLgDSHG0hJghkLdXYJh1IjM3ytMrqKcn

Universal Fixer 1.0 - fix dumps after dumping them whit Dotnet Dumper or other similiar tools and will also fix nasty things: multiple assembly/module definitions, wrong extends, etc.
iMPROVE .NET Deobfuscator - деобфускатор


ConfuserDumper
ConfuserDelegateKiller
CodeCrackerTools: ConfuserMethodsDecryptor, ConfuserDelegateKiller, ConfuserStringDecryptor, MegaDumper, etc.

Статьи с хабры:
Защита .NET приложений - Субъективная теоретическая муть с хабры, выдаваемая за обзор обфускаторов(только для фанатов)
Как обмануть NET.Reflector - вот это уже годная статья, в которой рассматривается ручная обфускация в стихах и картинках
Взлом программ для чайников - ну не знаю...прописные истины, но приятно, что все это есть на русском языке и нормально оформлено
Реверс-инжиниринг обфусцированной сборки .NET - один только заголовок чего стоит. По сути статья информативная
Инъекции MSIL кода в стороннюю сборку при помощи Mono.Cecil. Реализация принципов АОП в NET
Избавление .NET программы от регистрации на примере BEM
Снимаем дамп объектов с памяти .Net приложения

Другое:
.NET Reflector v7.0.0.198 (C# Source by wangshy)
[url=http://lifeinhex.com/string-decryption-with-de4dot/]String decryption with de4dot[/url

-

Last edit: 2012-02-17, Links fixed. Jupiter]

Ранг: 516.1 (!)
Статус: Участник

Создано: 9 февраля 2011 10:31 New!
Цитата · Личное сообщение · #2

практически ничего, в принципе, если есть исходники плагина, то можно пересобрать под актуальную


Ранг: 755.0 (! !)
Статус: Участник
Student

Создано: 9 февраля 2011 13:30 New!
Цитата · Личное сообщение · #3

CodeSearch вроде работает в последней, хоть и написан для 5.0


Ранг: 95.2 (постоянный)
Статус: Участник

Создано: 10 февраля 2011 09:06 New!
Цитата · Личное сообщение · #4

А что вот делать с такой хренатенью?

картинго

поверх вроде .net reactor 4+

Ранг: 78.7 (постоянный)
Статус: Участник

Создано: 10 февраля 2011 11:29 New!
Цитата · Личное сообщение · #5

inf1kek пишет:
А что вот делать с такой хренатенью?

Может и МексКод
rghost.ru/4281487
Так Посмотри !

Ранг: 508.6 (!)
Статус: Модератор

Создано: 10 февраля 2011 11:34 New!
Цитата · Личное сообщение · #6

inf1kek
для начала надо получить .NET сборку проги

Ранг: 508.6 (!)
Статус: Модератор

Создано: 10 февраля 2011 13:28 · Поправил: sendersu New!
Цитата · Личное сообщение · #7

Reflector 7 beta3

что нового
.NET Reflector 7 Beta 3 is now available. This build is feature complete and contains numerous enhancements to decompilation and .NET 4 support, along with tabbed decompilation, and PowerCommands integration. This beta fixes an exception that occurred when Reflector was closed due to an expected folder not being created.

Внимание! ета версия требует активации
время на поиграццо - 14 дней

Ранг: 45.8 (посетитель)
Статус: Участник

Создано: 17 февраля 2011 23:22 New!
Цитата · Личное сообщение · #8

Пара вопросов:
Может кто подскажет (сам пока не нашел) где в метаданных прописывается список сборок для аттрибута InternalsVisibleToAttribute? И можно ли, оставив InternalsVisibleToAttribute рабочим для дружественной сборки, убрать зависимость от publickey, т.е. сделать сборку дружественной только по имени (в случае если у дружественной сборки нет publickey).

Ранг: 45.8 (посетитель)
Статус: Участник

Создано: 18 февраля 2011 00:41 New!
Цитата · Личное сообщение · #9

Отвечу сам себе
1. table CustomAttribute
2. от паблик ключа можно отвязать забиванием его нулями в блобе с правкой размера аттрибута


Ранг: 748.2 (! !)
Статус: Участник
bytecode!

Создано: 18 февраля 2011 23:14 New!
Цитата · Личное сообщение · #10

На подходе ReShaper 6
blogs.jetbrains.com/dotnet/2011/02/resharper-6-bundles-decompiler-free-standalone-tool-to-follow/

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


Ранг: 45.8 (посетитель)
Статус: Участник

Создано: 23 февраля 2011 01:13 New!
Цитата · Личное сообщение · #11

Нужен .Net отладчик
есть приложение, основной запускаемый файл - нативный, в процессе запуска выполняется куча длл - нативных, .Net и Mixed сборок
программа падает на одном методе Mixed сборки
хочется посмотреть это дело в отладке
чем лучше дебажить такой случай?
Dile я не смог туда прикрутить
В принципе идеальным вариантом был бы отладчик Visual Studio, только не понимаю пока как запустить отладку и остановиться именно на нужном мне методе. Может есть какие-то примочки для студии?

Ранг: 516.1 (!)
Статус: Участник

Создано: 24 февраля 2011 08:20 New!
Цитата · Личное сообщение · #12

Tyrus, можно попробовать вот это для отладки
www.smidgeonsoft.prohosting.com/pebrowse-pro-interactive-debugger.html

Ранг: 45.8 (посетитель)
Статус: Участник

Создано: 24 февраля 2011 23:02 New!
Цитата · Личное сообщение · #13

Av0id
Спасибо, но это помоему не подходит.

Проблема такая:
Убил во всех файлах сборки StrongName
Загрузка идет полным ходом до появления такого экспешена:

Code:
  1. Microsoft.Practices.Unity.ResolutionFailedException was unhandled
  2.   Message="Resolution of the dependency failed, type = "TEMS.Domain.ServiceModel.ServiceProviderSupplierFactory", name = "AppDomainFactory". Exception message is: The current build operation (build key Build Key[TEMS.Equipment.Server.AppDomainServerFactory, AppDomainFactory]) failed: Evidence has no strong name key (Strategy type BuildPlanStrategy, index 5)"
  3.   Source="TEMS.Domain"
  4.   NameRequested="AppDomainFactory"
  5.   TypeRequested="ServiceProviderSupplierFactory"
  6.   StackTrace:
  7.        в TEMS.Domain.DomainResolver.get_ServiceProviderSupplierFactories()
  8.        в TEMS.ServiceModel.ServiceProviderManager.Activate()
  9.        в tem.MixedEquipmentManagerSink.onStartServer(MixedEquipmentManagerSink* )
  10.   InnerException: Microsoft.Practices.ObjectBuilder2.BuildFailedException
  11.        Message="The current build operation (build key Build Key[TEMS.Equipment.Server.AppDomainServerFactory, AppDomainFactory]) failed: Evidence has no strong name key (Strategy type BuildPlanStrategy, index 5)"
  12.        Source="Microsoft.Practices.ObjectBuilder2"
  13.        BuildKey="Build Key[TEMS.Equipment.Server.AppDomainServerFactory, AppDomainFactory]"
  14.        ExecutingStrategyIndex=5
  15.        ExecutingStrategyTypeName="BuildPlanStrategy"
  16.        StackTrace:
  17.             в Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuild erContext  context)
  18.             в Microsoft.Practices.ObjectBuilder2.Builder.BuildUp(IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, Object buildKey, Object existing)
  19.             в Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name)
  20.        InnerException: System.ArgumentException
  21.             Message="Evidence has no strong name key"
  22.             Source="TEMS.Core"
  23.             StackTrace:
  24.                  в TEMS.Core.Utilities.AppDomainRemoteObjectFactory`1..ctor(String name, String configurationFile, String assemblyName, Evidence evidence)
  25.                  в TEMS.Core.Utilities.AppDomainRemoteObjectFactory`1..ctor(AppDomainInfo rmation  info)
  26.                  в TEMS.Core.Utilities.AppDomainRemoteObjectFactory`1..ctor(KnownAppDomai n  domain)
  27.                  в BuildUp_TEMS.Equipment.Server.AppDomainServerFactory(IBuilderContext )
  28.                  в Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBui lderContext  context)
  29.                  в Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuild erContext  context)
  30.                  в Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuild erContext  context)
  31.             InnerException: 


Падение происходит в этой функции из-за отсутствия строгого имени:

Code:
  1. public AppDomainRemoteObjectFactory(string name, string configurationFile, string assemblyName, Evidence evidence)
  2. {
  3.     this.= string.Empty;
  4.     this.= string.Empty;
  5.     this.= string.Empty;
  6.     this.= name;
  7.     if (string.IsNullOrEmpty(configurationFile))
  8.     {
  9.         System.Configuration.Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) ;
  10.         this.= configuration.FilePath;
  11.     }
  12.     else
  13.     {
  14.         this.= configurationFile;
  15.     }
  16.     if (string.IsNullOrEmpty(assemblyName))
  17.     {
  18.         this.= Assembly.GetExecutingAssembly().FullName;
  19.     }
  20.     else
  21.     {
  22.         this.= assemblyName;
  23.     }
  24.     StrongName name2 = null;
  25.     if (evidence != null)
  26.     {
  27.         this.= evidence;
  28.         name2 = AppDomainRemoteObjectFactory<T>.a(evidence);
  29.     }
  30.     else
  31.     {
  32.         Evidence evidence2 = AppDomain.CurrentDomain.Evidence;
  33.         name2 = AppDomainRemoteObjectFactory<T>.a(evidence2);
  34.         if (name2 == null)
  35.         {
  36.             evidence2 = Assembly.GetExecutingAssembly().Evidence;
  37.             name2 = AppDomainRemoteObjectFactory<T>.a(evidence2);
  38.         }
  39.         this.= new Evidence(evidence2);
  40.     }
  41.     if (name2 == null)
  42.     {
  43.         throw new ArgumentException("Evidence has no strong name key");
  44.     }
  45.     this.a.RemoveType(name2.GetType());
  46.     this.a.AddHost(new StrongName(name2.PublicKey, this.a, name2.Version));
  47. }
  48.  


Code:
  1. private static StrongName a(Evidence A_0)
  2. {
  3.     StrongName current = null;
  4.     IEnumerator hostEnumerator = A_0.GetHostEnumerator();
  5.     while (hostEnumerator.MoveNext())
  6.     {
  7.         current = hostEnumerator.Current as StrongName;
  8.         if (current != null)
  9.         {
  10.             return current;
  11.         }
  12.     }
  13.     return current;
  14. }


Что нужно поправить чтобы не ругалось на отсутствие строгого имени?


Ранг: 500.6 (!)
Статус: Участник

Создано: 25 февраля 2011 05:10 New!
Цитата · Личное сообщение · #14

Tyrus пишет:
 if (name2 == null)    {        throw new ArgumentException("Evidence has no strong name key");    }


эксепшин эдесь.

Ранг: 508.6 (!)
Статус: Модератор

Создано: 25 февраля 2011 09:05 · Поправил: sendersu New!
Цитата · Личное сообщение · #15

Если убрать (занопить) проверку на null,

if (name2 == null)
{
throw new ArgumentException("Evidence has no strong name key");
}

тогда будет падать дальше, вот здесь

this.a.RemoveType(name2.GetType());
this.a.AddHost(new StrongName(name2.PublicKey, this.a, name2.Version));

Тут, видимо, надо разобраться что делает a.RemoveType() и a.AddHost()
тоесть можно ли их тоже проскочить. Если нельзя - надо сделать какой нибудь свой фейковый name2
(в САЕ или любом другом инструменте что умеет править IL код)

Ранг: 45.8 (посетитель)
Статус: Участник

Создано: 25 февраля 2011 11:49 · Поправил: Tyrus New!
Цитата · Личное сообщение · #16

Убираем эксепшен - упадет дальше, как и сказал sendersu, т.к. в AddHost добавляется политика
безопасности строго имени который тут null, предыдущая команда (RemoveType) убивает в политеке
безопасности существующую привязанность к строгому имени (освобождает ее). В принципе было бы
логично убить экспепшен и убить AddHost, но все равно где-то падает.
Я хочу попробовать в начале функции подменить assemblyName на имя какого-нибудь левого файла, но
имеющего валидное строгое имя, а в конце убрать AddHost, таким образом весь код до конца выполнится
как и было задумано, но в политику безопастности не будет добавлено строгое имя. SAE IL код
действительно нормально редактирует при помощи Mono.Cecil


Ранг: 500.6 (!)
Статус: Участник

Создано: 26 февраля 2011 09:29 New!
Цитата · Личное сообщение · #17

а что мешает подписать сборку своим строгим именем ?

Ранг: 45.8 (посетитель)
Статус: Участник

Создано: 26 февраля 2011 17:07 · Поправил: Tyrus New!
Цитата · Личное сообщение · #18

NIKOLA
Мешает то, что у меня файлов там 400 сотни и все они между собой связаны референсами со строгим именем + через InternalsVisibleToAttribute с паблик ключом строгого имени. И прежде чем наложить на них свой стронг нэйм я должен буду еще и пропатчить все связки. Вот этот Evidence не могу пока победить. Вроде понял как правильно пройти эту функцию для моих файлов - использовал Evidence.Clear(), но вот теперь надо вводить условие, т.к. через нее еще проходят и системные файлы и соответственно Clear() убивает и их зависимости и дальше все падает.
Кстати Dile примостился аттачить - хоть этим можно дебажить, но такой неудобный..

Вот инфа про Evidence:
msdn.microsoft.com/ru-ru/library/system.security.policy.evidence.aspx

Ранг: 45.8 (посетитель)
Статус: Участник

Создано: 26 февраля 2011 23:17 New!
Цитата · Личное сообщение · #19

Победил таки. Все оказалось элементарно.
if (evidence != null)
{
this.a = evidence;
name2 = AppDomainRemoteObjectFactory<T>.a(evidence);
}
else
{
goto ret;
}
т.е. если идет сборка с Evidence и строгим именем - все идет по оригинальному коду
а если с null, то вообще не лезем в назначения свойств политик безопастности, а просто выходим
и загрузка пошла!

Ранг: 45.8 (посетитель)
Статус: Участник

Создано: 27 февраля 2011 21:44 · Поправил: Tyrus New!
Цитата · Личное сообщение · #20

Code:
  1. private void InitializeComponent()
  2. {
  3.     base.SuspendLayout();
  4.     base.AutoScaleDimensions = new SizeF(6f, 13f);
  5.     base.AutoScaleMode = AutoScaleMode.Font;
  6.     this.BackColor = Color.White;
  7.     base.ClientSize = new Size(0x250, 0x16e);
  8.     this.DoubleBuffered = true;
  9.     this.MinimumSize = new Size(0x93, 0x2f);
  10.     base.Name = 349452901.349452936.93650356("&#53332;&#45945;&#8454;&#43639;&#22233;&#44263;\ud85c\uf220&#7549;&#19320;&#2645;&#13316;&#48031;&#60632;&#37403;&#44850;");
  11.     this.Text = 349452901.349452936.93650356("&#64825;&#41124;&#32000;&#21586;&#22928;&#10705;&#57890;&#36549;&#38562;&#48167;&#32437;&#33233;&#52299;&#8753;&#50445;&#3764;&#5679;&#30271;&#60849;&#53116;&#26210;&#54396;&#10902;&#6045;");
  12.     base.ResumeLayout(false);
  13. }


Где можно почитать про автоматическое восстановление шифрованных строк?
Написал декодер шифрованных методов прота, все расшифрованные методы сохраняются в новую
секцию, но для полной победы над протом осталось побороть обфускацию и шифрование строк - для
автоматизации, т.к. с SAE руками можно сделать все, но хочется именно автомат.
Может есть где-то сорцы какого-нибудь деобфускатора, который может восстанавливать строки?

Пока вижу только такой способ:
1. Изучить как работает метод 349452901.349452936.93650356 по восстановлению строк
2. Пройтись им по шифрованным строкам в блобе "US"
3. Занопить вызовы 349452901.349452936.93650356

Ранг: 508.6 (!)
Статус: Модератор

Создано: 27 февраля 2011 23:34 New!
Цитата · Личное сообщение · #21

Tyrus пишет:
Может есть где-то сорцы какого-нибудь деобфускатора, который может восстанавливать строки?

САЕ идет с плагином 9Ray - если помедитировать чуток то можно под себя сделать для етого случая
там правда есть нюанс - как правило етот декодер строк проверяет как его метод запустили.....
если ето пропатчить - все должно заработать

Ранг: 45.8 (посетитель)
Статус: Участник

Создано: 27 февраля 2011 23:57 New!
Цитата · Личное сообщение · #22

sendersu
Спасибо.
А тут похоже лежать сорцы этого плагина:
code.google.com/p/simple-assembly-explorer/source/browse/trunk/SAE.Deobf9RayHelper/?r=412


Ранг: 127.3 (ветеран)
Статус: Участник

Создано: 28 февраля 2011 22:33 New!
Цитата · Личное сообщение · #23

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

Ранг: 2.6 (гость)
Статус: Участник

Создано: 28 февраля 2011 23:29 · Поправил: verissimo New!
Цитата · Личное сообщение · #24

У кого-нибудь есть опыт взлома программ, защищенных MaxToCode -ом?


Ранг: 85.4 (постоянный)
Статус: Участник

Создано: 1 марта 2011 00:34 New!
Цитата · Личное сообщение · #25

verissimo, а что за прога им защищена? Не ЗенноПостер случаем

Ранг: 508.6 (!)
Статус: Модератор

Создано: 1 марта 2011 09:44 New!
Цитата · Личное сообщение · #26

zeppe1in пишет:
тебе нужно только определить нужный метод

ет точно, только определение ето кхммм чуть наугад. В код можно напихать 1000 и одну функу с такой сигнатурой
Для 100% лучше найти самому у указать плагину как токенID например.


Ранг: 127.3 (ветеран)
Статус: Участник

Создано: 1 марта 2011 13:32 New!
Цитата · Личное сообщение · #27

sendersu
А можно и на каждую строку сделать свой метод).
один пакостный обфускатор, не помню какой. наделал целую кучу методов для декодирования стрингов, код вроде один и тот же, а методов много) в ручную каждый указывать не вариант и я именно по сигнатуре искал. точнее я смотрел чтобы метод подходил по входным и выходным параметрам, а потом искал в нём вызов ГетПабликКей.

Ранг: 45.8 (посетитель)
Статус: Участник

Создано: 1 марта 2011 17:27 New!
Цитата · Личное сообщение · #28

Подскажите .Net пакер, который может жать Mixed .Net Dll-ки
Именно жать, а не обфусцировать и защищать.

Ранг: 79.4 (постоянный)
Статус: Участник

Создано: 1 марта 2011 17:41 · Поправил: uncleua New!
Цитата · Личное сообщение · #29

Можешь попробовать mpress. Токо на него ругаются антивирусы...
Можно енигмой, но там еще вопрос - упакуется оно или раздуется... )

Пардон-с - mpress дллки не жмет...

madebits.com/netz/index.php

Ранг: 189.9 (ветеран)
Статус: Участник

Создано: 4 марта 2011 09:04 New!
Цитата · Личное сообщение · #30

DotNet Dumper 1.0

-will show only .NET processes under list,
-all dumps will be saved under dumps
- now can fix raw size/address (Themida targets)
- now will fix AddressofEntryPoint
- now dumps more assemblies
- Dump native - dump native not only .NET
- Smart Dump - dump sections page by page
- Now you can dump a specific module
- Bugs fixed
- Rename of dumped files improved!

new:
- ability suspend/resume/kill processes
- view Environment Variables,
- abilty to Inject / Free a dll (under Selected process->Module)
this one needs some bug check - don't know if is working on Vista / Windows 7


--> DOWNLOad<--

Ранг: 79.4 (постоянный)
Статус: Участник

Создано: 4 марта 2011 09:44 · Поправил: uncleua New!
Цитата · Личное сообщение · #31

Тогда вот еще в коллекцию...

****************************

dotNET Tracer -

This is the final version, it was supposed to stay private but I

decided to release it for the advantage of the RCE community.

this tool works best in Windows 7 but also works with XP-SP2

follow this topic if you face any problem on Windows 7

board.b-at-s.info/index.php?showtopic=6921

Download from here :

www.4shared.com/file/tSj6cvgj/KDT.html

****************************

ILSpy -

ILSpy is the open-source .NET assembly browser and decompiler.

Development started after Red Gate announced that the free version of .NET Reflector would cease to exist by end of February 2011.

ILSpy Features:
•Assembly browsing
•IL Disassembly
•Decompilation to C#
•Saving of resources
•Search for types/methods/properties (substring)
•Hyperlink-based type/method/property navigation
•Base/Derived types navigation
•Navigation history
•BAML to XAML decompiler
•Save Assembly as C# Project

wiki.sharpdevelop.net/ilspy.ashx
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 49 . 50 . >>
 eXeL@B —› Основной форум —› Опять .net
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS