(04-02-2021 22:13:25 отредактировано WYLEK) 0

Тема: NeoAppBuilder

Кто нибудь сталкивался с бинарными XML файлами?

Neosoft пишут новую программу NeoAppBuilder для создания приложений для веб, мобильных устройств, приложений Google Chrome, и для Windows. В последней бэтке они добавили возможность создавать плагины. Плагины пишутся на JavaScript, файлы в XML формате. После чего компилируются в бинарный файл. Я думаю что это бинарный XML, хотя могу и ошибаться. Никогда не сталкивался, не работал и понятия не имею что это такое. smile

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

Генератор плагинов идет вместе с программой. Пример плагина тоже есть в папке DocumentsNeoAppBuilderPlugIns

Может быть как то в Ольке можно отследить как и что там делается? Может кто с андроид-приложениями вплотную занимается, и уже есть какое нибудь готовое решение. Так как написанные программы можно компилировать для Android, iOS (iPhone, iPad), Windows Phone, то думаю что не должно быть чего то сверх естественного. На устройствах из этих файлов код же должен как то читаться?

Рейтинг поста: 0

Re: NeoAppBuilder

mishem, готовые плагины для NeoAppBuilder зашифрованы своим алгоритмом. Поэтому для него необходимо писать свой расшифровщик, но я пока занят где-то на неделю-две, так что в ближайшее время заняться распаковщиком не могу.
Единственное что могу пока сделать - это выдирать исходники плагинов. Они распаковуются в памяти в формат XML, потому легко снимаются в отладчике. Сам исполняемый файл был накрыт Армадиллой последней версии, пришлось сдирать.

Рейтинг поста: 0

Re: NeoAppBuilder

так что в ближайшее время заняться распаковщиком не могу.

Это не к спеху. Но известие хорошее. smile
Как будет время и желание, сделай. Вопрос думаю поднимется все равно рано или поздно. А пока товарища сюда отправлю. Если ему что то нужно в данный момент, пусть сам тогда к тебе обратится. Кстати если программой кто то заинтересуется, он русский форум по ней создал. Если у кого вопросы появятся, могут там задавать. На оффоруме к русским сейчас тоже стали нормально относится. Раньше даже зарегистрироваться не возможно было если почта ру. smile 

готовые плагины для NeoAppBuilder зашифрованы своим алгоритмом

Я что то такое и предполагал, но надеялся что они пошли по простому пути.

Рейтинг поста: 0

(12-01-2016 07:00:21 отредактировано gazon01)

Re: NeoAppBuilder

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

Они распаковуются в памяти в формат XML, потому легко снимаются в отладчике. Сам исполняемый файл был накрыт Армадиллой последней версии, пришлось сдирать.

Рейтинг поста: 0

(15-02-2017 11:42:37 отредактировано WYLEK)

Re: NeoAppBuilder

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


а чего она такая слабенькая? даже анпакером на ура берется [img][url=httpwylek.ru/sml/smiles/007.gif[/img] распаковал и был грех увлекся немного
NeoAppBuilder

Anton, mishem,  вам архив с распакованным файлом и памятью перевода, кстати майкрософт переводит всего лишь с мелкими недочетами, как будто с него программа писана архив пароль 123

Возможно всё! На невозможное просто требуется больше времени.
Мудрец из Шангри Ла
NeoAppBuilder

Рейтинг поста: 0

(12-01-2016 19:04:06 отредактировано gazon01)

Re: NeoAppBuilder

gazon01 Спасибо, но не совсем то smile  Сама программа по созданию плагинов легко руссится, с ней проблем нет... Проблема с руссификации плагинов уже созданных в этой программе. Как уже писал mishem изначально плагины представляют собой обычные xml который после компиляции как то упаковываются в нечто вроде бинарного архива. И как его зарусить, я лично мало представляю. Я пробовал кое какими утилитами пытаться достать из них текст, кое что вышло, но текст обрывочный на выходе и не тот что нужен (По сути часть скрипта плагина). И получается что чтобы сделать русскую версию плагина приходиться воссоздать его с нуля в программе PluginGenerator, оперируя выдернутыми кусками скрипта. При общих знания js это конечно не сложно, но достаточно трудоемко, да и как бы выходит, что это не руссифицированный плагин какого то автора, а новый, просто очень похожий на другой плагин. У нас на сайте можешь посмотреть, там русская версия плагина созданная мной, и оригинальная версия созданная изначальным автором. Вот ссылка _http://neoappbuilder.ru/viewtopic.php?id=8
Может подскажешь как можно именно сам плагин затрусить.

Рейтинг поста: 0

Re: NeoAppBuilder

вот теперь всё четко и ясно изложено

Может подскажешь как можно именно сам плагин затрусить.

тут только Nexus поможет ;)
добавил тебе прав, теперь сообщения будут сразу видны, надоело активировать happy 

