Современные решения

для защиты Windows приложений

и восстановления исходного кода
Автор: Сергей Чубченко. Дата публикации: 31.07.2005

Разрабатываем программы на GPScript'е


Введение

Не знаю, в курсе Вы или нет, но пару лет назад мной был разработан довольно интересный скриптовый язык программирования, умеющий создавать нормальные Win32 приложения. О степени поддержки возможностей современных языков и оптимизированности спорить конечно бессмысленно, но когда нужно на скорую руку написать Autorun менюшку на диск или любую другую несложную программу, то данный язык может сильно пригодиться. Я не буду описывать все возможности языка - на то есть хелп. Моя цель - научить Вас на нем писать разного рода продукты. Поэтому учиться начнем на конкретных примерах. Приступим.

Autorun меню за считанные минуты

Для начала откройте GPScript и в меню "Формы" выберите пункт меню "Редактор Форм". В появившемся окне мы будем создавать интерфейс для нашего Autorun’а. В левом верхнем углу формы, прямо под меню расположена панель компонентов, которые можно разместить на форме. Их выбор не велик, но этого вполне хватит для реализации несложных задач.
Первый компонент - "Кнопка" представляет собой графическую кнопку, а также может использоваться как обычный PictureBox. Щелкните по нему. В появившемся окне выберите графический объект. Для примера возьмем файл Exit1.jpg из папки Buttons (эта папка находится в папке с GPScript’ом). Чуть ниже списка компонентов есть список свойств. У кнопки всего одно важное свойство "Стиль". Оно определяет, будет ли картинка статичной, или выполняет роль кнопки.
Второй компонент - "WinКнопка" представляет собой обычную виндовую кнопку, стандартную для всех приложений. Добавим ка на форму пару таких кнопок и разместим объекты где необходимо! Забыл сказать, если потребуется изменять размеры контролов - нуджно всего лишь подвести курсор к правому нижнему краю контрола или формы, зажать Alt на клавиатуре и ресайзить выделенный контрол.
Третий компонент - "Текст" может использоваться как поле для ввода текста или как лейбл. Все зависит от свойства "Стиль". Этот контрол мы используем в качестве лейбла вверху нашего Autorun меню.
Вот что у меня получилось:

Редактор Форм в GPScript

Теперь можно сохранить шаблон формы через меню "Файл" -> "Сохранить". Это потребуется, если Вы впоследствии решите что нибудь изменить в форме используя визуальных редактор, а не копаясь в малопонятном коде. Кстати, чтобы форму добавить в свой код ее нужно перевести на язык GPScript, для этого служит меню "Компиляция". В нем два пункта. "With attach" означает что картинки из кнопок будут храниться внутри EXE файла, а не подгружаться из выбранной папки. Теперь когда мы разобрались с принципом создания формы скомпилим нашу форму With attach и скопируем скомпиленный скрипт из окна в правом нижнем углу редактора форм в самое начало нашего кода в главном окне GPScript. Как видите, там уже есть заготовки для обработчиков кнопок - они должны быть в конце скрипта, после скрипта загрузки формы. Вот код, который получился у меня:


