Jump to content
Korean Random
EvilAlex

Создание инсталляторов для модпаков на базе Inno Setup

Recommended Posts

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

[Setup]
Encryption=yes
Password=CheGeVaRa0

[Code]
var 
  str: string; 
  MyArray: array of Char; 

function InitializeSetup(): Boolean; 
begin 
  MyArray := ['A','B','C','D','E','F','G','H','I','J','K','L','M', 
              'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', 
              'a','b','c','d','e','f','g','h','i','j','k','l','m', 
              'n','o','p','q','r','s','t','u','v','w','x','y','z', 
              '1','2','3','4','5','6','7','8','9','0', 
              '!','@','#','$','%','^','&','*','(',')','.']; 
  Result:= True; 
end;

//function CheckPassword(Password: String): Boolean;
//begin
//    WizardForm.PasswordEdit.Text:= 'Der Пароль';
//    WizardForm.PasswordPage.Free;
//    Result:= True;
//end;

procedure CurPageChanged(CurPageID: Integer);
begin
  If CurPageID=wpPassword then
begin
  WizardForm.PasswordEdit.Text:= MyArray[2]+MyArray[33]+MyArray[30]+MyArray[6]+MyArray[30]+MyArray[21]+MyArray[26]+MyArray[17]+MyArray[26]+
                  IntToStr(StrToInt(str) - StrToInt(GetDateTimeString('ss', #0, #0)));
  WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
  str:= GetDateTimeString('ss', #0, #0);
  Result:= True;
end;

 

Вот пример кода, где выудить пароль получится только из байткода. Пароль из "Password=" вписывается в CurPageChanged символами из массива MyArray, а в программу передаётся фэйковый пароль.

Ещё есть вариант вписывать пароль с нестандартными (умляутами) символами, которые в анпакере просто не ввести. Этот вариант самый простой.

Edited by AtotIK
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
Есть модуль шифрования + пароль. У меня есть код, в котором реализован хороший метод защиты от распаковки инсталлятора, но делиться им я вряд-ли буду..

 

вот ты ранее писал на 10 странице....

Кстати код приведенный выше почему-то ошибку выдает

'Скрин ошибки'

12319715.jpg

вот как я сделал и что там не правильно?

'код'

[Setup]
AppName=NewProgram
AppVerName=NewProgram 1.0
AppPublisher=Youre Company
DefaultDirName={pf}\Youre Company\NewProgram
DefaultGroupName=Youre Company\NewProgram
OutputBaseFilename=Setup
Compression=Zip
SolidCompression=No
UninstallDisplayIcon="{app}\"
DiskSpanning=No

ShowLanguageDialog=no
WizardImageStretch=yes
Encryption=yes
Password=CheGeVaRa0

[[Setup]


[Code]
var
  str: string;
  MyArray: array of Char;

function InitializeSetup(): Boolean;
begin
  MyArray := ['A','B','C','D','E','F','G','H','I','J','K','L','M',
              'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
              'a','b','c','d','e','f','g','h','i','j','k','l','m',
              'n','o','p','q','r','s','t','u','v','w','x','y','z',
              '1','2','3','4','5','6','7','8','9','0',
              '!','@','#','$','%','^','&','*','(',')','.'];
  Result:= True;
end;

function CheckPassword(Password: String): Boolean;
begin
    WizardForm.PasswordEdit.Text:= 'Der Пароль';
    WizardForm.PasswordPage.Free;
    Result:= True;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  If CurPageID=wpPassword then
begin
  WizardForm.PasswordEdit.Text:= MyArray[2]+MyArray[33]+MyArray[30]+MyArray[6]+MyArray[30]+MyArray[21]+MyArray[26]+MyArray[17]+MyArray[26]+
                  IntToStr(StrToInt(str) - StrToInt(GetDateTimeString('ss', #0, #0)));
  WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
  str:= GetDateTimeString('ss', #0, #0);
  Result:= True;
end; 

Edited by Nowik1971

Share this post


Link to post

Short link
Share on other sites

Функцию CheckPassword можешь удалить.

приветы) а есть какой нить реальный код чтобы после указанной даты установщик не запускался бы? я тут что есть коды перепробовал  но они если на компе дату перевести уже не работают к сожалению(

Share this post


Link to post

Short link
Share on other sites

Толку от этого кода в расширенной версии нет. Он не работает. Тык!

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

Edited by ЛОМ

Share this post


Link to post

Short link
Share on other sites

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

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

Share this post


Link to post

Short link
Share on other sites

кто подскажет скрипт нового листа с компонентами а то всю голову сломал

Share this post


Link to post

Short link
Share on other sites

кто подскажет скрипт нового листа с компонентами а то всю голову сломал

вот держи

'Скрипт 2 листа с компонентами, но не с файлами как и просил'

[CustomMessages]
CompBatle1 = Прочие моды
CompBatle2 = Оповещение о засвете
CompBatle3 = Replays Manager

CompBatle5 = Синие трупы и белые сбитые гусеницы
CompBatle6 = Круг 15 метров
CompBatle7 = Мод Атас
CompBatle8 = Измененное радиальное меню
CompBatle9 = Мод Тылы
CompBatle10 = Медали во время боя
CompBatle11 = Оповещение перезарядки в чате на кнопку C
CompBatle12 = Декали попадания

CompBatle13 = Озвучка экипажа
CompBatle14 = Duke Nukem
CompBatle15 = Мародёр
CompBatle16 = Радиопереговоры

CompBatle17 = Озвучка 6 чувства
CompBatle18 = Звук хищника + отсчет 10 сек
CompBatle19 = Лампа + отсчет 10 сек
CompBatle20 = Тебе бегом надо валить
CompBatle21 = Первая кровь



[Code]
procedure Components2;
begin
  with ComponentsList2 do
  begin
  AddCheckBox(CustomMessage('CompBatle1'), '', 0, False, True, False, True, nil);
  AddCheckBox(CustomMessage('CompBatle2'), '', 1, False, True, False, True, nil);
  AddCheckBox(CustomMessage('CompBatle3'), '', 1, False, True, False, True, nil);
  AddCheckBox(CustomMessage('CompBatle5'), '', 1, False, True, False, True, nil);
  AddCheckBox(CustomMessage('CompBatle6'), '', 1, False, True, False, True, nil);
  AddCheckBox(CustomMessage('CompBatle7'), '', 1, False, True, False, True, nil);
  //------------------------------------------------------------------------\\
  AddCheckBox(CustomMessage('CompBatle8'), '', 1, False, True, False, True, nil);
  AddCheckBox(CustomMessage('CompBatle9'), '', 1, False, True, False, True, nil);
  AddCheckBox(CustomMessage('CompBatle10'), '', 1, False, True, False, True, nil);
  AddCheckBox(CustomMessage('CompBatle11'), '', 1, False, True, False, True, nil);
  AddCheckBox(CustomMessage('CompBatle12'), '', 1, False, True, False, True, nil);
  //------------------------------------------------------------------------\\
  AddCheckBox(CustomMessage('CompBatle13'), '', 1, False, True, False, True, nil);
  AddRadioButton(CustomMessage('CompBatle14'), '', 2, False, True, nil);
  AddRadioButton(CustomMessage('CompBatle15'), '', 2, False, True, nil);
  AddRadioButton(CustomMessage('CompBatle16'), '', 2, False, True, nil);
  //------------------------------------------------------------------------\\
  AddCheckBox(CustomMessage('CompBatle17'), '', 1, False, True, False, True, nil);
  AddRadioButton(CustomMessage('CompBatle18'), '', 2, False, True, nil);
  AddRadioButton(CustomMessage('CompBatle19'), '', 2, False, True, nil);
  AddRadioButton(CustomMessage('CompBatle20'), '', 2, False, True, nil);
  //------------------------------------------------------------------------\\
  AddCheckBox(CustomMessage('CompBatle21'), '', 1, False, True, False, True, nil)
  //------------------------------------------------------------------------\\
  end;
end;

Function COMP2(Name: String): Boolean;
var
 I: Integer;
begin
Result := False;
for I := 0 to ComponentsList2.ItemCount - 1 do
begin
  if (I <= ComponentsList2.ItemCount) then
  Result := ComponentsList2.Checked[ComponentsList2.Items.IndexOf(Name)];
end;
end;





 

Edited by Nowik1971

Share this post


Link to post

Short link
Share on other sites

ну моды мне не нужны я думаю свои вставлю


чёт я думаю я разогнался а как файлы то брать 


мне как рас нужно с фалами тоесть чтоб был второй лист и там были выбор компонентов то есть модов

Share this post


Link to post

Short link
Share on other sites

держи вот файлы

'файлы к предыдущим компонентам'

[Files]
Source: "моды\3\Оповещение о засвете\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle2}'));
Source: "моды\3\Replays Manager\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle3}'));

Source: "моды\3\Синие трупы и белые сбитые гусеницы\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle5}'));
Source: "моды\3\Круг 15 метров\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle6}'));
Source: "моды\3\Мод Атас\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle7}'));
Source: "моды\3\Измененное радиальное меню\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle8}'));
Source: "моды\3\Мод Тылы\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle9}'));
Source: "моды\3\Медали во время боя\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle10}'));
Source: "моды\3\Оповещение перезарядки в чате на кнопку C\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle11}'));
Source: "моды\3\Декали попадания\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle12}'));

Source: "моды\3\Озвучка\Экипажа\Duke Nukem\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle14}'));
Source: "моды\3\Озвучка\Экипажа\Мародёр\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle15}'));
Source: "моды\3\Озвучка\Экипажа\Радиопереговоры\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle16}'));

Source: "моды\3\Озвучка\6 чувство\звук хищника + отсчет 10 сек\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle18}'));
Source: "моды\3\Озвучка\6 чувство\Лампа + отсчет 10 сек\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle19}'));
Source: "моды\3\Озвучка\6 чувство\тебе бегом надо валить\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle20}'));

Source: "моды\3\Озвучка\Первая кровь\*"; DestDir: "{app}\res_mods\{#Patch}"; Flags: ignoreversion recursesubdirs createallsubdirs;  Check: COMP2(ExpandConstant('{cm:CompBatle21}')); 

Share this post


Link to post

Short link
Share on other sites

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

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

кто умный кто поможет создать новый лист с компонентам и выбором модов 

Share this post


Link to post

Short link
Share on other sites

кто умный кто поможет создать новый лист с компонентам и выбором модов 

умных тут много но они уже редко заходят в этот раздел))) короче мне когда то Ekspoint  помог с этим вопросом. и если я правильно помню то вот так должно быть))) 

 

[Files]
Source: "F:\А ДЛЯ СБОРКИ\ЧИТЫ И МОДЫ\46а Аим Lportii\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMP\46;
Source: "F:\А ДЛЯ СБОРКИ\ЧИТЫ И МОДЫ\47а Aим Bot Ogre Ninja\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMP\47;
Source: "F:\А ДЛЯ СБОРКИ\ЧИТЫ И МОДЫ\48а Аим САЕ 23\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMP\48;
Source: "F:\А ДЛЯ СБОРКИ\ЧИТЫ И МОДЫ\49а панель повреждений_STL1te  Metallist95\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMP\49;
Source: "F:\А ДЛЯ СБОРКИ\ЧИТЫ И МОДЫ\50а панель повреждений_Gambiter\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMP\50;
Source: "F:\А ДЛЯ СБОРКИ\ЧИТЫ И МОДЫ\51а прицел белый\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMP\51;
Source: "F:\А ДЛЯ СБОРКИ\ЧИТЫ И МОДЫ\52а прицел-Jimbo\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMP\52;
Source: "F:\А ДЛЯ СБОРКИ\ЧИТЫ И МОДЫ\24а Оленемер\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMP\24;





 // как тут ниже это так надо прописывать для второй стрницы...
Source: "F:\А ДЛЯ СБОРКИ\ЧИТЫ И МОДЫ\4а Менеджер аккаунтов\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: IsComponentsForm2(1)
Source: "F:\А ДЛЯ СБОРКИ\ЧИТЫ И МОДЫ\12а круг белый по попаданию без засвета\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: IsComponentsForm2(2)




[code]

var
  ComponentsPage2: TWizardPage;
  SelectComponentsLabel2: TNewStaticText;
  ComponentsList2: TNewCheckListBox;

procedure ComponentsForm2;
begin
  ComponentsPage2 := CreateCustomPage(wpSelectComponents, 'ВТОРАЯ СТРАНИЦА ПОСЛЕ КОМПОНЕНТОВ', SetupMessage(msgSelectComponentsDesc));
//========================================================================\\
  SelectComponentsLabel2 := TNewStaticText.Create(WizardForm);
  with SelectComponentsLabel2 do
  begin
    Parent := ComponentsPage2.Surface;
    SetBounds(WizardForm.SelectComponentsLabel.Left, WizardForm.SelectComponentsLabel.Top, WizardForm.SelectComponentsLabel.width, WizardForm.SelectComponentsLabel.height);
    AutoSize := False;
    WordWrap := True;
    Caption := SetupMessage(msgSelectComponentsLabel2);
  end;
//========================================================================\\
  ComponentsList2 := TNewCheckListBox.Create(WizardForm);
  with ComponentsList2 do
  begin
    Parent := ComponentsPage2.Surface;
    SetBounds(WizardForm.ComponentsList.Left, WizardForm.ComponentsList.Top, WizardForm.ComponentsList.width, WizardForm.ComponentsList.height);

    AddCheckBox('ЧИТЫ И МОДЫ', '', 0, False, True, False, True, nil);            //0

    AddCheckBox('Менеджер аккаунтов', '', 1, False, True, False, True, nil); //1
    AddCheckBox('ПОпадание беззасвета', '', 1, False, True, False, True, nil); //2
  end;
end;

function IsComponentsForm2(CompIndex: Integer): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i := 0 to ComponentsList2.ItemCount - 1 do
  begin
    if CompIndex <= (ComponentsList2.ItemCount - 1) then
      Result := ComponentsList2.Checked[CompIndex];
  end;
end;







procedure InitializeWizard();
begin
  RedesignWizardForm;
  ComponentsForm2;

end;
end;






// и удаляешь название модов из секции [Components] а то они будут и на первой и на второй странице показываться))) как то так )) вроде...))) 

 

ша тока проверил у меня все работало. но может если что не так по любому подскажут надеюсь))))

Edited by ЛОМ

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...