DLL How to Protect InnoSetup from Unpacking

BLACKFIRE69

Новичок
* I was searching for a method to prevent InnoSetup from being unpacked by unpacking tools such as Innounp, InnoExtractor, innoextract, etc. I found some interesting things, such as modified versions of InnoSetup, old versions of InnoSetup, etc., and some utilities like InnoSProtect. However, I was unable to find a proper way to prevent unpacking with the latest vanilla version of InnoSetup. That's why I came up with this idea.

* I slightly modified FXPcker.exe, which can now store InnoSetup's encryption password, and we can also retrieve it using FXPckerAPI.dll whenever we want.


* So, what are FXPcker.exe and FXPckrAPI.dll?

Well, FXPckr is a data/resources protection tool created by me for the FMXInno project. It creates a password-protected and encrypted data file (often called 'Setup.dat') from the files that we need to hide from others to prevent theft. We place this Setup.dat file along with the Setup.exe, and using FXPckrAPI.dll, we can extract those files as local files or a stream.

If FXPckrAPI.dll allows extraction of data from the Setup.dat at any time, then anyone with the password can extract files from the Setup.dat file, right?
No, it works differently. Before creating a data file (Setup.dat), FXPckr.exe asks the client app (Setup.exe) from which we intend to extract encrypted files using FXPckrAPI.dll. Once we define this client app (Setup.exe), we have to use the same app to extract the files from the Setup.dat.

You can create any custom client app using FXPckrAPI.dll, but you cannot extract any file from the Setup.dat, and it throws an error message "Unauthorized access" if you try.

That's basically how FXPckr protects data from theft.


* There's one thing: FXPckr.exe has an option called 'Debug Mode', which means if you enable it, the 'FXUnPckrInit' won't validate the client app anymore; it will only validate the password. During the testing stage of our script, we have to compile the script numerous times. This 'Debug Mode' helps us here because if it's off, then each time we compile the script, we have to create a new data file.

So, remember to turn off the 'Debug Mode' and create a new Setup.dat file without Debug Mode enabled before you ship your Setup.exe.



* In the current case, I've modified FXPckr a little bit so we can store InnoSetup's encrypted password inside the Setup.dat and use it as follows to prevent unpacking:

Remember to use the ' noencryption ' flag for ' FXPckrAPI.dll '. Here, I've used the InnoSetup's encryption password as ' krinkels.org ', but you can use anything you want instead.



1.png

2.png

3.png

a.png



x.png

y.png

4.png



* As you saw above, first 'FXUnPckrInit' verifies the correct client app (as defined in FXPckr.exe) and the encrypted password. If successful, we can use the 'FXUnPckrGetInnoEncryptedPasscode' function to retrieve InnoSetup's encrypted password.

In case 'FXUnPckrInit' fails, 'FXUnPckrGetInnoEncryptedPasscode' will output a string like 'FXPckr_Invalid_Str: 0x4B7C', meaning 'FXUnPckrInit' has failed.


* Please read the attached Readme files first; they provide step-by-step instructions on how to use this.


* I know this may not be the finest solution because we have to have Setup.dat along with Setup.exe every time, which is a drawback for single executable files. However, you can try this with installers like 'Repack Installer' that come with multiple files instead of a single executable file.


Note:

*
If someone knows a better way to prevent InnoSetup from unpacking, let me know; I'd like to hear about it.

* I'm referring to the latest vanilla version of InnoSetup. As mentioned previously, modified versions, old versions, and some utilities like 'InnoSProtect' don't work for me.
 

Вложения

JEKE24

Новичок
Возможно ли запросить у автора _FXPcker добавление поддержки CLI (очень надо) ?
 

Crachlow

Старожил
* Я искал способ предотвратить распаковку InnoSetup с помощью инструментов распаковки, таких как Innounp, InnoExtractor, innoextract и т. д. Я нашел несколько интересных вещей, таких как модифицированные версии InnoSetup, старые версии InnoSetup и т.д., а также некоторые утилиты, такие как InnoSProtect. Тем не менее, я не смог найти надлежащий способ предотвратить распаковку с помощью последней ванильной версии InnoSetup. Вот почему я придумал эту идею.

* Я немного изменил FXPcker.exe, который теперь может хранить пароль шифрования InnoSetup, и мы также можем получить его с помощью FXPckerAPI.dll, когда захотим.


* Итак, что такое FXPcker.exe и FXPckrAPI.dll?

FXPckr - это инструмент защиты данных/ресурсов, созданный мной для проекта FMXInno. Он создает защищенный паролем и зашифрованный файл данных (часто называемый «Setup.dat») из файлов, которые нам нужно скрыть от других, чтобы предотвратить кражу. Мы помещаем этот Setup.dat файл вместе с Setup.exe, и с помощью FXPckrAPI.dll мы можем извлечь эти файлы как локальные файлы или поток.