Возможно всё! На невозможное просто требуется больше времени.
Мудрец из Шангри Ла
NeoAppBuilder

Рейтинг поста: 0

Re: NeoAppBuilder

Может подскажешь как можно именно сам плагин затрусить.

Тут не все так просто. Сам XML файл после компилирования уже по своему немного портится и воссоздать исходник точь-в-точь не получится. Вот, например, выдранный исходник твоего переведенного файла Fancy CheckBoxes RUS.nabp. Смотри в прикреплении.
Естественно, я выдрал пока без иконок и CSS файла. В самом исходнике много чего меняется. Например, после компилирования и обратного декомпилирования плагина, в нем не остаются комментарии в строке

<Notes>...</Notes>

Также меняются названия некоторых переменных в некоторых строках. Я не сильно разбираюся что это за переменные, так как это Java язык и мне он мало знаком. Например, строку в исходнике:

<Params>monthnum|INTEGER|Month number (1-12);result|VARREF|Variable to store result</Params>

<Template>result = dtDateDiff( date1, date2, format );</Template>

меняет после декомпиляции на:

<Params>INTEGER=Month number (1-12);VARREF=Variable to store result</Params>

<Template>%4 = dtDateDiff( %1, %2, %3 );</Template>

Разница ощутимая. Может оно не сохраняет имена переменных и пытается подставить свои придуманные переменные, хрен его знает. Это нужно к спецу по Джава скрипту, чтобы можно было правильно воссоздать скрипт. Так что я не знаю, стоит ли игра свеч или будет оно все неработоспособное. Ну а так для выдирания нужно писать распаковщик. Этим могу заняться не раньше чем через 1-2 недели.

Рейтинг поста: 0

(15-02-2017 11:50:17 отредактировано WYLEK)

Re: NeoAppBuilder

в нем не остаются комментарии в строке <Notes>...</Notes>


Я так понимаю это Примечания автора которые не видны пользователю. Они и не нужны. Это заметка, памятка для автора типа для чего этот плагин.

Также меняются названия некоторых переменных в некоторых строках.


<Params>INTEGER=Month number (1-12);VARREF=Variable to store result</Params>

<Template>%4 = dtDateDiff( %1, %2, %3 );</Template>

Это параметры которые требуются функции. Может быть один, несколько или вообще ни одного. Каждый параметр разделен ;
В PlugInGenerator они записываются на вкладке Команды>Параметры

Видимо при компиляции названия переменных удаляются и заменяются на локальные переменные %1, %2 и т.д. Это не для javascript, а для NeoAppBuilder. А имена переменных в исходнике, для удобства написания кода. После при работе плагина видимо строка параметров просто парсится и подставляются номера переменных, а тип переменной, его название, остается.

Из всего этого делается вывод что редактировать текст в PlugInGenerator не получится, а в текстовом редакторе без проблем. Главное его после скомпилировать правильно.

В теге <Params> нам нужно будет все что идет после знака равно. Month number (1-12), Variable to store result
Это описание в диалоговом окне программы NeoAppBuilder когда вызывается команда. Например для параметра который ты привел, диалоговое окно выглядет так

NeoAppBuilder


Это команда dtMonthNumToName, меняет число месяца на название месяца. Но в скрипте, если мы перейдем в PlugInGenerator на вкладку Код и найдем название этой функции,

