Phantasie Mutation Engine <tm>                       Version 1.00
        Written by Burglar in Taipei, Taiwan.                  (95/01/12)


        1.  License

        You are free to include this Engine in anything, but don't to
        injure anything.  Injure anything is prohibited.
        You are free to give it to people that will not injure anything,
        you can use it to make mutation virus, but the virus don't have
        any destruction.


        2.  How to use it

        when you want use it, you must declare below at first in code
        segment.

        EXTRN   PME:NEAR

        Then you write your program like virus as usual.  When you need
        to encrypt the code, you just call the Engine.  Put the following
        instruction in your code:

        CALL    PME

        You also need to supply the parameters for the Engine.  They are passed in
        registers.  Results are also passed in registers.

        Of course, you must link the PME.OBJ module to your program like
        virus!


        3.  Input parameters

        All parameters are mandatory.  Description follows:

        ES = Work segment

        The Engine needs work space.  On entry, ES must point to a free
        segment.  It will use the first 512 bytes of it PLUS length of
        the code that will be encrypted.

        DS:DX => Code to encrypt

        On entry, just set DS:DX to point to the code you want to be
        encrypted.

        CX = Length of code to encrypt

        On entry, just set CX to the length of the code you want to be
        encrypted.

        BX = Offset where the decryption routine will be executed

        The Engine needs to know what will be the value of IP when the
        decryption routine will take control.  For example, if your
        program which want to be encrypted is a COM file, and adds itself
        BEFORE it, you must set this value to 100h.


        4.  Results

        The Engine returns the following values in registers:

        ES = Work segment

        The ES value is preserved.

        DS:DX => Decryption routine + encrypted code

        DS:DX now points to the decryption routine + encrypted code.

        CX = Length of the decryption routine + encrypted code

        CX now has the summary length of both the decryption routine and
        encrypted code. (always origin length + 512 bytes)

        AX = 0

        AX now is set to 0.


        5.  Final Notes

        Well, that's for now.  No time for more.  Look at the demo program
        PME-GEN.ASM to learn how to use it.

        Pass the Engine (all files together in an archive) to programmers
        and who want research it.


        Greetings to all programmers

        Burglar

        Taipei, Taiwan.