Если FXPckrAPI.dll разрешает извлечение данных из Setup.dat в любое время, то любой, у кого есть пароль, может извлечь файлы из Setup.dat файла, верно?
Нет, это работает по-другому. Перед созданием файла данных (Setup.dat) FXPckr.exe запрашивает клиентское приложение (Setup.exe), из которого мы собираемся извлечь зашифрованные файлы с помощью FXPckrAPI.dll. После того, как мы определим это клиентское приложение (Setup.exe), мы должны использовать то же самое приложение для извлечения файлов из Setup.dat.

Вы можете создать любое пользовательское клиентское приложение с помощью FXPckrAPI.dll, но вы не можете извлечь какой-либо файл из Setup.dat, и при попытке будет выдано сообщение об ошибке "Несанкционированный доступ".

По сути, именно так FXPckr защищает данные от кражи.


* Есть одна вещь: у FXPckr.exe есть опция под названием «Режим отладки», что означает, что если вы включите ее, «FXUnPckrInit» больше не будет проверять клиентское приложение; Он только проверит пароль. На этапе тестирования нашего скрипта нам приходится компилировать скрипт много раз. Этот 'Debug Mode' помогает нам в этом, потому что если он выключен, то каждый раз, когда мы компилируем скрипт, нам приходится создавать новый файл данных.

Поэтому не забудьте выключить «Режим отладки» и создать новый Setup.dat файл без включенного режима отладки перед отправкой Setup.exe.



* В данном случае я немного модифицировал FXPckr, чтобы мы могли хранить зашифрованный пароль InnoSetup внутри Setup.dat и использовать его следующим образом, чтобы предотвратить распаковку:

Не забудьте использовать флаг ' noencryption ' для ' FXPckrAPI.dll '. Здесь я использовал пароль шифрования InnoSetup как 'krinkels.org', но вместо него вы можете использовать все, что захотите.



Посмотреть вложение 8542

Посмотреть вложение 8543

Посмотреть вложение 8544

Посмотреть вложение 8546



Посмотреть вложение 8547

Посмотреть вложение 8548

Посмотреть вложение 8549



* Как вы видели выше, сначала FXUnPckrInit проверяет правильное клиентское приложение (как определено в FXPckr.exe) и зашифрованный пароль. В случае успеха мы можем использовать функцию «FXUnPckrGetInnoEncryptedPasscode» для получения зашифрованного пароля InnoSetup.

В случае сбоя 'FXUnPckrInit', 'FXUnPckrGetInnoEncryptedPasscode' выведет строку вида 'FXPckr_Invalid_Str: 0x4B7C', означающую, что 'FXUnPckrInit' не удалось.


* Пожалуйста, сначала прочтите прилагаемые файлы Readme; Они предоставляют пошаговые инструкции о том, как этим пользоваться.


* Я знаю, что это может быть не лучшим решением, потому что нам приходится каждый раз иметь Setup.dat вместе с Setup.exe, что является недостатком для одиночных исполняемых файлов. Тем не менее, вы можете попробовать это с помощью таких установщиков, как «Repack Installer», которые поставляются с несколькими файлами вместо одного исполняемого файла.


Заметка:

*
Если кто-то знает лучший способ предотвратить распаковку InnoSetup, дайте мне знать; Хотелось бы услышать об этом.

* Я имею в виду последнюю ванильную версию InnoSetup. Как упоминалось ранее, измененные версии, старые версии и некоторые утилиты, такие как 'InnoSProtect', у меня не работают.
Alas. @BLACKFIRE69. Does it show up in Uninstall.dat? I mean passwords?
 

Ka3BuiL

Мимокрокодил
Thanks @BLACKFIRE69 for your valuable post, I'm new to the Inno Setup realm & this came just in time :clapping:
 
Последнее редактирование:

BLACKFIRE69

Новичок
Is it possible to ask the author _FXPcker to add support for CL I ( very necessary )?

@JEKE24
sorry, i forgot about this.

1. here's the version of FXPcker that supports command-line parameters.

Форматирование (BB-код):
USAGE:
  FXPckr.exe <required_params> <file1> <file2> <file3> ...

Форматирование (BB-код):
PARAMS:
[--][/]exe[=][:][ ]<string>          or   [-][/]e     : Specify the Setup name.
[--][/]out[=][:][ ]<string>          or   [-][/]o     : Specify the Output name. [Default = .\Setup.dat]
[--][/]pwd[=][:][ ]<string>          or   [-][/]p     : Specify the Password.
[--][/]isencpwd[=][:][ ]<string>     or   [-][/]i     : Specify the InnoSetup encrypted password.
[--][/]maxcomp                       or   [-][/]m     : Enable maximum compression. [Default = False]
[--][/]debug                         or   [-][/]d     : Enable debug mode. [Default = False]
[--][/]autoclose                     or   [-][/]a     : Close automatically when done. [Default = False]

Форматирование (BB-код):
EXAMPLE:
FXPckr.exe    --exe:".\Setup.exe"   /out ".\Setup.dat"   -p="123test123"   /m   ".\Res\*.*"    ".\music.mp3"    ".\ Img?.png"   