function dtMonthNumToName( num ) {

  var days = ["January","February","March","April","May","June","July","August","September","O


ctober","November","December"];

  return days[num];

}

мы видим что названия месяцев нужно тоже перевести.

То есть получается тебе нужно написать не только декомпилятор, но и компилятор. Сможешь?

Nexus, а выдерни исходник плагина DateTime.nabp который идет вместе с программой. Посмотрю что там меняется, как и зачем.

Рейтинг поста: 0

(13-01-2016 06:01:01 отредактировано Anton)

Re: NeoAppBuilder

Я так понимаю это Примечания автора которые не видны пользователю. Они и не нужны. Это заметка, памятка для автора типа для чего этот плагин.

Совершенно верно, этот участок в работе не участвует, так что им вполне можно пренебречь

меняет после декомпиляции на:Код
<Params>INTEGER=Month number (1-12);VARREF=Variable to store result</Params>
<Template>%4 = dtDateDiff( %1, %2, %3 );</Template>

Я просмотрел прикрепленный файл, все отлично все что требуется в нем есть. Такое незначительное изменение кода совершенно не проблема. Средствами Notepad++ на исправление синтаксиса до вида понимаемого PluginGenerator-ом  у  меня ушло порядка 1 минуты.  Так что в целом процесс починки кода я могу автоматизировать, и наверно даже написать утилиту которая будет сразу и чинить код, и упрощать руссифицикацию.

То есть получается тебе нужно написать не только декомпилятор, но и компилятор. Сможешь?

Компилятор не нужен. Как я уже написал, починка кода это фигня. Все потом без проблем будет компилиться стандартными средствами. Вот утилита которая могла бы доставать, такого вида код, без танцев с бубном, была бы нужна. Единственно, от себя хочу заметить, если ее получиться сделать, то наверно в свободное плавание ее отправлять не стоит. Фактически мы сейчас работаем с полноценным исходным кодом. И в веселых руках,  с банальными корректировками названий ссылок, плагины смогут приобрести новые авторские права wink 

Рейтинг поста: 0

(13-01-2016 06:26:31 отредактировано mishem)

Re: NeoAppBuilder

то наверно в свободное плавание ее отправлять не стоит

Я тоже об этом подумал. Но с другой стороны кто мешает "плагиностроителю" напакастить в коде?
И такая утилита наоборот поможет без проблем просмотреть код и выявить проблемные участки.

И получается что от нее пользы может быть куда больше чем вреда.

А авторство...
Так думаю большинство плагинов будут писаться из готовых решений взятых в интернете. И тут еще можно будет поспорить кто настоящий автор. smile 

Рейтинг поста: 0

(13-01-2016 08:29:54 отредактировано Anton)

Re: NeoAppBuilder

И получается что от нее пользы может быть куда больше чем вреда.

Безусловно, пользы куда больше. тем более без доступа к исходному коду:

function dtMonthNumToName( num ) {

  var days = ["January","February","March","April","May","June","July","August","September","October","November","December"];

  return days[num];

вот это не получиться локализовать.

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

Скорее всего да. Так или иначе будут использоваться чьи то решения, особенно на крупных плагинах врятли обойдется дело без весомых js библиотек.  Допустим тот плагин, что я перевел, имеет синтаксис очень похожий на описанный тут.  Но все-таки процесс адаптации скрипта под плагин присутствует, и он не всегда прост. И под Neobook, в плагинах порой используются готовые решения, просто их адаптируют до уровня плагина. Вообщем вопрос скользкий на самом деле...

Рейтинг поста: 0

Re: NeoAppBuilder

вот это не получиться локализовать.

Почему не получится?
Функции же тоже выдергиваются.

Вообще то мне что бы понять, нужен от Nexus, выдернутый скрипт этого плагина. Исходник есть, будет с чем сравнить.

Рейтинг поста: 0

Re: NeoAppBuilder

NeoAppBuilder - визуальный конструктор программ для Мобильных и Web платформ.

Возможно всё! На невозможное просто требуется больше времени.
Мудрец из Шангри Ла
NeoAppBuilder

Рейтинг поста: 0

Re: NeoAppBuilder

Вообще то мне что бы понять, нужен от Nexus, выдернутый скрипт этого плагина. Исходник есть, будет с чем сравнить.

Вот держи в прикреплении выдернутый скрипт DateTime.

Единственно, от себя хочу заметить, если ее получиться сделать, то наверно в свободное плавание ее отправлять не стоит

Да кому она нужна будет? Программа-то вообще никому не известная и мало кто будет ковырять эти плагины, так, пару человек пошалят да и забросят.

Рейтинг поста: 0

(13-01-2016 22:47:32 отредактировано mishem)

Re: NeoAppBuilder

Ага, спасибо. Посмотрю.

Программа-то вообще никому не известная

Вообще то ей примерно два-три месяца всего от роду, а наофоруме от нее уже "ссат кипятком". smile

Добавлено (13.01.2016, 23:43:15)
---------------------------------------------
Nexus, отлично! То что нужно.

Сами функции остаются без изменений. А это самое главное, так как именно они выполняют всю работу.

вот это не получиться локализовать.

Все получится. Все эти строки существуют, нужно просто не забывать что в самом скрипте тоже существуют строковые ресурсы.
Переходишь в редакторе PlugInGenerator на вкладку "Код" и редактируешь.

По переменным... Все как и предполагал.
Названия переменных, это просто псевдоним. Переменные %1, %2 и т.д идут по порядку в зависимости от количества параметров.

Например исходный код

<Params>date1|STRING|First date;date2|STRING|Second date;format|STRING|Date format (mm/dd/yyyy, dd/mm/yyyy, etc.);result|VARREF|Variable to store result</Params>

<Template>result = dtDateDiff( date1, date2, format );</Template>

Берем тот что получили

<Params>STRING=First date;STRING=Second date;STRING=Date format (mm/dd/yyyy, dd/mm/yyyy, etc.);VARREF=Variable to store result</Params>

<Template>%4 = dtDateDiff( %1, %2, %3 );</Template>

Получаем строку которая находится в теге Params.

STRING=First date;STRING=Second date;STRING=Date format (mm/dd/yyyy, dd/mm/yyyy, etc.);VARREF=Variable to store result

Парсим ее используя в качестве разделителя ; и получаем массив

STRING=First date

STRING=Second date

STRING=Date format (mm/dd/yyyy, dd/mm/yyyy, etc.)

VARREF=Variable to store result

В цикле добавляем в начало строки номер переменной

%1|STRING=First date

%2|STRING=Second date

%3|STRING=Date format (mm/dd/yyyy, dd/mm/yyyy, etc.)

%4|VARREF=Variable to store result

Заменяем первый знак равно на вертикальную черту | (в описании может тоже встретится знак равно, поэтому только первый)

%1|STRING|First date

%2|STRING|Second date

%3|STRING|Date format (mm/dd/yyyy, dd/mm/yyyy, etc.)

%4|VARREF|Variable to store result

Объединяем массив используя все тот же разделитель ; , и заменяем строку

<Params>STRING=First date;STRING=Second date;STRING=Date format (mm/dd/yyyy, dd/mm/yyyy, etc.);VARREF=Variable to store result</Params>

на

<Params>%1|STRING|First date;%2|STRING|Second date;%3|STRING|Date format (mm/dd/yyyy, dd/mm/yyyy, etc.);%4|VARREF|Variable to store result</Params>

И все, мы имеем рабочий файл для его правки в PlugInGenerator.

Теперь если мы сравним

<Params>date1|STRING|First date;date2|STRING|Second date;format|STRING|Date format (mm/dd/yyyy, dd/mm/yyyy, etc.);result|VARREF|Variable to store result</Params>

<Template>result = dtDateDiff( date1, date2, format );</Template>

и

<Params>%1|STRING|First date;%2|STRING|Second date;%3|STRING|Date format (mm/dd/yyyy, dd/mm/yyyy, etc.);%4|VARREF|Variable to store result</Params>

<Template>%4 = dtDateDiff( %1, %2, %3 );</Template>

то видим что номера переменных соответствуют их именам.

Единственное различие, на вкладке "Команды" мы будем иметь не осмысленные имена переменных типа Result, а переменные в виде %*

Все остальные строки остаются без изменений.
Добавлено (13.01.2016, 23:51:54)
---------------------------------------------
По поводу разделителя и разбора строки нужно еще подумать как правильно все это сделать. :sad: 
В описании так же могут присутствовать символы ;
Так что все это наверно лучше вручную делать, а не программно. Не так то уж там и много исправлять.
Добавлено (13.01.2016, 23:58:45)
---------------------------------------------
Можно в принципе регуляркой заменить все типы переменных
;STRING
;VARREF
и т.д

На что то что точно в тексте не будет присутствовать, типа
;;;;STRING
;;;;VARREF

и уже парсить используя разделитель ;;;;

Ну это так, мысли вслух. smile 

Рейтинг поста: 0

Re: NeoAppBuilder

Да можно много чего придумать для автопочинки... Сейчас главное чтоб, появилась возможность доставать этот код по упрощенной схеме, и тут все зависит от Nexus. А пока ждем, надеемся и верим.

Рейтинг поста: 0

Re: NeoAppBuilder

Сейчас главное чтоб, появилась возможность доставать этот код по упрощенной схеме

Там не все так просто. Помимо того, что сам скрипт шифруется, так еще все это барахло сжимается своим компрессором. Ладно там дешифратор написать, это я могу, сколько их понаписывал. А вот написать распаковщик, который разархивирует содержимое - это уже на порядок сложнее. Тут алгоритм разбирать нужно. В общем, посмотрим.
Anton, а почему не создадите на Ru-board тему об этой программе? Так быстрее популяризируете ее.

Рейтинг поста: 0

Re: NeoAppBuilder

Anton, а почему не создадите на Ru-board тему об этой программе? Так быстрее популяризируете ее.

Можно, но пока будет толка мало. Программа в бете. Справки по ней считай нет. Функционал пока слабоват для программ данного класса. Есть аналоги куда мощнее. Как стабильный релиз появится, тогда наверно можно будет заняться ее популяризацией.

Рейтинг поста: 0