AtotIK 580 #366405 Posted November 19, 2016 (edited) Пароль хранится в байткоде, но его можно оттуда выудить (лично это делал). Повторюсь, шифровать инсталлер нет смысла. Вся информация выуживается либо установкой, либо анпекером. Вторым можно распаковать чисто байткод и поковыряться в нём. [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 November 20, 2016 by AtotIK 1 Quote Share this post Link to post Short link Share on other sites
Nowik1971 2 #366426 Posted November 19, 2016 (edited) Есть модуль шифрования + пароль. У меня есть код, в котором реализован хороший метод защиты от распаковки инсталлятора, но делиться им я вряд-ли буду.. вот ты ранее писал на 10 странице.... Кстати код приведенный выше почему-то ошибку выдает 'Скрин ошибки' вот как я сделал и что там не правильно? 'код' [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 November 19, 2016 by Nowik1971 Quote Share this post Link to post Short link Share on other sites
AtotIK 580 #366437 Posted November 19, 2016 Функцию CheckPassword можешь удалить. 1 Quote Share this post Link to post Short link Share on other sites
sergy2010 24 #366540 Posted November 20, 2016 здарова ЛОМ Quote Share this post Link to post Short link Share on other sites
Lom 46 #366541 Posted November 20, 2016 здарова ЛОМ Дарова) Quote Share this post Link to post Short link Share on other sites
Lom 46 #366560 Posted November 21, 2016 Функцию CheckPassword можешь удалить. приветы) а есть какой нить реальный код чтобы после указанной даты установщик не запускался бы? я тут что есть коды перепробовал но они если на компе дату перевести уже не работают к сожалению( Quote Share this post Link to post Short link Share on other sites
AtotIK 580 #366569 Posted November 21, 2016 Толку от этого кода в расширенной версии нет. Он не работает. Тык! 1 Quote Share this post Link to post Short link Share on other sites
Lom 46 #366583 Posted November 21, 2016 (edited) Толку от этого кода в расширенной версии нет. Он не работает. Тык! может я че не так понял но вроде это код чтобы пароль на архив ставить)) а я имел ввиду код чтобы после указанной даты установщик выдавал сообщение типа " срок годности установщика истек " ))) я те что тут видел в теме все перепробовал но если на компе дату поменять то уже установщик продолжает работу( Edited November 21, 2016 by ЛОМ Quote Share this post Link to post Short link Share on other sites
Nowik1971 2 #366587 Posted November 21, 2016 может я че не так понял но вроде это код чтобы пароль на архив ставить)) а я имел ввиду код чтобы после указанной даты установщик выдавал сообщение типа " срок годности установщика истек " ))) я те что тут видел в теме все перепробовал но если на компе дату поменять то уже установщик продолжает работу( Наверное в реестр надо прописывать для сравнения дату установки или чтобы на серваке где-то файл проверки лежал и сравнивал, но тогда нужен инет постоянно. Я так предполагаю, сам этим не замарачивался... пока не нужно... да и времени нет... Quote Share this post Link to post Short link Share on other sites
sergy2010 24 #366689 Posted November 22, 2016 кто подскажет скрипт нового листа с компонентами а то всю голову сломал Quote Share this post Link to post Short link Share on other sites
Nowik1971 2 #366692 Posted November 22, 2016 (edited) кто подскажет скрипт нового листа с компонентами а то всю голову сломал вот держи 'Скрипт 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 November 22, 2016 by Nowik1971 Quote Share this post Link to post Short link Share on other sites
sergy2010 24 #366693 Posted November 22, 2016 ну моды мне не нужны я думаю свои вставлю чёт я думаю я разогнался а как файлы то брать мне как рас нужно с фалами тоесть чтоб был второй лист и там были выбор компонентов то есть модов Quote Share this post Link to post Short link Share on other sites
Nowik1971 2 #366695 Posted November 22, 2016 держи вот файлы 'файлы к предыдущим компонентам' [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}')); Quote Share this post Link to post Short link Share on other sites
KIBORG 17 #366715 Posted November 22, 2016 привет всем, как добавить что бы звук играл при нажатии на мод, в инсталлятре послушать? 1 Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #366753 Posted November 22, 2016 (edited) привет всем, как добавить что бы звук играл при нажатии на мод, в инсталлятре послушать? Озучивание компонентов Edited November 22, 2016 by night_dragon_on 1 Quote Share this post Link to post Short link Share on other sites
KIBORG 17 #366755 Posted November 22, 2016 Озучивание компонентов Форум Krinkels.org - Ошибка ,Запрашиваемая страница не найдена. Quote Share this post Link to post Short link Share on other sites
Xotabych 337 #366757 Posted November 22, 2016 Вот тут. 1 Quote Share this post Link to post Short link Share on other sites
KIBORG 17 #366761 Posted November 22, 2016 Вот тут. спасибо, щас покопаюсь Quote Share this post Link to post Short link Share on other sites
sergy2010 24 #366763 Posted November 22, 2016 кто умный кто поможет создать новый лист с компонентам и выбором модов Quote Share this post Link to post Short link Share on other sites
Lom 46 #366786 Posted November 22, 2016 (edited) кто умный кто поможет создать новый лист с компонентам и выбором модов умных тут много но они уже редко заходят в этот раздел))) короче мне когда то 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 November 22, 2016 by ЛОМ Quote Share this post Link to post Short link Share on other sites