[*] It also supports masked files.
Форматирование (BB-код):
.\MyImages\*
.\MyImages\Img??.png

[ * ] it will accept parameters in any of the following formats:
Форматирование (BB-код):
    1. /Exe=.\Setup.exe   || --Exe=.\Setup.exe   || /s=.\Setup.exe   || -s=.\Setup.exe
    2. /Exe=".\Setup.exe" || --Exe=".\Setup.exe" || /s=".\Setup.exe" || -s=".\Setup.exe"
    3. /Exe='.\Setup.exe' || --Exe='.\Setup.exe' || /s='.\Setup.exe' || -s='.\Setup.exe'

    4. /Exe:.\Setup.exe   || --Exe:.\Setup.exe   || /s:.\Setup.exe   || -s:.\Setup.exe
    5. /Exe:".\Setup.exe" || --Exe:".\Setup.exe" || /s:".\Setup.exe" || -s:".\Setup.exe"
    6. /Exe:'.\Setup.exe' || --Exe:'.\Setup.exe' || /s:'.\Setup.exe' || -s:'.\Setup.exe'

    7. /Exe .\Setup.exe   || --Exe .\Setup.exe   || /s .\Setup.exe   || -s .\Setup.exe
    8. /Exe ".\Setup.exe" || --Exe ".\Setup.exe" || /s ".\Setup.exe" || -s ".\Setup.exe"
    9. /Exe '.\Setup.exe' || --Exe '.\Setup.exe' || /s '.\Setup.exe' || -s '.\Setup.exe'


2. also, i've added a pure CLI version of FXPcker (FXPckr_CLI.exe) for convenient use.


0.png

1.png

2.png

3.png
 

Вложения

JEKE24

Новичок
@JEKE24
sorry, i forgot about this.

1. here's the version of FXPcker that supports command-line parameters.

Форматирование (BB-код):
USAGE:
  FXPckr.exe <required_params> <file1> <file2> <file3> ...

Форматирование (BB-код):
PARAMS:
[--][/]exe[=][:][ ]<string>          or   [-][/]e     : Specify the Setup name.
[--][/]out[=][:][ ]<string>          or   [-][/]o     : Specify the Output name. [Default = .\Setup.dat]
[--][/]pwd[=][:][ ]<string>          or   [-][/]p     : Specify the Password.
[--][/]isencpwd[=][:][ ]<string>     or   [-][/]i     : Specify the InnoSetup encrypted password.
[--][/]maxcomp                       or   [-][/]m     : Enable maximum compression. [Default = False]
[--][/]debug                         or   [-][/]d     : Enable debug mode. [Default = False]
[--][/]autoclose                     or   [-][/]a     : Close automatically when done. [Default = False]

Форматирование (BB-код):
EXAMPLE:
FXPckr.exe    --exe:".\Setup.exe"   /out ".\Setup.dat"   -p="123test123"   /m   ".\Res\*.*"    ".\music.mp3"    ".\ Img?.png"   


[*] It also supports masked files.
Форматирование (BB-код):
.\MyImages\*
.\MyImages\Img??.png

[ * ] it will accept parameters in any of the following formats:
Форматирование (BB-код):
    1. /Exe=.\Setup.exe   || --Exe=.\Setup.exe   || /s=.\Setup.exe   || -s=.\Setup.exe
    2. /Exe=".\Setup.exe" || --Exe=".\Setup.exe" || /s=".\Setup.exe" || -s=".\Setup.exe"
    3. /Exe='.\Setup.exe' || --Exe='.\Setup.exe' || /s='.\Setup.exe' || -s='.\Setup.exe'

    4. /Exe:.\Setup.exe   || --Exe:.\Setup.exe   || /s:.\Setup.exe   || -s:.\Setup.exe
    5. /Exe:".\Setup.exe" || --Exe:".\Setup.exe" || /s:".\Setup.exe" || -s:".\Setup.exe"
    6. /Exe:'.\Setup.exe' || --Exe:'.\Setup.exe' || /s:'.\Setup.exe' || -s:'.\Setup.exe'

    7. /Exe .\Setup.exe   || --Exe .\Setup.exe   || /s .\Setup.exe   || -s .\Setup.exe
    8. /Exe ".\Setup.exe" || --Exe ".\Setup.exe" || /s ".\Setup.exe" || -s ".\Setup.exe"
    9. /Exe '.\Setup.exe' || --Exe '.\Setup.exe' || /s '.\Setup.exe' || -s '.\Setup.exe'


2. also, i've added a pure CLI version of FXPcker (FXPckr_CLI.exe) for convenient use.


Посмотреть вложение 8660

Посмотреть вложение 8661

Посмотреть вложение 8662

Посмотреть вложение 8663
Спасибо , до вашего обновления тупо пытался: _FXPacker.exe /help , /? , _FXPacker.exe /man :D
 
Сверху