eXeL@B —› Софт, инструменты —› Inno Setup Decompiler |
Посл.ответ | Сообщение |
|
Создано: 25 декабря 2016 20:14 · Поправил: vden · Личное сообщение · #1 Декомпилятор скриптов инсталляторов Inno Setup (скрипт в секции [code] инсталлятора). Преобразует байт-код скриптового движка PascalScript в Pascal-like листинг. На сайте есть "мини-игра" GuessTheCode в виде инсталлятора. Попробуйте узнать алгоритм проверки кода. Проблемы можно добавлять сюда: | Сообщение посчитали полезным: DICI BF, mak, Kindly, reversecode, -=AkaBOSS=-, Bronco, ajax, Jaa, v00doo, SReg, MarcElBichon, daFix, 4kusNick, zNob, sendersu, JohnyDoe, MasterSoft, neshta, screen66, kassane |
|
Создано: 25 декабря 2016 22:02 · Поправил: Kindly · Личное сообщение · #2 Сюда можно баг-репорты писать? Вот этот бин не открывается: http://rgho.st/7pXVv86nx Есть еще пример, как Chr($XX)+Chr($XX) и т.д. некорректно обрабатываются, например: в скрипте sPatternArray[1] := Chr($85)+Chr($F6)+Chr($75)+Chr($05)+Chr($5F)+Chr($33)+Chr($C0)+Chr($5E)+Chr($C3); в декомпиле gvar_29.0 := #65533#65533'u'#5'_3'#65533'^'#65533; добавлено: INC(Integer); DEC(Integer); которые доступны в UNICODE версии компиля, в декомпиле возвращаются пустые значения: INC(); vden пишет: Я создал репозиторий на github чтобы было удобнее отслеживать проблемы. Желательно добавлять сразу туда. ок. буду писать о багах туда. все же есть особенности ROPS двигла (Boolean, Format, индексирование WSTRGET в циклах в строковых массивах типа ssEdit.Text[i] и прочее), но кто кодил в Inno не составит особого труда разобраться. ----- Array[Login..Logout] of Life | Сообщение посчитали полезным: vden |
|
Создано: 25 декабря 2016 22:02 · Личное сообщение · #3 |
|
Создано: 25 декабря 2016 22:23 · Поправил: vden · Личное сообщение · #4 @Kindly Я сохранил файл. На днях постараюсь изучить. |
|
Создано: 26 декабря 2016 00:24 · Поправил: v00doo · Личное сообщение · #5 |
|
Создано: 26 декабря 2016 01:36 · Личное сообщение · #6 Только вот непойму - неужели нереально было то же самое закодить без дотнета 4.6.2 и вин7 в системных требованиях? | Сообщение посчитали полезным: SReg |
|
Создано: 26 декабря 2016 02:28 · Поправил: Kindly · Личное сообщение · #7 vden пишет: На сайте есть "мини-игра" GuessTheCode в виде инсталлятора. Попробуйте узнать алгоритм проверки кода. например: 2876543232 или нужен кейген? Code:
и что с кодесом? один (что позволяет Inno) из восьми потоков CPU процесса GuessTheCode.tmp грузится до 100%! Повангую, баг, возможно, в обработчике: PeekMessage(Msg, Form.Handle, 0, 0, 1) лучше заменить на PeekMessage(Msg, 0, 0, 0, 1) а код в целом выглядит так: Code:
также сомнение в функции ExitProcess в ONEDITCHANGE... пытаешся завершить процесс? тут родную Exit нужно юзать. и в INITIALIZEWIZARD(); не совсем понятно зачем ExitProcess юзать. Просто форму лучше в InitializeSetup вызывать с деинициализацией по False. ----- Array[Login..Logout] of Life |
|
Создано: 26 декабря 2016 16:42 · Поправил: vden · Личное сообщение · #8 @Kindly Да, правильно восстановил алгоритм. Одну проблему я исправил (ту где не открывается файл). Процесс загружает одно ядро на 100 процентов потому что PeekMessage в цикле постоянно. Я добавил Sleep(50), должно помочь. ExitProcess закрывает процесс, а Exit просто выходит из процедуры. Если не завершать процесс, то дальше пойдут страницы инсталлятора. или нужен кейген? нет это просто небольшой пример декомпилер хоть еще и далек от идеала, но все-же какой-то анализ уже можно проводить -=AkaBOSS=- пишет: Только вот не пойму - неужели нереально было то же самое закодить без дотнета 4.6.2 и вин7 в системных требованиях? Реально. Но я сейчас веду все проекты на C#. Кстати, кто-то может подсказать, есть ли сейчас возможность компилировать .net в нативный код? (для десктопных wpf приложений). |
|
Создано: 26 декабря 2016 17:15 · Личное сообщение · #9 |
|
Создано: 26 декабря 2016 19:13 · Личное сообщение · #10 |
|
Создано: 26 декабря 2016 20:01 · Поправил: vden · Личное сообщение · #11 -=AkaBOSS=- пишет: скомпилить это добро под старый добрый .net 4.0 ок, вроде переделал под net 4, попробуйте ps microsoft вроде делает нативную компиляцию, но пока только для UWP приложений | Сообщение посчитали полезным: mysterio, -=AkaBOSS=-, SReg |
|
Создано: 26 декабря 2016 20:21 · Личное сообщение · #12 |
|
Создано: 26 декабря 2016 20:57 · Поправил: mysterio · Личное сообщение · #13 Несколько косметических пожеланий: 1. Добавить меню File->Exit и Help->About (форму с Aboutом или хотя бы MessageBox c датой и номером версии; номер версии добавить в заголовок главного окна ?) 2. По возможности: Добавить поиск строк (опять же опционально: с возможностью поиска и таких строк Chr($85)+Chr($F6)+Chr($75)) По желанию автора/публики: иконку в трей - будет хорошо, а не будет - ну и .... и без нее летает ;) Заметил, что в полях кода нет контекстного меню (вида: Copy, Cut, Paste, Select all, Format C: /Y , и все тот же Find) - для тех кто привык копировать через правую кнопку мышки. 3. Можно ли сделать что бы вот такая "ёлка": Code:
Сворачивалась в идеале в: Code:
Или хотя бы так: Code:
----- Don_t hate the cracker - hate the code. |
|
Создано: 26 декабря 2016 21:08 · Личное сообщение · #14 |
|
Создано: 27 декабря 2016 00:27 · Личное сообщение · #15 |
|
Создано: 27 декабря 2016 01:11 · Поправил: v00doo · Личное сообщение · #16 Не знаю, сильно ли это важно и считать ли вообще, но вот такой мельчайший момент относительно всех других: Code:
v_6 пустая, там бы '' или просто 0 вбить, да и метки часто просто висят. mysterio пишет: Еще "бред-о-хотелки" по улуч/ухуд-шению принимаются ? У меня на самом деле только одна хотелка, но я понимаю, что в текущем варианте оно сложно вяжется: переименовывать переменные, просто зрительнее намного удобнее бегать глазами mysterio пишет: Добавить меню File->Exit и Help->About (форму с Aboutом или хотя бы MessageBox c датой и номером версии; номер версии добавить в заголовок главного окна ?) Полностью за, а то непривычно аж как-то |
|
Создано: 27 декабря 2016 01:24 · Поправил: Kindly · Личное сообщение · #17 v00doo пишет: v_6 пустая, там бы '' или просто 0 вбить в качестве пустого параметра нужно '' передавать, ноль это ноль все-таки. но что-то тут не то, ибо у меня обычные переменные, не являющиеся параметрами, декомпилит нормально: v_28 := ''; видимо причина в параметрах именно для функции. ----- Array[Login..Logout] of Life |
|
Создано: 27 декабря 2016 01:36 · Поправил: v00doo · Личное сообщение · #18 Kindly, ну я это понимаю прекрасно, про это и говорю, что странно, что вообще нет значения. Там '' в сорках естественно, это кусок разобранного инсталлера чужого, руками когда-то разбирал: Code:
Еще из странных хотелочек: все к тому же переименованию по сути относится: Code:
Показывать v_6 в хексе бы, без переключения уже, галочку, например какую-нибудь в настройках для отображения чисел, но это все мелочевка. |
|
Создано: 27 декабря 2016 17:01 · Поправил: vden · Личное сообщение · #19 mysterio пишет: по улуч/ухуд-шению принимаются да. если есть акк на github, лучше туда. добавляйте что считаете нужным, я отфильтрую пустая строка попробуйте последнюю версию, скорее всего уже исправлено по поводу переименования переменных буду рассматривать эту возможность позже, т.к. это повлечет за собой добавление сохранения и загрузку проекта. я думал отложить это до времен когда я объединю этот проект и code analyzer, но возможно получится раньше ps забыл, елку сделал, не успеваю обновлять |
|
Создано: 27 декабря 2016 18:15 · Личное сообщение · #20 |
|
Создано: 27 декабря 2016 19:27 · Поправил: mysterio · Личное сообщение · #21 Как сказал Гагарин перед взлетом: Отрезаем шланг с тормозной жидкостью и саму педаль тормоза .... (недоумение) зачем это в ракете - и "поехали": Менюшек все еще нет.... личная просьба запилить их в таком виде: File Blabla ____ Exit тоесть что бы сверху был разделитель (тоже с Aboutом) Большую часть из хотелок уже озвучили, остается только дополнить. "елку сделал" - отлично, теперь еще декомпилер сделать LoL Елку запилили, а иголки не спилили - "колится в глаза". Жутко неудобно читать такое вот и другой длинный текст: Code:
1. Запилить в контекстном меню или где еще чекбокс "WordWrap" - решит проблему читаемости длинного текста. Здесь есть еще вариант как решить эту проблему для строковых переменных. 2. Помимо опции WordWrap, запилить ограничене на длину строки на стандартные 80-100 символов с возможностью настройки длины (мониторы и запросы у всех разные). Соответственно куда приятнее читать: Code:
либо Code:
чем крутить горизонтальный скролл. По поводу выхода - нет стандартных вопросов о том хотим ли мы выйти, или сохранить результат, а то вдруг случайно закрыли окно. Желательно что бы их можно было убрать в опциях - кому нужно поставит галки что бы не нужные вопросы не задалбывали. Поиск.... поиск..... поиск с возможностью RegExp ? Нужно кому-нибудь ? Уже говорили про переменные: вот как понять что это за переменная "v_56" - какой у нее тип, за что она отвечает ? Вместо этого делать приятно читаемые префиксы, например для Inetger - n или int, для String - s или str, Single, Double, Real - r и т.д.; Ch_v_56 - смотрится куда информативнее, как минимум видно тип Char; или так nV_38 - тип Integer, uS_v_45 - тип UnicodeString. Если есть поиск - сделать и замену (RegExp ? ;)), не нравится нам скажем переменная "Ch_v_56" - так заменим ее на "Ch_10CharInRegStr" во всем проекте. Не понравилось: Что по дефолту грузит последний открытый файл/проект - убрать бы это, сделать например File-> Recent Files/Projеcts -> и здесь уже каждый выберет из 5 до 10 пунктов что из последнего открывал, а эту фишку вынести в опции. Так как если файлы проекта вырастут это увеличит и без того не малое время запуска декомпиля. * IMHO Что в окне выбора файла для декомпиляции показывает все файлы, а не нужные, они идут как *.bin - соответственно добавить туда фильтры все файлы *.* и *.bin - этот по умолчанию. Отображение чисел: По поводу показывать Hex или Dec, можно сделать хитрее, например отображать вот так: nV_6 := -2147483646; // 0x80000002 | 0xFFFFFFFF80000002 | любая другая инфа На суффиксы с префиксами не претендую, кому нужно запилить опции с отображением цифр/коммента как $80000002, 80000002h, 0x80000002h и для гурманов #80000002 и т.д. Еще что-то хотел, но думаю и этого пока хватит..... ----- Don_t hate the cracker - hate the code. |
|
Создано: 28 декабря 2016 19:58 · Поправил: v00doo · Личное сообщение · #22 vden, мне показалось или шрифт стал больше в последнем билде? Можно тоже на будущие настройку шрифта впихать, ну я думаю это итак запланировано, но пока хоть размер временно менять. Кстати оповещения вверху у меня лично малость подлагивают, так ли они нужны? Можно их в опцию тоже загнать в будущем? mysterio пишет: Уже говорили про переменные: вот как понять что это за переменная "v_56" - какой у нее тип, за что она отвечает ? Да переименование решило бы проблему, мне кажется не стоит городить, итак глаза порой в кучу когда они списком большим. У SetArrayLength с параметрами что-то не так. Code:
А, там есть уже тикет на счет этого... Простите ленивого, все еще не заведу никак акк на гитхабе. |
|
Создано: 29 декабря 2016 06:02 · Личное сообщение · #23 Подкину дров: Возможность отключать всплывающие сообщения, сообщения об ошибках оставить. Уменьшить высоту меню никак нельзя ? - процентов на 15-25 - как-то высоковато - речь об высоте "полоски" "File Help". Добавить в это самое меню "стандартные" шорткаты: Open - F3, Find/Search - F7 или Ctrl+F, Save - Ctrl+S, Exit - Ctrl+Shift+Alt+Esc+IDDQD+Reset+введите_пинкод и т.д. За заголовок уже говорил, дополню: из этого "Pascal Script Decompiler"; сделать это: "Pascal Script Decompiler vВерсия [Полный путь к открытому файлу или только имя_файла]". * я за полный путь Добавить возможность реанализа файла она же переоткрытия, с шорткатом Shift + R или Ctrl + R. Зачем нужно ? Затем что если открыли файл, через какое-то время он нам оказался не нужен, и мы на его место перезаписали другой *.bin - что бы не нажимать опять File -> Open или F3 и выбирать из списка тот же файл, нажимаем Shift + R и файлик переоткрылся без лишних телодвижений. Возможность быстрого отключения/включения, как и WordWrap - птичкой в контекстном меню, нумерации строк. Спойлер: Отключать спойлер если количество строк в Var скажем мение 5 и соответственно включить если более. ----- Don_t hate the cracker - hate the code. |
|
Создано: 29 декабря 2016 09:05 · Личное сообщение · #24 |
|
Создано: 29 декабря 2016 12:38 · Поправил: Kindly · Личное сообщение · #25 SReg +1 vden не знаю, будет ли это реквестом или багом, но после экспорта в .pas функции из dll имеют непонятные параметры, например: function EnumResourceNamesA(Arg0: ?; Arg1: ?; Arg2: ?; Arg3: ?): ? stdcall; external 'EnumResourceNamesA@kernel32.dll stdcall DelayLoad'; function RunTask(Arg0: ?; Arg1: ?): ? stdcall; external 'RunTask@ISTask.dll stdcall DelayLoad'; Было бы идеально, если бы декомпиль умел определять, где в функции String, где PChar, Integer, THandle и т.д. Да и по сути это не Inno Setup Decompiler, a ROPS Decompiler, т.к. я встречал проги с защитными механизмами да и некоторым функционалом в виде пошифрованных ROPS скриптов, аналогичных тем, что использует Inno Setup. Но раз "массовое" его применение в Inno Setup, пусть себе так и называется ----- Array[Login..Logout] of Life |
|
Создано: 29 декабря 2016 14:03 · Поправил: vden · Личное сообщение · #26 Улучшения интерфейса и все что не критично для открытия и анализа скрипта будет отложено на потом. Сейчас главная задача сделать качество листинга лучше. Для этого я дорабатываю другой проект (code analyzer) чтобы его анализатор можно было интегрировать сюда. Это даст оптимизации, чистку мусора и прочее. Kindly пишет: function EnumResourceNamesA(Arg0: ?; Arg1: ?; Arg2: ?; Arg3: ?): ? stdcall; В скрипте не указаны типы для аргументов. Со временем, я думаю, это будет решено. При декомпиляции всех методов можно будет отследить какие типы попадают в аргументы. ps проблема #2 теперь решена тут есть список затронутых функций | Сообщение посчитали полезным: v00doo, Kindly |
|
Создано: 29 декабря 2016 15:44 · Личное сообщение · #27 Соглашусь с мнением большинства, ведь действительно "Зачем изначально делать "по-людски" - если сразу можно сделать автоваз!?" - кто я такой что бы говорить о целесообразности на этом или подальших этапах. Риторически говорил: mysterio пишет: не знаю стоит ли вываливать - вдруг никому не нужно.... ответ всплыл сам собой. P.S. Новогоднее желание: int вернись! - черт, в слух сказал, не сбудется ----- Don_t hate the cracker - hate the code. | Сообщение посчитали полезным: v00doo |
|
Создано: 29 декабря 2016 18:51 · Поправил: vden · Личное сообщение · #28 |
eXeL@B —› Софт, инструменты —› Inno Setup Decompiler |