;Загрузка формы Объект.загрузить Форма Объект.размер Форма, 3000, 480, 2300, 3405 Объект.цвет Форма, -2147483630, -2147483633 Объект.стиль Форма, 1 Объект.текст Форма, Autorun Menu ;Загрузка Кнопки 1 Объект.загрузить Кнопка1 Объект.размер Кнопка1, 690, 1215, 465, 1980 Объект.стиль Кнопка1, 0 #C:\gpch\GPScript\Buttons\Exit1.jpg аттач C:\gpch\GPScript\Buttons\Exit1.jpg, Tmp_Button1_jpg удалить @Temp@Кнопка1.jpg записать @Tmp_Button1_jpg@, @Temp@Кнопка1.jpg Объект.рисунок Кнопка1, @Temp@Кнопка1.jpg удалить @Temp@Кнопка1.jpg ;Загрузка Текстового поля 1 Объект.загрузить Текст1 Объект.размер Текст1, 390, 180, 345, 2385 Объект.цвет Текст1, -2147483640, -2147483633 Объект.текст Текст1, Крутой Autorun Объект.стиль Текст1, 0 Объект.шрифт Текст1, MS Sans Serif, 8,25 ;Загрузка Win Кнопки 1 Объект.загрузить WinКнопка1 Объект.размер WinКнопка1, 225, 660, 375, 1050 Объект.цвет WinКнопка1, , -2147483633 Объект.текст WinКнопка1, Product Объект.шрифт WinКнопка1, MS Sans Serif, 8,25 ;Загрузка Win Кнопки 2 Объект.загрузить WinКнопка2 Объект.размер WinКнопка2, 1995, 645, 375, 1050 Объект.цвет WinКнопка2, , -2147483633 Объект.текст WinКнопка2, Web Site Объект.шрифт WinКнопка2, MS Sans Serif, 8,25 ;Сделать все объекты видимыми Объект.показать Форма Объект.показать Кнопка1 Объект.показать Текст1 Объект.показать WinКнопка1 Объект.показать WinКнопка2 Процедура_WinКнопка_1 ;Начало вашего кода WinКнопка1 ;Конец вашего кода WinКнопка1 Конец_Процедура_WinКнопка_1 Процедура_Кнопка_1 ;Начало вашего кода ;Конец вашего кода Конец_Процедура_Кнопка_1 Процедура_WinКнопка_2 ;Начало вашего кода WinКнопка2 ;Конец вашего кода WinКнопка2 Конец_Процедура_WinКнопка_2

Генератор тут немного накосячил. Перепутал параметры в функции "записать"... таких глюков в автогенераторах полно и я их не в силах исправитить, так как уже нет у меня исходников GPScript’а, Потому если возникает глюк - нужно лезть в хелп и смотреть как правильно. Хелп всегда прав :) Короче меняем:

записать @Tmp_Button1_jpg@, @Temp@Кнопка1.jpg

на

записать @Temp@Кнопка1.jpg, @Tmp_Button1_jpg@

Этот косяк не единственный. Генератор еще для красоты перед строчкой:

#C:\gpch\GPScript\Buttons\Exit1.jpg

поставил два пробела, что недопустимо для директив компилятора, поэтому эти два пробела нужно убрать. Также, так как это директива компилятора, то если программу не откомпилировать - она работать как надо не будет, потому не торопитесь жать F5 (Запуск программы), а нажмите Shift+F5, введите имя создаваемой программы и после успешного создания EXE файла можете попробовать его запустить - все должно работать как надо. Теперь напишем обработчики для кнопок:

Процедура_WinКнопка_1 ;Начало вашего кода WinКнопка1 запустить @Current@Product\Setup.exe ;Конец вашего кода WinКнопка1 Конец_Процедура_WinКнопка_1 Процедура_Кнопка_1 ;Начало вашего кода завершить ;Конец вашего кода Конец_Процедура_Кнопка_1 Процедура_WinКнопка_2 ;Начало вашего кода WinКнопка2 запустить explorer http://www.dotfix.net ;Конец вашего кода WinКнопка2 Конец_Процедура_WinКнопка_2

Вот и все. Быстро, правда?

Тест защиты на GPScript’е

Чтобы усвоить материал предлагаю познакомиться с моим шестым сэмплом защиты. Он написан именно на GPScript’е:

