ProtEXE v3.11 - EXE/COM encryption/validation/protection Copyright (c) 1995-1997 by Tom Torfs, all rights reserved -= MANUAL =- 0.1 Table of contents -=-=-=-=-=-=-=-=-=-=- 0.1 Table of contents 1.1 Overview 1.2 Reasons for using ProtEXE 2.1 Commandline usage 2.2 Configuration file 2.3 Interactive shell 3.1 ProtEXE operation notes 3.2 Files that shouldn't be protected with ProtEXE 3.3 ProtEXE and executable compressors 3.4 ProtEXE and virus-scanners 3.5 ProtEXE and other operating systems & multitaskers 4.1 Verifying the registration information 4.2 Testing the CRC failed message 5.1 Reasons for registering ProtEXE 5.2 How to register ProtEXE 6.1 Contacting the author 6.2 Where to find the most recent version of ProtEXE 7.1 Errors, warnings & errorlevels 8.1 Credits 9.1 Disclaimer 1.1 Overview -=-=-=-=-=-= ProtEXE is a programmer's tool that protects your DOS executables (EXE & COM) from tampering and other corruption in three ways: a) the code and data are encrypted b) via a CRC any changes in the code and/or data and optionally in the extra data (overlays etc.) are detected immediately c) anti-debugging, anti-disassembling and anti-unpacking techniques stop crackers from stepping through your programs with a debugger or reverse-engineering them with a disassembler 1.2 Reasons for using ProtEXE -=-=-=-=-=-=-=-=-=-=-=-=-=-=- If you're a programmer, you won't like it when some kiddie changes your precious programs' output into some useless rubbish, or changes your name by his/hers, or ... You wouldn't like it either if some cracker broke your programs' registration key routine or copy protection, or something like that. You would even like it less if someone changed your program into a logic bomb or virus. Just imagine what all this could do to your reputation as a programmer. That's why programs like ProtEXE are there. Now why should you use ProtEXE instead of some other program that does basically the same job ? Because: - ProtEXE is secure: lots of anti-debugging techniques and automatic polymorphic self-encryption and decryption stop debuggers and disassemblers from examining the decryption algorithm; anti-unpacking tricks stop automated unpacking programs from removing the protection; one of the more advanced anti-unpacking tricks is the tie option {+}, another advanced security feature is the runtime data decryption system for C/C++, Pascal and assembly language {+} - ProtEXE is fast: the decryption and CRC validation take so little time that you won't see the difference between the original and the protected version of a program - ProtEXE protected EXE and COM files require only a little bit more memory and disk space than the unprotected versions; this space is well invested since it significantly enhances your program's security - ProtEXE can automatically call your favorite executable compressor to make the executables more compact (a freely usable executable compressor, ComprEXE, is included; see COMPREXE.DOC for more details) - ProtEXE has the ability to copy any extra data from the source file to the target file (like some overlays); it can also force overlaid programs to load their overlays from the new position, allowing to protect some programs that would otherwise be impossible to protect/compress - ProtEXE can protect the DOS part of 'new executables', such as Windows or OS/2 executables - ProtEXE can CRC check the overlays and other extra data {+} - ProtEXE can retain all the additional information in the EXE header and can optionally fool the protected program into thinking the header hasn't changed at all - ProtEXE can include additional information (e.g. copyright info) in the header of the EXE file - ProtEXE can leave certain information in the beginning of the EXE file (before CS:IP entry point) unencrypted; this is especially handy for protecting device driver-EXEs etc. - ProtEXE can protect programs that stay resident (TSRs) (although some of the more advanced features will be disabled) - ProtEXE has the ability to replace the message that's displayed when the CRC fails by your own text {+} - ProtEXE can optionally display a banner text before the program gets run (useful for programs that take long to initialize etc.); after this banner ProtEXE can optionally wait for a keypress, echo the key pressed and/or abort by pressing ESC - ProtEXE can optionally password-protect the executables, with a customizable prompt and error message - ProtEXE has a comfortable interactive shell which allows you to use it without having to type long commandlines - ProtEXE can read often used options from a configuration file and change & save these options from the interactive shell - ProtEXE displays statistics about the memory usage etc. of the original, compressed (optional) and protected program - ProtEXE is inexpensive: see ORDER.FRM for detailed pricing - Once you purchased the registered or commercial version of ProtEXE, you may protect as many programs as you like with it, there are no royalties 2.1 Commandline usage -=-=-=-=-=-=-=-=-=-=- PROTEXE [.EXE|.COM] [[.EXE|.COM]] [-c[]] [-m] [-b] [-p[,,]] [-t[]] [-s] [-r] [-k] [-o] [-e[k][o][c]] [-h] [-f] [-d] [-i] * Command line basics * is the name of the executable to protect. is the name of the protected executable. If you omit , will be replaced and the original file will be stored as .OLD (unless you use option -o). If no extension is provided, .EXE or .COM is automatically appended. You can specify multiple options on the command line to customize ProtEXE's behaviour. Note that for all options you can use the / switch character instead of the - character if you prefer. If an option is followed by - (e.g. -o-) a previous setting (e.g. from the configuration file) is overridden. You can also override options which take a filename or other parameter, e.g. -m or -p. An overview of the command line options can be displayed by putting the parameter /? (or -?) on the commandline. You can put often used options in the configuration file (see chapter "Configuration file"). If you specify no parameters on the commandline, the interactive shell is started instead (see chapter "Interactive shell"). All options marked with {+} are available in the registered and commercial versions only. * General options * [-c[]] With option -c you can call an executable compressor before protecting the EXE file. The actual compressor corresponding to the id is configured in the file PACKERS.PTX (see chapter "Structure of PACKERS.PTX" for more information). If no id is specified, the first compressor in the configuration file will be used. By default the following compressors are supported: c COMPREXE (default, included in archive) l LZEXE p PKLITE pc PKLITE commercial version d DIET cp COMPACK t TINYPROG u UCEXE w WWPACK x XPACK Using an executable compressor makes the executable smaller and adds some additional protection. There are several advantages to integrating them in ProtEXE: not only that you can do everything with one command line, but also that ProtEXE can not only calculate statistics relative to the intermediate compressed file but also to the original uncompressed file. Furthermore this method allows the use of the tie and data encryption options. [-m] {+} is the name of the file which is displayed when the CRC fails. This file may not be larger than 4096 bytes. The default message is: CRC failed -> executable has been corrupted In the unregistered version, preceded by the ProtEXE version string. I would suggest you always use a message file, which clearly explains what has happened to the user of your program and what he/she should do about it. [-b] is the name of the file that should be displayed before running the program. This file is also limited to 4096 bytes. You can put the following special codes as the last character in the bannerfile: (there may be nothing after this, including spaces) \x01 (Ctrl-A) Wait for a keypress w/o echo, pressing ESC aborts \x02 (Ctrl-B) Wait for a keypress w/o echo, no abort possible \x03 (Ctrl-C) Wait for a keypress with echo, pressing ESC aborts \x04 (Ctrl-D) Wait for a keypress with echo, no abort possible \x05 (Ctrl-E) Wait for a keypress with echo & CR/LF, pressing ESC aborts \x06 (Ctrl-F) Wait for a keypress with echo & CR/LF, no abort possible If this control code is followed by a CR/LF, that CR/LF is stripped off. This allows you to create a bannerfile with a prompt on the same line using a text editor which forces the file to be terminated by a CR/LF. In the unregistered version, the ProtEXE version string is inserted at the beginning of the banner. [-p] Every time the program is run, will have to be typed in. If the entered password is incorrect, the program will simply abort with an error. Spaces must be replaced by underscores. Use \ to quote the next character (\" for double quote, \, for comma and \\ to force a backslash). The password is case sensitive, so "PASSWORD" is not the same as "password" or "Password". The password itself isn't stored anywhere in the executable, not even in encrypted form. One-way functions are applied on it and those are compared against the expected values. You can also specify password prompt and password error message files after the password, separated by commas. Note that the prompt file should not be terminated with a newline if you wish to have the input on the same line as the prompt. The default password prompt is: "Enter password:". The default password error message is "Invalid password". In the unregistered version the ProtEXE version string will be inserted in front of the password prompt. NOTE: using the -p option also increases the startup stack size the protected executable will have by 80 bytes (unless option -ec is also used, see further). This does not affect the program's stack. [-t[]] {+} This option ties the decryption module and the program together, so that even if a cracker would succeed in unpacking the executable, it would never work. When using the -t option, ProtEXE does a test run of the program to analyze it. This test run should be representative for general program use. If such a representative run requires certain command line parameters, you should specify them after the -t option. Spaces must be replaced by underscores. Use \_ to force an underscore, \" to force a double quote and \\ to force a backslash. The -t option will only be effective when applied directly on the uncompressed, unencrypted executable. Do not use an executable compressor before running ProtEXE -t, because otherwise only the compressor code would be tied to the decryption module, not the program itself. You should instead use the -c option if you wish to both compress and tie the executable. The number of ties is limited to 64. If no ties are possible, the -t option is ignored. If the number of ties is less than 5, the executable is probably already protected/compressed, unless it is a very small executable. If you use this option, you should test your executable *carefully* before assuming it works; not all executables like the tie option. The -t option is disabled when you use -r to protect a TSR program. [-s] {+} In the registered and commercial versions of ProtEXE, you can use the external PTXCrypt programming libraries for C/C++, Pascal and assembly language. These libraries can be extracted using PTXCRYPT.EXE if you have a valid registration key. Once you registered, these libraries can freely be used to encrypt/decrypt your data (using a 64-bit XOR encryption, thus not subject to US export restrictions) via a randomly chosen key which is provided by the ProtEXE runtime decryption module, effectively making the data unaccessible without that protection module. You can also specify a user defined 32-bit rol-value to 'personalize' the encryption system. It is highly recommended to use a unique value for all your programs, as this significantly enhances their security. This 32-bit rol-value should be passed in hexadecimal notation (8 digits from 0..9 and A..F) after the -s parameter. [-r] This option allows ProtEXE to protect programs that stay resident in memory (commonly known as TSR programs). This option disables some of the advanced features and also reduces the security of the protected executable, so you should only use it when absolutely necessary. In some (rare) cases, using option -r may be required to protect a non-TSR program, too. It's always worth a try, when your program refuses to work after protection. The following options are disabled when using -r: -t, -eo, -f. [-k] This option tells ProtEXE to leave the original code 100% intact. This may be necessary when the program performs some sort of self-check. If you do not use option -k, ProtEXE may make some minor modifications to the code to enhance the security. [-o] If option -o is given, the original file will be deleted instead of renamed to .OLD. Using this option is not recommended. This option is ignored if an output file is specified. * EXE-only options * [-e] EXE files contain the length of actual code/data in their header. Sometimes the EXE file contains data after this, which is not loaded when the program is run, but which might be read separately afterwards (overlays). This may also be debug info, used by a symbolic debugger (such as Turbo Debugger), but not required by the program itself. It may also be the 'new executable' part for Windows, OS/2, ... executables. If option -e is given, any extra data in an EXE-file is simply copied into the target file, instead of being stripped off. This doesn't guarantee that the extra data is still useful after the protection. If you get the 'stripping extra data' warning and the protected program doesn't work, you should try using this option. [-ek] If the program has overlays and it doesn't work with option -e, there is a chance the overlay positions are hardcoded in the program. In that case try using option -ek. This forces the extra data to be kept at the same position as in the original file. The -ek option is also required to protect most types of 'new executables' (e.g. Windows or OS/2 executables). However, it will usually only work with programs that have an independant DOS part (not the typical DOS stub of 'This program cannot run in a DOS session' or something like that), for the reason below. The -ek option requires the protected code to be smaller than or equal to the unprotected version. If that isn't the case, ProtEXE shows a warning and the extra data will be relocated anyway. In that case, you should use the -c option to compress the code first. In fact, this will usually be necessary to use the -ek option. If the compression fails or isn't significant enough, there's not much more you can do. [-eo] An alternative to the -ek option for programs that hardcode their overlay positions, is the -eo option. This option forces the program to read the overlays from the new position. NOTE: this option only works for handle file I/O functions. FCBs are not supported, as they are hardly ever used for file I/O anymore. Some programs use an overlay system that is incompatible with ProtEXE -eo. You should try using option -ek to protect these instead. This does not work for 'new executables', only for plain DOS programs. The -eo option is disabled when you use -r to protect a TSR program. The -eo option is ignored if the -ek option is also used (no need to relocate overlays if you keep them at the same position). [-ec] {+} If you add the letter c after the option -e, the overlays will also be CRC checked every time you run the program. NOTE: using the -ec option also increases the startup stack size the protected executable will have by 512 bytes. This does not affect the program's stack. You can combine the -ek/-eo and -ec options into -ekc/-eoc or -eck/-eco. [-h] Option -h disables packing the header. All additional information in the EXE header will be copied to the target file. Using this option can allow some otherwise unprotectable executables to be protected. [-f] In some (rare) cases, using option -h is not enough, because the program expects the exact same header to be found (including the memory paragraphs etc. fields). This option fakes the old header to be presented to the program if it tries to read its own header. However, if the program depends on these fields having certain values other than as a kind of self-check, there is a chance it will not function properly after protection. NOTE: this option only works for handle file I/O functions. FCBs are not supported, as they are hardly ever used for file I/O anymore. The -f option is disabled when you use -r to protect a TSR program. [-d] Option -d leaves all code before the CS:IP entry point in the EXE file unencrypted. It is obvious that you should only use this option if really necessary. An example where this option is necessary is to protect EXE files that are in fact device drivers (such as SETVER.EXE, EMM386.EXE etc.). But keep in mind that all the actual device driver code (= before CS:IP entry point) will remain unencrypted. Using the -d option is not a guarantee at all that the device driver will still be usable after the protection. [-i] is the name of the file containing the text that is to be included in the header of the EXE file (e.g. copyright info). This file is limited to 16384 bytes. If you begin this file with \x1B[2J and end it with \x1A, you can display the text using TYPE . 2.2 Configuration file -=-=-=-=-=-=-=-=-=-=-= The configuration file is named CONFIG.PTX and must be in the same directory as PROTEXE.EXE or in any directory of the PATH. The file should contain one commandline option per line. The help option (-?) and filenames to protect are not allowed. Lines beginning with ; (comments) and blank lines are ignored. An option specified in the configuration file can always be overridden on the commandline (see "Commandline usage"). You can also create a configuration file from within the interactive shell (see chapter "Interactive shell"). 2.3 Interactive shell -=-=-=-=-=-=-=-=-=-=- When you start ProtEXE without parameters, the interactive shell is started. In this shell you can browse through your directories and disks and select any executables you wish to protect. If you move the lightbar over an executable and press Enter, that file will be protected. You will be asked whether you want to use the same file as targetfile, or a different file. Then the normal, non- interactive part of ProtEXE will be spawned with the correct settings. After finishing it waits for a keypress (to allow you to examine the statistics or a possible error message), and then returns to the shell. You can also customize the options and optionally save them to disk. You can switch between the files and the options with the left & right arrow keys. You can change an option by moving the lightbar over it and pressing Enter. Press F1 for a quick help screen about the used keys. Just like in the commandline mode, the registered/commercial-only options are disabled in the unregistered evaluation version. 2.4 Structure of PACKERS.PTX -=-=-=-=-=-=-=-=-=-=-=-=-=-= The file PACKERS.PTX must be in the same directory as PROTEXE.EXE or in any directory of the PATH. Any non-blank line in PACKERS.PTX that does not begin with a semicolon (comment), has the following structure: (different fields are separated by at least one space, all fields are case insensitive except the commandline) is a short abbreviation to identify the compressor. It must be passed on the commandline after -c (see the chapter "How to use ProtEXE" for more information). is Y or N depending on wether the compressor supports EXEs. is Y or N depending on wether the compressor supports COMs. is either - or the extension of the backup file created by the compressor. It will be cleaned up by ProtEXE automatically. is the commandline to execute when calling the compressor. It is executed the same way as if you would type it in from the DOS command prompt, so you don't need to specify a full path and extension of the compressor program, as long as it is somewhere in the PATH or in the current directory. You can also use the macros %F and %T in the commandline. %F expands to the filename of the program being compressed, and %T (optionally) expands to the filename of the target program. If you don't specify %T, ProtEXE will assume the source and target files are the same. See the default PACKERS.PTX for an example. 3.1 ProtEXE operation notes -=-=-=-=-=-=-=-=-=-=-=-=-=- ProtEXE tags a little code module of its own to the program. That module decrypts the program in memory, performs all necessary segment relocations, restores the stack etc., and then jumps to the original entry point. That's the basic system in a nutshell. In practice, the code module does more, such as CRC-checking, password-verifying, anti-debugging and anti-unpacking techniques, etc. Different ProtEXE features execute in the following order: * load image CRC check * overlay CRC check (optional) * registration info * banner (optional) * password (optional) It is possible to use ProtEXE multiple times on a program, also with different combinations of options. However, doing so doesn't make much sense, as the program would only get bigger (and slightly slower, especially after multiple layers, and even more so if overlay crc checking is turned on) with not much improvement in security. If someone would be capable of unpacking one layer of ProtEXE, there is no reason why he/she couldn't unpack two or more. 3.2 Files that shouldn't be protected with ProtEXE -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= ProtEXE can essentially only protect DOS executables. If you try to protect a new executable like those for Windows or OS/2 and most DOS extenders (PharLap, DOS/4GW,...) (protected mode programs), ProtEXE will give a warning and only protect the DOS part. See the notes on option -ek and warning W07 for more details. To protect programs that are in fact device drivers, like SETVER.EXE, EMM386.EXE, etc. you should use the -d option. This is still no guarantee the device driver will still function correctly after the protection, but without it it will certainly not work; ProtEXE will give a warning if you try to protect such an executable without the -d option. COM files may not be larger than approx. 60-62K. Otherwise they can't be protected by ProtEXE, because the protected COM would exceed 64K. COM files smaller than 4 bytes can't be protected, either. In both cases, you should convert them to an EXE file using the included COM2EXE utility. EXE files with overlays in the EXE-file will require the use of the -e option with ProtEXE. If the protected executable won't function, you should try using options -ek, -eo, -h, -f and/or -d. Please read the information in the chapter "Commandline usage" concerning these options first. Files that read/write data or code directly to their images on disk won't work with ProtEXE (or with any file compressor). Note that this does not apply to overlays. A program is free to write to its overlays, unless you have protected the program with option -ec of course. Programs that spawn other programs (e.g. DOS shell) work fine with ProtEXE. Terminate & stay resident programs (TSRs) also work, but require the use of the -r option (see chapter "Commandline usage"). Self-extracting EXE files (such as those created by PKZIP, LHA, ARJ, RAR, ...) can be protected by ProtEXE. For most (if not all) of these you must use the -e option, and for LHA you must use -eo. 3.3 ProtEXE and executable compressors -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Yes. It is even supported directly by ProtEXE. See the option -c in the chapter "Commandline usage" and the chapter "Structure of PACKERS.PTX" for more information. A freely usable executable compressor, ComprEXE, is included in the archive. See COMPREXE.DOC for more information. I encourage using a compressor with ProtEXE, because that way the program becomes a lot smaller and a little bit harder to crack. What you shouldn't do is first run ProtEXE and then the compressor. ProtEXE scrambles the code so that it becomes uncompressable. In most cases the compressors refuse to compress it because instead of becoming smaller the code would become larger. 3.4 ProtEXE and virus-scanners -=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Some heuristic virus scanners, such as F-Prot, may say that ProtEXE and programs protected with it are suspicious because they contain anti-disassembling and anti-debugging tricks. This is absolutely normal, since that is the purpose of ProtEXE, so you may safely ignore these warnings, unless you seriously suspect someone has infected the program with a virus and then encrypted it with ProtEXE. 3.5 ProtEXE and other operating systems & multitaskers -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= ProtEXE has been tested and works fine under the following operating systems & multitaskers: - DOS - Qemm386, EMM386, ... - Desqview - Windows 3.X, 95 and NT - OS/2 Warp 3 & 4 - Linux DOSEMU 4.1 Verifying the registration information -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= You can always verify the registration information in a ProtEXE'd executable. Just run the protected program with the following command line: ~~~ProtEXE-RegInfo~~~ There may be no more parameters after this, and the parameter is case-sensitive, so it must be typed in exactly as above. If you want to do this often, you might find it more convenient to use PROTXVER.BAT to do this for you. Just type PROTXVER followed by the name of the executable. If the program was damaged, it will abort with a CRC error before it gets to the registration info, to reduce the risk of more damage (see also: ProtEXE operation notes). When the program was not protected with ProtEXE v3.0 or later, it will probably give an 'illegal parameter' error message or just ignore the parameter and run normally. This is normal behaviour. Apart from the ProtEXE version, copyright message and registration information, also an 8-digit hexadecimal code will be displayed (only ProtEXE 3.10 or later). This is the UNIX timestamp of the protection (number of seconds since 1970-01-01, 00:00) and can be used to distinguish different distribution versions of a program. In the commercial version, no registration name is displayed but just "Commercial version". 4.2 Testing the CRC failed message -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= You can test the CRC failed message of a ProtEXE'd executable by using the TestMsg tool. Just type TESTMSG to view the message. TestMsg will first verify the registration information (see previous chapter) to make sure the executable has been protected with ProtEXE; this is necessary to avoid crashes or other kinds of strange behaviour. TestMsg only works on executables protected with ProtEXE v3.0 or later. 5.1 Reasons for registering ProtEXE -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- The unregistered version may freely be evaluated for a period of 30 days. After this period you should register your copy or purchase the commercial version (see ORDER.FRM for more information). By doing so, you support the shareware concept. You may not distribute programs protected with the unregistered evaluation version of ProtEXE, whether it is freeware, shareware or commercial software. Giving copies of your program to a small number of people for alpha- and betatesting is not considered distribution; spreading your program via bulletin board systems, computer networks, shareware vendors and retail is. Several features are not available in the unregistered version: * customizing the CRC failed message * CRC-checking the extra data * the tie option * the PTXCrypt runtime data encryption/decryption system Also, in the unregistered version the ProtEXE version string is inserted before the default CRC failed message, the banner, and the password prompt. The fact that these are not present in the registered version also means a small reduction in the code size. Keep in mind that the registration information can always be verified using the method described in the chapter "Verifying the registration information". 5.2 How to register ProtEXE -=-=-=-=-=-=-=-=-=-=-=-=-=- An order form named ORDER.FRM is included. Instructions on how to register or purchase the commercial version and information about payment methods can be found in there. The registration key can be put in the directory where PROTEXE.EXE is in, or in any directory of the PATH. It will then unlock ProtEXE's registered only features and it will also allow the extraction of the PTXCrypt libraries using PTXCRYPT.EXE. The registration key will also work on future versions. Should the key format ever be changed (e.g. for security reasons), all registered users will receive their new key as soon as possible. The commercial version does not require a registration key. Commercial users who have an email or netmail address will automatically be sent major new versions. They can also be downloaded from 80x86 BBS, instead. See ORDER.FRM for more information. 6.1 Contacting the author -=-=-=-=-=-=-=-=-=-=-=-=- The author can be contacted through the following channels: E-mail: (preferably try the addresses in this order) tomtorfs@mail.dma.be tomtorfs@iname.com tom.torfs@f516.n292.z2.fidonet.org Netmail: (preferably use crashmail) Tom Torfs, 2:292/516@fidonet.org BBS: (private message to sysop) 80X86 BBS +32-15-24.62.32 24h/24h 28800bps V.34/V.FC Snailmail: Tom Torfs Cuperuslei 12 B-2220 Heist-op-den-Berg BELGIUM If you wish to encrypt your correspondence using PGP, this is my PGP public key: -----BEGIN PGP PUBLIC KEY BLOCK----- Version: 2.6.1 mQBtAzPwlx4AAAEDAJrir/T++tMCp0+VqyiakX5TA2oDfmYpVb9gI7DlniceL6bx HNGeLlVbFjN9/Jm0aVhBDsL1NFpfk5ixv40txpZIJYskg5TpZbsaIMjA4tNpLjQQ vvsaifXl6SFqYIdxbQAFEbQgVG9tIFRvcmZzIDx0b210b3Jmc0BtYWlsLmRtYS5i ZT4= =Pbll -----END PGP PUBLIC KEY BLOCK----- My public key can also be obtained from http://bewoner.dma.be/tomtorfs or http://80x86.home.ml.org, or can be downloaded from 80x86 BBS or file-requested as PGPKEY. 6.2 Where to find the most recent version of ProtEXE -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= ProtEXE world registration site: 80X86 BBS (+32) (0)15-24.62.32 28800 V.34/V.FC 24h/24h 2:292/516@fidonet.org tomtorfs@mail.dma.be / tomtorfs@iname.com File request magic name PROTEXE for the latest version You can also download the latest version from the ProtEXE support page: http://bewoner.dma.be/tomtorfs/protexe This page can also be accessed through the following alias: (which will remain constant even if the above might change) http://protexe.home.ml.org You should also be able to find the most recent ProtEXE versions on ftp://ftp.cdrom.com/simtelnet/pub/simtelnet/msdos/pgmutl a few days after the release. If you're a registered user and have an e-mail or netmail address, you will be notified of new versions and important bug fixes. 7.1 Errors, warnings & errorlevels -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= These are the errors and warnings that ProtEXE may give: ERROR E01: bad option: