Что нового

Проблема кодировки AutoIt3Wrapper Obfuscator

Сообщения
80
Репутация
-1
Стояла старая версия и проблем не знал. Scite писал в ansi, единственное неудобство, на github при просмотре крюкозябры и n++ думал что это koi8 и менял заглавные буквы знаками, но я эти места просто не трогал.

Решил я прикрутить врапер, скачал портативную scite, в итоге всё накрылось. Снёс всё и поставил с инсталятора последний autoit и полный scite.
В итоге scite начал показывать крюкозябры, но обошлось конвертированием через n++ в utf8.

Вторая проблема которая так и не решилась, невозможно создать кирилический файл. Если создать файл пишет всегда вопросы, даже если туда вставлять текст.
Это теперь я прочитал что надо в меню файл переключать, а до того сохранял этот файл, открывал в n++ , писал одну кирилическую букву и сохранял(не перекодирую и не меняя кодировку, он просто правильно открывался), старый кирилический текст там был(не вопросы и не крюкозябры) и сохранял, после этого scite внезапно начинал понимать кирилицу.

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

Но вот решил настроить обфускатор и всё упёрлось в то что он работает только с ansi, а scite его не понимает потомучто работает в utf8.

Обфускатор врапера похоже единственое что умеет ужимать.
Сжатие не работает причём не только в этой версии, его так и не починили, так что параметры /pack /nopack /comp никогда не работали. Встроенный upx также идёт тудаже, его там просто нет.
Сжатие через враппер тоже не работает, upx не проверял, но скорее всего тоже.

Не без бубна, но в батнике показав пальцем на этот самый C:\Program Files (x86)\AutoIt3\Aut2Exe\upx.exe
удалось готовый файл упаковать, но сам компилятор этого не может.
раньше вырезал функции из библиотек и втыкал в свой файл, также и с константами, и размер заметно менялся. Отключив какието константы размер бинарника уменьшился на треть. У обфускаторе тоже получилось как раз в 100кб сэкономить.

После запуска обфускатора он создаёт свой файл _stripped.au3 который в n++ открывается как ansi и этиже крюкозябры я получаю в gui , но переключив в utf8 получаю нормальный текст, сохраняю уже как utf8. Перетаскиваю его в scite, получаю нормальный текст.
Собираю этот _stripped.au3 и получаю вроде как уже нормально почти всё, кроме вот этот строчки
было
=( °w° )=
стало
=( �w� )=
но этотже опять стал почемуто ansi, так что второй раз это собрать я не могу.

В общем мы имеем исходники которые в utf8 понимаются scite и врапером. И врапер который из этих исходников делает ansi и не может их нормально собрать.

Есть какието простые решения ?
Переучить stite в ansi , вроде как не плохой вариант, да он и сам хочет, но не знаю как.
Найти тот кусок кода во врапере который делает этот промежуточный исходник и перекодировать его перед выводом.

Имел ктото ктото такие проблемы при сборке, ведь из коробки не работает?
Может есть патченый врапер?
Неужели никто автору ещё баг не описал или только мне не повезлор
 
Автор
W
Сообщения
80
Репутация
-1
Попробую почитать, но автор вродебы не говорил что менял кодировку модулей.

А тем временем после моего опыта строка стала иной
=( ?Р)=