;Загрузка Формы Объект.загрузить Форма Объект.размер Форма, 3000, 480, 3035, 4425 Объект.цвет Форма, -2147483630, -2147483633 Объект.стиль Форма, 1 Объект.текст Форма, Test Protection 6 by DotFix Software ;Загрузка Текстового поля 1 Объект.загрузить Текст1 Объект.размер Текст1, 465, 210, 705, 3405 Объект.цвет Текст1, -2147483640, -2147483633 Объект.текст Текст1, To register please pay $9 for the license. Protected by DotFix Software. Protectors is not used! Объект.стиль Текст1, 0 Объект.шрифт Текст1, MS Sans Serif, 8,25 ;Загрузка Текстового поля 2 Объект.загрузить Текст2 Объект.размер Текст2, 225, 1185, 285, 1650 Объект.цвет Текст2, -2147483640, -2147483633 Объект.текст Текст2, User name: Объект.стиль Текст2, 0 Объект.шрифт Текст2, MS Sans Serif, 8,25 ;Загрузка Текстового поля 3 Объект.загрузить Текст3 Объект.размер Текст3, 240, 1635, 285, 1650 Объект.цвет Текст3, -2147483640, -2147483633 Объект.текст Текст3, Password: Объект.стиль Текст3, 0 Объект.шрифт Текст3, MS Sans Serif, 8,25 ;Загрузка Текстового поля 4 Объект.загрузить Текст4 Объект.размер Текст4, 1950, 1110, 285, 1650 Объект.цвет Текст4, -2147483640, -2147483643 Объект.текст Текст4, Объект.стиль Текст4, 1 Объект.шрифт Текст4, MS Sans Serif, 8,25 ;Загрузка Текстового поля 5 Объект.загрузить Текст5 Объект.размер Текст5, 1950, 1545, 285, 1650 Объект.цвет Текст5, -2147483640, -2147483643 Объект.текст Текст5, Объект.стиль Текст5, 1 Объект.шрифт Текст5, MS Sans Serif, 8,25 ;Загрузка Win Кнопки 1 Объект.загрузить WinКнопка1 Объект.размер WinКнопка1, 360, 2010, 330, 1455 Объект.цвет WinКнопка1, , -2147483633 Объект.текст WinКнопка1, Register Объект.шрифт WinКнопка1, MS Sans Serif, 8,25 ;Загрузка Win Кнопки 2 Объект.загрузить WinКнопка2 Объект.размер WinКнопка2, 2505, 2010, 330, 1455 Объект.цвет WinКнопка2, , -2147483633 Объект.текст WinКнопка2, Exit Объект.шрифт WinКнопка2, MS Sans Serif, 8,25 ;Сделать все объекты видимыми Объект.показать Форма Объект.показать Текст1 Объект.показать Текст2 Объект.показать Текст3 Объект.показать Текст4 Объект.показать Текст5 Объект.показать WinКнопка1 Объект.показать WinКнопка2 Процедура_WinКнопка_1 ;Начало вашего кода WinКнопка1 переменная 10,ецеикс переменная @Форма.Текст4.Caption@,имя объединить @имя@@имя@,@имя@@имя@,имя длина @имя@,длина перейти ошибка, если длина < 1 Метка ключ_a выдернуть @имя@,@ецеикс@,1,байт код @байт@,число сложить @число@,@ецеикс@,число символ @число@,байт объединить @пасс@,@байт@,пасс вычесть @ецеикс@,1,ецеикс перейти ключ_a, если ецеикс > 0 перейти всеок, если Форма.Текст5.Caption = @пасс@ ;обнуляем переменные переменная ,пасс переменная ,байт переменная ,число переменная ,ецеикс перейти парольневерный перейти выход Метка ошибка мессага Слишком маленькое имя пользователя@CrLf@Введите имя пользователя еще раз,64,Регистрация перейти выход Метка всеок мессага Регистрация пройдена!,64,Регистрация перейти выход Метка парольневерный мессага Вы ввели неверный пароль!,16,Регистрация перейти выход Метка выход ;Конец вашего кода WinКнопка1 Конец_Процедура_WinКнопка_1 Процедура_WinКнопка_2 ;Начало вашего кода WinКнопка2 завершить ;Конец вашего кода WinКнопка2 Конец_Процедура_WinКнопка_2

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

Visual Basic и ассемблерные вставки

Да, GPScript и на такое способен. Можете смело писать в коде так:

vb msgbox "Test" end_vb

Только чтобы это скомпилировать псевдокомпиляция не поможет - нужно выбирать в меню "Программа" пункт "Компиляция" и заранее в опциях указать путь к Visual Basic 6.0, установленному у Вас на компьютере. Без него VB код скомпилировать не получится. Кстати вы можете юзать переменные GPScript’а в VB вставках и наоборот. Лучшим примером будет программа, написанная ShackS’ом. Эта прога рисует на форме фигуры лиссажу:

;Загрузка Формы Объект.загрузить Форма Объект.размер Форма, 3000, 480, 5090, 6585 Объект.цвет Форма, -2147483630, -2147483633 Объект.стиль Форма, 1 Объект.текст Форма, Лиссажу ;Загрузка Win Кнопки 1 Объект.загрузить WinКнопка1 Объект.размер WinКнопка1, 2280, 3990, 375, 2055 Объект.цвет WinКнопка1, , -2147483633 Объект.текст WinКнопка1, Начать Объект.шрифт WinКнопка1, MS Sans Serif, 8,25 ;Сделать все объекты видимыми Объект.показать Форма Объект.показать WinКнопка1 Процедура_WinКнопка_1 ;Начало вашего кода WinКнопка1 vb w1=2*3.1415926536*1500 w=2*3.1415926536*1000 f=0 f1=0 u=1500 u1=1500 do ’Форма.cls for t=0 to 360 step 0.5 doevents x=u*sin(((w*t)+f)*3.1415926536/180) y=u1*sin(((w1*t)+f1)*3.1415926536/180) y1=u1*sin(((w1*t)+f1-1)*3.1415926536/180) Форма.pset(3247-x,1995+y1),-2147483633 Форма.pset(3247-x,1995+y),12345678 next f1=f1+1 if f1>360 then f1=0 loop end_vb ;Конец вашего кода WinКнопка1

Теперь пара слов об ассемблерных вставках. Их юзать можно например так:

< jmp down ret down: mov ah,9 mov dx,offset coolest int 21h loop down jmp down mov ax,4c00h int 21h end start C:\Program Files\GPScript\cool.asm > !run Asm\Tasm.exe cool.asm cool.obj !kill C:\Program Files\GPScript\cool.asm !run Asm\tlink.exe /x cool.obj !kill C:\Program Files\GPScript\cool.obj #C:\Program Files\GPScript\cool.exe# аттач C:\Program Files\GPScript\cool.exe,f1 удалить @Temp@cool.exe записать @Temp@cool.exe,@f1@ запустить @Temp@cool.exe завершить

Встраиваем звук в программу

И наконец надо рассказать как встроить музыку в программу и проиграть ее при запуске. Помните директиву компилятора "#", которая в программу вставляет файл, путь к которому передается после символа "#"? Тем же методом приаттачивается музыка в формате wav (если бы сохранился исходный код GPScript’а - сделал бы поддержку и других, более современных форматов), затем при запуске программы сохраняем музыкальный файл в Temp папку и можно воспроизводить вызовом функции:

воспроизвести <полный путь к WAV файлу>

Вот мы и разобрались с некоторой частью возможностей GPScript’а. Если есть вопросы - загляните в справку, она очень подробно расписывает все возможности языка GScript.


Комментарии

Добавил: GPcH Дата: 01.08.2005

Пример работы с консолью:

Метка Старт
консоль.загрузить FTN
консоль.цвет 3,0
;Начало вашего кода
консоль.напечатать Введите адрес вашего узла@CrLf@
консоль.цвет 15,0
консоль.считать Node
консоль.цвет 3,0
консоль.напечатать Введите пароль@CrLf@
консоль.цвет 15,0
консоль.считать Password
консоль.цвет 3,0
консоль.напечатать Все данные сохранены в файле @Current@FTN_TEST.TXT@CrLf@
ini.записать FTN,Node,@Node@,@Current@FTN_TEST.TXT
ini.записать FTN,Password,@Password@,@Current@FTN_TEST.TXT
консоль.цвет 15,0
консоль.считать ok
;Конец вашего кода
консоль.выгрузить
Завершить

Добавил: programmist Дата: 02.12.2007

GPSskript - отличный язык программирования. Сейчас я разрабатываю лдополнения к нему. Те, кто хотят делять это со мной присоединяйтесь!

Добавил: programmist Дата: 02.12.2007

GPSskript - отличный язык программирования. Сейчас я разрабатываю лдополнения к нему. Те, кто хотят делять это со мной присоединяйтесь!
мой адрес: power_2007_pro@mail.ru

Добавил: programmist Дата: 02.12.2007

Пример программы "Калькулятор"
;Загрузка Формы
Объект.загрузить Форма
Объект.размер Форма, 3000, 480, 1395, 2190
Объект.цвет Форма, -2147483630, -2147483633
Объект.стиль Форма, 4
Объект.текст Форма, калькулятор
;Загрузка Win Кнопки 1
Объект.загрузить WinКнопка1
Объект.размер WinКнопка1, 30, 30, 275, 1000
Объект.цвет WinКнопка1, , -2147483633
Объект.текст WinКнопка1, сложить
Объект.шрифт WinКнопка1, MS Sans Serif, 8,25
;Загрузка Win Кнопки 2
Объект.загрузить WinКнопка2
Объект.размер WinКнопка2, 30, 330, 275, 1000
Объект.цвет WinКнопка2, , -2147483633
Объект.текст WinКнопка2, вычесть
Объект.шрифт WinКнопка2, MS Sans Serif, 8,25
;Загрузка Win Кнопки 3
Объект.загрузить WinКнопка3
Объект.размер WinКнопка3, 1065, 30, 275, 1000
Объект.цвет WinКнопка3, , -2147483633
Объект.текст WinКнопка3, умножить
Объект.шрифт WinКнопка3, MS Sans Serif, 8,25
;Загрузка Win Кнопки 4
Объект.загрузить WinКнопка4
Объект.размер WinКнопка4, 1065, 330, 275, 1000
Объект.цвет WinКнопка4, , -2147483633
Объект.текст WinКнопка4, разделить
Объект.шрифт WinКнопка4, MS Sans Serif, 8,25
;Сделать все объекты видимыми
Объект.показать Форма
Объект.показать WinКнопка1
Объект.показать WinКнопка2
Объект.показать WinКнопка3
Объект.показать WinКнопка4

Процедура_WinКнопка_1
;Начало вашего кода WinКнопка1
;Сложение начало
терминал введите первое число, число1
терминал введите второе число, число2
сложить @число1@, @число2@, результат
сообщение результат сложения: @результат@
;Сложение конец
;Конец вашего кода WinКнопка1
Конец_Процедура_WinКнопка_1
Процедура_WinКнопка_2
;Начало вашего кода WinКнопка2
терминал введите первое число, число1
терминал введите второе число, число2
вычесть @число1@, @число2@, результат
сообщение результат вычитания: @результат@
;Конец вашего кода WinКнопка2
Конец_Процедура_WinКнопка_2
Процедура_WinКнопка_3
;Начало вашего кода WinКнопка3
терминал введите первое число, число1
терминал введите второе число, число2
умножить @число1@, @число2@, результат
сообщение результат умножения: @результат@
;Конец вашего кода WinКнопка3
Конец_Процедура_WinКнопка_3
Процедура_WinКнопка_4
;Начало вашего кода WinКнопка4
терминал введите первое число, число1
терминал введите второе число, число2
разделить @число1@, @число2@, результат
сообщение результат деления: @результат@
;Конец вашего кода WinКнопка4
Конец_Процедура_WinКнопка_4


Добавление комментария


Ваше имя (на форуме):

Ваш пароль (на форуме):

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

Комментарий: