Иконка ресурса

Не поддерживается XenTranslator - Удобный переводчик фраз XenForo 1.0.0.4

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

п.с Капитан, программа ТС что-то левое может вносить в форум ? Там же фразы обычные, просто не совсем понял твои опасения с "обфускацией".
 
Никто ничего и никуда не вносит, это просто Кэп. ?
Другое дело, что стоит ли что-то переводить через переводчик, вот это вопрос...
 
Капитан, программа ТС что-то левое может вносить в форум ? Там же фразы обычные, просто не совсем понял твои опасения с "обфускацией".
Не вносит, но если по чесноку - зачем-то софт отстукивает на свой сервак при запуске.
 
Не вносит, но если по чесноку - зачем-то софт отстукивает на свой сервак при запуске.
При запуске, программа делает запрос на сервер. Если есть более новая версия, чем та, что запустил пользователь, то программа предлагает обновиться. Вот и всё, никакой тайны в этом нет :)
Запустите фотошоп, браузер, или иной софт и с вероятностью в 90% увидите тоже самое, как программа проверяет наличие обновлений. Уж не вам ли про это не знать.
 
Ребзя, есть тут кто уже переводит форум, либо собирается на казахский и узбекский языки ?

п.с Капитан, программа ТС что-то левое может вносить в форум ? Там же фразы обычные, просто не совсем понял твои опасения с "обфускацией".
Тратится больше памяти на работу, а увидев код там сам софт по себе течёт и написан на уровне привет 2000
 
а увидев код там сам софт по себе течёт
Течет Java или C++, а в .NET есть сборщик мусора и ничего там не течет. Прочитайте документацию, чтобы заполнить свои пробелы в знаниях.
написан на уровне привет 2000
Для Windows .NET есть два основных типа приложений:
- WinForm
- WPF

WinForm - проверенный вариант для быстрой разработки.
WPF - в основном, интерпрайз для больших проектов.
У нас здесь не интерпрайз, поэтому я выбрал первый вариант.

Тратится больше памяти на работу
Ну-да, ну-да, программа съедает аж целых 20мб, о! ужас! Когда, например, тот же браузер, который не привет из 2000 жрет память гигабайтами.

Какие-то непонятные высасывания из пальца, ей богу.

Вы консолью-то пользуетесь?
Там вообще кошмар, привет из 80-х. Срочно всем об этом сообщите! ?
 
Запустите фотошоп, браузер, или иной софт и с вероятностью в 90% увидите тоже самое, как программа проверяет наличие обновлений. Уж не вам ли про это не знать.
Мой браузер (Firefox) не при каждом запуске проверяет обновления, и у него это отключаемо хотя бы.

в .NET есть сборщик мусора и ничего там не течет
Сборщик мусора, тем не менее, не может закрывать нативные ссылки, классы с которыми реализуют интерфейс System.IDisposable, который живёт . Кому как не Вам это не знать ?
И да, я ни на что не намекаю, но используемый Вами в пару местах как раз таки его реализует. Не увидел, правда, в декомпиле их создания и вообще диспозинга. Наверное, декомпилятор не осилил или спрятано где поглубже (разбираться не хочу). Но Вы всё же проверьте, что всё диспозится, а то мало ли...

Я срача не хочу, если что. Просто оперирую фактами, которые пока что имеются.
Вы опубликуйте исходники, что-ли, на Гитхабе, а мы посмотрим, ничего не утекает ли.
 
Последнее редактирование:
  • Мне нравится
Реакции: Hope
Сейчас бы в 2020 придраться к проверке обновлений ¯\_(ツ)_/¯
Я к этому не придираюсь. Просто констатирую факт, что
у него это отключаемо
И весь тот софт, который автор приложения перечислил, хотя бы запустится без Интернета
XenTranslator же делает суицид, как только словил ошибку при обращении к серваку сайта. И неважно, какая причина: отсутствие сети Интернет или мёртвый сервак в целом.
Для просмотра этого контента нам потребуется ваше согласие на установку файлов cookie третьих лиц.
Более подробную информацию можно найти на нашей странице cookie.
Т.е. оффлайн перевести тот же движок или плагин, сидя в какой-нибудь условной глуши без связи - невозможно.

Ну и ещё раз:
Я срача не хочу, если что.
 
И весь тот софт, который автор приложения перечислил, хотя бы запустится без Интернета
Т.е. оффлайн перевести тот же движок или плагин, сидя в какой-нибудь условной глуши без связи - невозможно.
Ну вот это уже аргумент со всеми основаниями
 
Ну поехали посмотрим этот софт в деле. Как я и говорил, обфусцируешь когда есть что прятать, а тут есть что.
Рассмотрим даже это по. Начнём с того, что такое обфускация? Приведение исходного текста или исполняемого кода программы к виду, сохраняющему её функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции. Для платного по может и плюсом, но всё восстанавливается. А теперь посмотри на минусы и почему сами разработчики запрещают обфусцировать дополнения:
  • Код после обфускации может стать более зависимым от платформы или компилятора
  • Для обфусцированного кода может требоваться больше памяти. Помимо того как любят многие обфускаторы изменять на goto приведёт к ещё большим затратам памяти
  • Проблемы с отладкой кода, а если у пользователя возникнут проблемы будет невозможно её быстро решить и прийдётся давать копию без обфускации
  • Возможность утечки памяти в вызове классов
Что мы видем в этой поделке? Кривая логика, кривая работа. Нагрузка на процессор достигает 100%. Программа не способна читать нормально файлы и не только.
Я не буду для начала приводить код и покажу оптимизацию и работу этого софта на реальной машине и что бы тс не отмазывался, про якобы слабую машину или ещё что то говорил о характеристиках, я приведу скрин:
1580911588776.png
Ну давайте проведём тесты кода
1580911628649.png
На данном изображение мы запустили только приложение, а давайте загрузим теперь фразы?
1580911688859.png
Мы запускаем и наш софт уже ушёл в лаг и нагрузку цп
1580911840027.png
105 мегабайт ушло на загрузку фраз
1580911890548.png
Перешли на вкладку тех поддержка и добавили затраты памяти.
1580911930561.png
Перешли во вкладку настроек
1580911960596.png
Полазили по настройкам
1580912003071.png
После настроек и в течение минуты простоя софта памяти уже 125 мегабайт. При любых действиях говнософт отваливается и падает, о чём можно судить по скриншотам
1580912263458.png
Обычная логика и работы программы с невозможностью нормальной и плавной работы.
С самой работой программы уже ясно и понятно, что софт не является актуальным. Я бы мог привести в пример QT Translator и не только, но я думаю не стоит и займёт ещё больше времени, а по функциональности тсу до него как раком до китая. Тут проскачила фраза раз, типо профессионалы используют такой софт. Кто? Данный софт не позволяет вручную вводить перевод, а только с гугл перевода и переводит это всё. Как минимум профессионалы не переводят через гугл переводчик.
Лирическое отступление
Данное лирическое отступление несёт минимум текста, который немного не относится к теме, но подойдёт на заметку каждому. Кому не интересно могут его пропустить.
Щас я расскажу небольшую историю о валекоре, который продавал якобы продавал искусственный интеллект вспомнили? Так где же твой ии? Где деньги полученные от гугла и прочих крупных корпораций которые не могут так добиться? Ты же у нас мастер кодинга и создания нейросетей, а ты забыл наверное ну я напомню эту тему
Были и ещё несколько тем в корзине и искать и показывать у меня сейчас нет желания, кому нужно тот найдёт сам.
И напомню как разработчик крупной нейросети забросил же свою нейросеть)
Нужен парсер с одного Xenforo форума и постинг на другой, аналогичный проге Xenhelper , там автор перестал поддерживать проект.
У кого есть что похожее желательно готовый функционал или решение этого вопроса готов хорошо заплатить.
Если не там создал тему то сори , перенесите пожалуйста.
Причём крупные корпорации вида гугла, фейсбука, амазона, нвидии говорят мы не можем сделать искусственный интеллект, но человек написал такую крутую разработку и решил здесь кинуть вброс про нейросети и не только, надеясь, что хомячки схавают и поведутся на такие слова
Конец лирического отступления
А теперь как у нас был проведен анализ до лирического отступления мы зайдём в код и посмотрим. Но перед этим мы посмотрим на реальный мир и мир вещей, что в современном мире никто не пишет на винформах уже, пишут на WPF или же UWP. Помимо этого никто не пишет под нет фреймворк, а используют новую платформу .NET Core которая делает возможность запускать в любой ос и среде приложения. Но наш эксперт кодит как аля 2000 год.
Давайте посмотрим для начала пару интересных моментов в бесплатном программном обеспечение:
C#:
internal void GetInfoLic(string closeSession = "1")
    {
      try
      {
        string str = "XenForo";
        HttpWebRequest httpWebRequest = (HttpWebRequest) WebRequest.Create("https://nub-club.com/soft/appFree/XenTranslator/check-update.php");
        byte[] bytes = new UTF8Encoding().GetBytes("Custom_protocol=" + Uri.EscapeDataString(CryptData.Cryp("versionId=" + XenTranslator.Resources.GlobalsVarFuncSub.Globals.AppVersion + "&hddId=" + str + "&hackSoft=" + XenTranslator.Resources.GlobalsVarFuncSub.Globals.HackSoft + "&onlineStatus=" + closeSession + "&hdtmp=f&dt=" + Conversions.ToString(DateAndTime.Now))));
        httpWebRequest.Method = "POST";
        httpWebRequest.ContentType = "application/x-www-form-urlencoded";
        httpWebRequest.Timeout = 5000;
        httpWebRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        httpWebRequest.Headers.Add("Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3");
        httpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.12) Gecko/10050026 Firefox/3.6.12";
        httpWebRequest.ContentLength = (long) bytes.Length;
        Stream requestStream = httpWebRequest.GetRequestStream();
        requestStream.Write(bytes, 0, bytes.Length);
        requestStream.Close();
        HttpWebResponse response = (HttpWebResponse) httpWebRequest.GetResponse();
        StreamReader streamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
        string end = streamReader.ReadToEnd();
        response.Close();
        streamReader.Close();
        if (end.Contains("<!DOCTYPE html>"))
          Environment.Exit(0);
        if (end.Contains("Fatal error"))
          Environment.Exit(0);
        if (end.Contains("Новые версии XenTranslate отсутствуют."))
          return;
        Environment.Exit(0);
      }
      catch (Exception ex)
      {
        ProjectData.SetProjectError(ex);
        Environment.Exit(0);
        ProjectData.ClearProjectError();
      }
    }
Наверное круто собирать данные и делать костыльные проверки. Помимо всего этого передавать данные на сервер к себе о пользователе и его данных. Но ведь это бесплатный софт, какая информация может передаваться и уж темболее получать информацию о лицензии? Правильно никакой. Дальнейший код с проверками я не захотел вставлять, кому надо тот посмотрит.
Автор любитель сотни исключений:
C#:
if (this.CheckBoxHideColumns.Checked)
        {
          MyProject.Forms.Form1.Log("Отключение лишних полей. Ожидаем...", new Color());
          try
          {
            if (!this.CheckBoxShowHideTitleColumn.Checked)
              MyProject.Forms.Form1.DataGridView1.Columns["title"].Visible = false;
          }
          catch (Exception ex)
          {
            ProjectData.SetProjectError(ex);
            ProjectData.ClearProjectError();
          }
          try
          {
            MyProject.Forms.Form1.DataGridView1.Columns["addon_id"].Visible = false;
          }
          catch (Exception ex)
          {
            ProjectData.SetProjectError(ex);
            ProjectData.ClearProjectError();
          }
          try
          {
            MyProject.Forms.Form1.DataGridView1.Columns["version_id"].Visible = false;
          }
          catch (Exception ex)
          {
            ProjectData.SetProjectError(ex);
            ProjectData.ClearProjectError();
          }
          try
          {
            MyProject.Forms.Form1.DataGridView1.Columns["version_string"].Visible = false;
          }
          catch (Exception ex)
          {
            ProjectData.SetProjectError(ex);
            ProjectData.ClearProjectError();
          }
          try
          {
            MyProject.Forms.Form1.DataGridView1.Columns["global_cache"].Visible = false;
          }
          catch (Exception ex)
          {
            ProjectData.SetProjectError(ex);
            ProjectData.ClearProjectError();
          }
          MyProject.Forms.Form1.Log("Лишние поля отключены.", new Color());
        }
Хмм, вот майки дурачки зачем же они вешают эксепшен листенеры, ведь можно и так повесить.
Дарю в изучение появленное ещё в 1.1 фреймворке
C#:
private void ToolStripButton3_Click(object sender, EventArgs e)
    {
      int num = (int) Interaction.MsgBox((object) "Сейчас будет открыт сайт разработчика.\r\nЕсли необходима быстрая помощь или поддержка, обращайтесь по указанным на сайте контактам.\r\n\r\nПочему я не могу ответить на сайте, на котором вы скачали программу?\r\nМои программы опубликованы на многих сайтах, поэтому я просто физически не могу ходить по всем сайтам и отвечать.", MsgBoxStyle.Information | MsgBoxStyle.SystemModal, (object) "Информация");
      Process.Start("https://nub-club.com/threads/razrabotka-programm-na-zakaz.3280/");
    }
А кто будет закрывать хендл? Process помечен IDisposable интерфейсом не просто так
Так же дарю на изучение
Как минимум таких диспозов по коду очень много, что и создают утечки
Теперь мы рассмотрим, как автор говорит он кодит не привет нулевые. Ладно, а давайте всё таки разберём основную проблему этих лагов? Все лаги из-за того, что автор и не умеет нормально писать код, а умеет только врать, как это было сказано про нейросеть, про якобы среду настроенную на сразу обфускацию, когда она цепится к проекту и он чисто физически не может переносить их.
Давайте рассмотрим элементарную загрузку xml файла и разбор её:
C#:
internal bool LoadXml(string filePath)
    {
      bool flag1 = true;
      if (this.col != null)
        this.col.Visible = false;
      this.DataGridView1.DataSource = (object) null;
      this.DataGridView1.Update();
      this.DataGridView1.AllowUserToAddRows = false;
      this.xml = new XDocument();
      this.xml = XDocument.Load(filePath);
      IEnumerable<XElement> source1 = this.xml.Root.Elements((XName) "phrase").Take<XElement>(1);
      Func<XElement, XElement> selector;
      // ISSUE: reference to a compiler-generated field
      if (Form1._Closure\u0024__.\u0024I29\u002D0 != null)
      {
        // ISSUE: reference to a compiler-generated field
        selector = Form1._Closure\u0024__.\u0024I29\u002D0;
      }
      else
      {
        // ISSUE: reference to a compiler-generated field
        Form1._Closure\u0024__.\u0024I29\u002D0 = selector = (Func<XElement, XElement>) (el => el);
      }
      IEnumerable<XElement> source2 = source1.Select<XElement, XElement>(selector);
      bool flag2;
      if (source2.Count<XElement>() == 0)
      {
        flag2 = false;
      }
      else
      {
        if (!(source2 is XElement[] xelementArray))
          xelementArray = source2.ToArray<XElement>();
        IEnumerable<XAttribute> xattributes = ((IEnumerable<XElement>) xelementArray).Attributes();
        try
        {
          foreach (XAttribute xattribute in xattributes)
          {
            if (xattribute.Name == (XName) "addon_id")
              this.translatedPluginId = xattribute.Value;
          }
        }
        finally
        {
          IEnumerator<XAttribute> enumerator;
          enumerator?.Dispose();
        }
        this.ds = new DataSet();
        int num = (int) this.ds.ReadXml(filePath);
        this.DataGridView1.DataSource = (object) this.ds.Tables[1];
        this.DataGridView1.Rows[0].Cells[0].Selected = false;
        try
        {
          this.DataGridView1.Columns["addon_id"].ReadOnly = true;
        }
        catch (Exception ex)
        {
          ProjectData.SetProjectError(ex);
          ProjectData.ClearProjectError();
        }
        try
        {
          this.DataGridView1.Columns["version_id"].ReadOnly = true;
        }
        catch (Exception ex)
        {
          ProjectData.SetProjectError(ex);
          ProjectData.ClearProjectError();
        }
        try
        {
          this.DataGridView1.Columns["version_string"].ReadOnly = true;
        }
        catch (Exception ex)
        {
          ProjectData.SetProjectError(ex);
          ProjectData.ClearProjectError();
        }
        try
        {
          this.DataGridView1.Columns["global_cache"].ReadOnly = true;
        }
        catch (Exception ex)
        {
          ProjectData.SetProjectError(ex);
          ProjectData.ClearProjectError();
        }
        try
        {
          this.DataGridView1.Columns["title"].ReadOnly = true;
        }
        catch (Exception ex)
        {
          ProjectData.SetProjectError(ex);
          ProjectData.ClearProjectError();
        }
        try
        {
          this.DataGridView1.Columns["phrase_text"].HeaderCell.Style.Font = new Font("Tahoma", 9.75f, FontStyle.Bold);
          this.DataGridView1.Columns["phrase_text"].ReadOnly = true;
          this.rowCnt = this.DataGridView1.Rows.Count;
          this.DataGridView1.Columns["phrase_text"].HeaderCell.Value = (object) ("Оригинал (кол-во фраз: " + Conversions.ToString(this.rowCnt) + ")");
        }
        catch (Exception ex)
        {
          ProjectData.SetProjectError(ex);
          ProjectData.ClearProjectError();
        }
        if (this.col == null)
        {
          this.col = new DataGridViewTextBoxColumn();
          this.col.HeaderText = "Перевод (кол-во переведёных фраз: " + Conversions.ToString(0) + ")";
          this.col.Name = "lessonName";
          this.col.HeaderCell.Style.Font = new Font("Tahoma", 9.75f, FontStyle.Bold);
          this.DataGridView1.Columns.Add((DataGridViewColumn) this.col);
          this.col.Visible = true;
        }
        else
        {
          this.DataGridView1.Columns.Remove((DataGridViewColumn) this.col);
          this.col = new DataGridViewTextBoxColumn();
          this.col.HeaderText = "Перевод (кол-во переведёных фраз: " + Conversions.ToString(0) + ")";
          this.col.Name = "lessonName";
          this.col.HeaderCell.Style.Font = new Font("Tahoma", 9.75f, FontStyle.Bold);
          this.DataGridView1.Columns.Add((DataGridViewColumn) this.col);
          this.col.DisplayIndex = checked (this.DataGridView1.Columns.Count - 1);
          this.col.Visible = true;
        }
        this.DataGridView1.RowsDefaultCellStyle.WrapMode = DataGridViewTriState.True;
        this.DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
        IEnumerator enumerator1;
        try
        {
          enumerator1 = this.DataGridView1.Columns.GetEnumerator();
          while (enumerator1.MoveNext())
          {
            DataGridViewColumn current = (DataGridViewColumn) enumerator1.Current;
            if (Microsoft.VisualBasic.CompilerServices.Operators.CompareString(current.Name, "phrase_Text", false) == 0 | Microsoft.VisualBasic.CompilerServices.Operators.CompareString(current.Name, "phrase_text", false) == 0)
              this.indexPhraseText = current.Index;
            if (Microsoft.VisualBasic.CompilerServices.Operators.CompareString(current.Name, "title", false) == 0 | Microsoft.VisualBasic.CompilerServices.Operators.CompareString(current.Name, "Title", false) == 0)
              this.indexColumnPhraseTitle = current.Index;
            current.SortMode = DataGridViewColumnSortMode.NotSortable;
          }
        }
        finally
        {
          if (enumerator1 is IDisposable)
            (enumerator1 as IDisposable).Dispose();
        }
        this.Log("Файл с фразами загружен.", new Color());
        this.NumberAllRows();
        flag2 = flag1;
      }
      return flag2;
    }
Привет 2000 год и так никто не делает и не пишет, компания Microsoft для этого специально написала сериализатор, который имеет ассемблерные вставки для быстрой загрузки и не затрагивания ресурсов как процессора, памяти так и дисковых операций.
Сериализация XML — это процесс преобразования открытых свойств и полей объекта в серийный формат (в данном случае в формат XML) для хранения или транспортировки. При десериализации объект повторно создается в исходном состоянии из выходных данных XML. Сериализацию можно представить как способ сохранения состояния объекта в поток или буфер. Например, ASP.NET использует класс XmlSerializer для кодирования сообщений веб-службы XML.
Данные в объектах описываются с помощью конструкций языка программирования, например классов, полей, свойств, типов-примитивов, массивов и даже встроенного XML в форме объектов XmlElement или XmlAttribute. Вы можете создавать собственные классы, закомментировать их атрибутами или используя средство определения схемы XML (XSD. exe) для создания классов на основе существующего документа определения схемы XML (XSD). При наличии схемы XML можно запустить XSD. exe, чтобы создать набор классов, строго типизированных в схему, и добавить к ним атрибуты, которые будут соответствовать схеме при сериализации.
Для перемещения данных между объектами и XML требуется сопоставление из конструкций языка программирования с XML-схемой и из схемы XML в конструкции языка программирования. XmlSerializer и связанные с ними средства, такие как XSD. exe, предоставляют мост между этими двумя технологиями как во время разработки, так и в среде выполнения. Во время разработки используйте XSD. exe для создания документа схемы XML (XSD) из пользовательских классов или для создания классов из заданной схемы. В любом случае классы снабжаются с помощью настраиваемых атрибутов, чтобы указать XmlSerializer, как сопоставлять систему XML-схем и среду CLR. Во время выполнения экземпляры классов могут быть сериализованы в XML-документы, следующие за заданной схемой. Аналогичным образом эти XML-документы можно десериализовать в объекты среды выполнения. Обратите внимание, что схема XML является необязательной и не требуется во время разработки или в среде выполнения.
С XmlSerializer можно воспользоваться преимуществами работы со строго типизированными классами и обеспечить гибкость XML. Используя поля или свойства типа XmlElement, XmlAttribute или XmlNode в строго типизированных классах, можно считывать части XML-документа непосредственно в объекты XML.
В рамку и на стенку.
The XmlSerializer creates C# files and compiles them into .dll files to perform this serialization. In .NET Framework 2.0, the XML Serializer Generator Tool (Sgen.exe) is designed to generate these serialization assemblies in advance to be deployed with your application and improve startup performance.
Так же в рамку и на стенку.
Помимо всего этого автор сам жаловался на то, что переводчик сам работает кривовато здесь реализовано, а почему? Потому что автор решил пускать через свой ип и тем самым каждый раз на перевод шлётся его IP, а не IP пользователя за что гугл и банит и отправляет вводить каптчу. А каптчу софт не может обработать и возникают ошибки перевода у всех:
C#:
internal string SendPhraseToTranslate(string phrase, string lineId)
    {
      string str1 = "";
      string str2;
      if (phrase.Contains("{") | phrase.Contains("}") | phrase.Contains("<") | phrase.Contains(">"))
      {
        this.Log("Строка - " + lineId + ", данная фраза имеет запрещенные символы или спецтеги. Фразы такого типа необходимо переводить вручную.", Color.Red);
        str2 = str1;
      }
      else if (phrase.Length == 0)
      {
        str2 = str1;
      }
      else
      {
        this.HcSfD();
        string hardwareId = this.GetHardwareID();
        string str3 = "";
        if (this.DataGridView1.SelectedCells.Count == 1)
          str3 = phrase;
        if (this.DataGridView1.SelectedCells.Count > 1)
          str3 = phrase;
        try
        {
          HttpWebRequest httpWebRequest = (HttpWebRequest) WebRequest.Create("https://nub-club.com/soft/appFree/XenTranslator/check-update.php");
          XenTranslator.Resources.GlobalsVarFuncSub.Globals.TranslatedLanguage = Microsoft.VisualBasic.Strings.Replace(XenTranslator.Resources.GlobalsVarFuncSub.Globals.TranslatedLanguage, "=", "ravno", 1, -1, CompareMethod.Binary);
          XenTranslator.Resources.GlobalsVarFuncSub.Globals.TranslatedLanguage = Microsoft.VisualBasic.Strings.Replace(XenTranslator.Resources.GlobalsVarFuncSub.Globals.TranslatedLanguage, "&", "concat", 1, -1, CompareMethod.Binary);
          byte[] bytes = new UTF8Encoding().GetBytes("Custom_protocol=" + Uri.EscapeDataString(CryptData.Cryp("needTranslate=" + str3 + "&translate_language=" + XenTranslator.Resources.GlobalsVarFuncSub.Globals.TranslatedLanguage + "&versionId=" + XenTranslator.Resources.GlobalsVarFuncSub.Globals.AppVersion + "&hddId=" + hardwareId + "&hackSoft=" + XenTranslator.Resources.GlobalsVarFuncSub.Globals.HackSoft + "&plugin_id=" + this.translatedPluginId + "&trtmp=f&dt=" + Conversions.ToString(DateAndTime.Now))));
          httpWebRequest.Method = "POST";
          httpWebRequest.ContentType = "application/x-www-form-urlencoded";
          httpWebRequest.Timeout = 5000;
          httpWebRequest.Accept = "application/json";
          httpWebRequest.Headers.Add("Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3");
          httpWebRequest.Headers.Add("Accept-Charset: UTF-8");
          httpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.12) Gecko/10050026 Firefox/3.6.12";
          httpWebRequest.ContentLength = (long) bytes.Length;
          Stream requestStream = httpWebRequest.GetRequestStream();
          requestStream.Write(bytes, 0, bytes.Length);
          requestStream.Close();
          HttpWebResponse response = (HttpWebResponse) httpWebRequest.GetResponse();
          StreamReader streamReader = new StreamReader(response.GetResponseStream(), Encoding.Default);
          string end = streamReader.ReadToEnd();
          response.Close();
          streamReader.Close();
          if (end.Contains("Custom_protocol="))
          {
            string data = Microsoft.VisualBasic.Strings.Replace(end, "Custom_protocol=", "", 1, -1, CompareMethod.Binary);
            data = CryptData.DeCryp(ref data);
            IJEnumerable<JToken> jenumerable = JArray.Parse(Microsoft.VisualBasic.Strings.Split(data, "[SPL]", -1, CompareMethod.Binary)[0]).First.Values((object) 0);
            try
            {
              foreach (JToken jtoken in (IEnumerable<JToken>) jenumerable)
              {
                string str4 = jtoken.ToString().TrimStart('{').TrimEnd('}');
                str1 += str4;
              }
            }
            finally
            {
              IEnumerator<JToken> enumerator;
              enumerator?.Dispose();
            }
            str2 = str1;
          }
          else
          {
            this.Log("Строка - " + lineId + ". Не удалось перевести фразу.", Color.Red);
            str2 = str1;
          }
        }
        catch (Exception ex)
        {
          ProjectData.SetProjectError(ex);
          this.Log("Строка - " + lineId + ". Не удалось перевести фразу.", Color.Red);
          str2 = str1;
          ProjectData.ClearProjectError();
        }
      }
      return str2;
    }
И при переводе автор опять стучит к себе на сервер и собирает данные о вас =).
Весь софт напичкан рекламой со своим говно форумом и напичкан помимо всего этого разными стучалками и коннектами к себе на сайт.
Где не надо у автора исключений пруд пруди, где надо их не существует. Свой софт он не позволяет в оффлайн режиме работать и не только.
В данном по нет ничего уникального и такой функционал пилится на коленке за день.
На проведение всего этого анализа мы сделали вывод и почему тс обфусцирует код.
P.S архив с очищенным билдом, разобранным исходником, созданным pdb файлом и переконверчено всё в студию по быстрому. Правда в студии нужно будет немного подогнать, а лучше пересоздать проект и подогнать под это и почистить от декомпила.
P.S.S совместными усилиями с CrazyHackGUT существует полнофункциональный аналог, который лишен данных недостатков и софт работает на линуксе и не только. Даже можно на андройде запустить. На данный момент решается информация по поводу мультиязычности приложения и поддерживается смена темы светлой/темная. И решаются моменты с фильтрацией и поиском содержимого.
1580915768406.png
Загрузка 12к+ фраз и помимо всего этого работает за считанные секунды и не нагружает не диск, не процессор, не память
1580915834611.png
Затраты памяти не доходят до 50 мегабайт с кроссплатформенностью. Работает даже на макОС и написано всё при помощи .NET Core и WPF как делают нормальные люди в современном обществе.
 