Я так понял что проблема с C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3 который работает только там. Хотел поменять кодировку, 5 часов тыкал в него отладочными метками, но так и не нашёл того места где он сохраняет файл. Он просто ниодной из этих функций не пользуется, работает только полоска статуса в AutoIt3Wrapper.exe при запуске с батника, вот там эти метки ещё работают.
Но FileCopy и FileWrite( просто ничего не делают.

Код:
;978
$ScriptFile_In_stripped = StringTrimRight($ScriptFile_In, StringLen($ScriptFile_In_Ext)) & '_stripped' & $ScriptFile_In_Ext
;2529
FileCopy(StringTrimRight($ScriptFile_In, StringLen($ScriptFile_In_Ext)) & '_stripped' & $ScriptFile_In_Ext, $TempDir & "\scriptin.tmp", 1)

Чтото я не пойму откуда они идут, но кодировка пропадает ещё до них. Перекодировал исходник и собирается нормально, только в ide читать не могу ничего.
Почемуто авторы всеми силамаи боролись за перекодирование всех видов utf , а то что autoit умеет создавать только ansi файлы они почемуто не узнали.
Но scite при следующем открытии опять перекодировал в utf8.

Это ещё фигня, прошлая версия у меня вылетала в bsod после выключения скрипта, и убивала исходник записывая нули. Но в новой версии просто нельзя выключать эмуляцию


Добавлено:
Сообщение автоматически объединено:

В общем накатал батник в виде костыля.
Запуску через scite кодировка не мешает, а саму прогу собираю батником.
Но почемуто не удаляется временный файл обфускатора _stripped.au3
Код:
@set @x=0; /*
@echo off
set "autoitdir=C:\Program Files (x86)\AutoIt3"
set path=%path%;"%autoitdir%\Aut2Exe\"
set "xUPX="%autoitdir%\Aut2Exe\"upx.exe"
set app64=GUI_x64e
set "srcdir=%~d0%~p0"
set "src_main=gui.au3"
set "srctmp=~1251%src_main%"
set "outdir=%~d0%~p0"

title build %app64%
taskkill /im %app64%*

rem запись метки сборки в исходник
set now=%DATE: =0% %TIME: =0%
for /f "tokens=1-7 delims=/-:., " %%a in ( "%now%" ) do (
set now=%%a%%b%%c.%%d%%e
)
set "now=%now:~-11%"
>"%srcdir%version.au3" echo Global Const $version = "  0.%now% dev2"

rem перекодируем файл.
rem http://www.cyberforum.ru/post7145805.html
call :Recode "%srcdir%%src_main%" "%srcdir%%srctmp%" utf-8 windows-1251
:Recode in.[исходный файл] in.[результирующий файл] in.[кодировка исходного файла] in.[кодировка результирующего файла]
cscript.exe //nologo //e:jscript "%~f0" "%~1" "%~2" "%~3" "%~4"

rem собираем врапер если его нет, с вывлдом в консоль и иконкой которой, дефолтно нет.
if not exist "%autoitdir%\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" (
echo Not Found "%autoitdir%\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" ...
copy "%autoitdir%\Icons\au3.ico" "%autoitdir%\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.ico"

"%autoitdir%\Aut2Exe\Aut2exe_x64.exe" /in "%autoitdir%\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /out "%autoitdir%\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /x64 /console /icon "%autoitdir%\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.ico"
)

rem переходим в папку чтоб добавились ресурсы
cd /d "%srcdir%"
"%autoitdir%\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /in "%srcdir%%srctmp%" /out %outdir%%app64%w.exe /nopack /Gui 
rem удаляем временный перекодированый файл
del "%srcdir%%srctmp%"
rem удаляев старый финальных бинарник, upx это не умеет
del "%outdir%%app64%wu.exe"
%xUPX% -9  -o "%outdir%%app64%wu.exe" "%outdir%%app64%w.exe" -k
rem удаляем неупакованый бинарник если нужно
rem del "%outdir%%app64%w.exe"

rem тут был Exit /B , но консоль просто пойдёт по кругу
timeout /t 1
exit





 
*/with (new ActiveXObject('ADODB.Stream')) {
  Charset = WScript.Arguments(2);
  Open();
  LoadFromFile (WScript.Arguments(0));
  Text = ReadText();
  Close();
  Charset = WScript.Arguments(3);
  Open();
  WriteText (Text);
  SaveToFile (WScript.Arguments(1), 2);
  Close();
}
 
Автор
W
Сообщения
80
Репутация
-1
Похоже дело даже в AU3Stripper.exe , потомучто без него и файл не портится и размер не уменьшается, всё работу делает он.
Попробую проверить его отдельно если пойму как, но похоже он создаёт файлы только ansi


Добавлено:
Сообщение автоматически объединено:

В общем это какаято лютая жесть.
Уже 2 раза столкнулся этой поганью и не знаю кто виноват, n++ которым переводил файлы или scite который переводит их сам.
Началось с того что исходник написанный в старой версии autoit, scite испортил, и я взял копию с гита в 1251, сунул в n++ и перекодировал в utf8 с ним и работал дальше.
Но походу сборок столкнулся с тем что в батнике перестала работать команда @echo off от частых перекодировок в попытке добавить коментарии в 866. Не сразу поняв в чём дело, создал новый пустой файл и скопировал туда всё с этого батника, тогда команда заработала.

Потом случилось то что #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=y тоже перестало работать. И я создал новый пустой файл уже в scite и скопировал туда весь исходник, после чего версия начала меняться по команде Build.

Дальше оказалось что Obfuscator устарел и надо использовать Au3Stripper в общем то об этом и пытался сказать scite, но почемуто в новой версии у него не работает прокрутка консоли и он всегда показывает середину, а прокручивать это малюсенькое окошко ну очень неудобно.
Но сути это не меняет, кодировка не работает.

Нашёл буржуйскую тему хоть какоето чтиво. Заодно качнул откуда сказали бету Au3Stripper.exe и SciLexer.dll , ничего не дало.
(Дочитал я только до 2015 года, похоже воз и ныне там)

Тут я читая форум игрался с кодировкой делая её UCS-2, как там пишут с ней кодировка была нормальной, но на самом деле эту кодировку не понимал стрипер и просто не работал. Быть может на этом я окончательно и добил файл, но он всё ещё оставался для меня читаемым utf8.

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

Сравнил файлы в Diffuse, различие только в 1 строке с текстом "#Region", вот только я не вижу какое. Размер отличается на 3 байта, у правильного больше.
Получается что Au3Stripper.exe для нормальной работы нужно именно utf8-bom глючный линуксовый формат который всегда мешает.
OffTopic:
щя опять напишут что я криворукий и не умею использовать линуксовый софт для виндовой софтины которая работает только в винде и в вендовой кодировке.
Мне не нужен линуксовый софт

Но частично проблема осталась
Строка
Код:
 =(  °w° )=
после стрипера становится
Код:
=(  �w� )=
в общем пришли к тому что было в начале темы, и проблема таже что и в конце темы по ссылке по 2 посту
А я то думал utf8 это одна кодировка, а эти 3 буквы только метка в начале файла для упрощение его определения, а оказывается utf8-bom это другая кодировка со своими знаками, причём в ней нет тех знаков которые есть в первой.
Или очередной баг n++ 64 . Он тоже не смог перекодировать знак градуса в bom
 
Верх