Вложения

  • XenTranslated.zip
    4.2 MB · Просмотры: 24
Последнее редактирование:
Если человек сделал в свободное время программу и распространяет её на бесплатной основе, ну вот нафига придираться и обсирать его? Там есть что-то критичное, встроен Майнер или ещё какая хрень? Нет. Порекламить свой софт или сказать что ты лучше? Ну, ты лучше, только вот что это поменяет? Ты написал целую простыню текста, но какой от неё смысл? Ты показал человеку на ошибки или обосрал его? По интонации и смыслу скорее подходит второй вариант, чем первый. Ладно бы он продавал это, тогда совсем другой разговор
 
Ухх, целая статься блин от кэпа.

Тот факт, что ТС использовал больше кода чем нужно для работы софта - это ладно, не все в раз становятся "про". Я сам себе так думаю, обфусцировать код с целью защиты своего ПО от возможных копипастеров/конкурентов - идея вполне логична и понятна. Но если цель не делиться кодом, можно выложить один екзешник, без сорса. А вот про сбор информации - уже настораживает. Какого рода инфу он собирает, когда софтина каждый раз подключается к его серверу, а капитан ?
 
Microsoft.VisualBasic.Strings.Replace(XenTranslator.Resources.GlobalsVarFuncSub.Globals.TranslatedLanguage, "=", "ravno", 1, -1, CompareMethod.Binary);
1580921108119.png
Дайте угадаю. На стороне этого скрипта производится обратная замена, так?
А экранизация параметров для кого придумана?
 
Captain, как говорят - когда коту делать нечего, он яйца лижет ?
К сожалению, у меня нет столько свободного времени, как у вас, поэтому читать эти простыни я конечно же не буду, тем более знаю, что там ничего полезного нет, просто очередные "сенсации" высосанные из пальца.

Выслушивать оскорбления или вступать с вами в дискуссию, тоже больше не вижу никакого смысла, потому что предвзятость и уровень токсичности с вашей стороны просто зашкаливает. Общаться с вами неприятно, да и не интересно, всё, знаете ли, однобоко и очевидно.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу