[Back to ENCRYPT SWAG index] [Back to Main SWAG index] [Original]

    { PD> This looks like something I would like to add to my Programs.  My
     PD> question is, how do you modify the .exe from the Program.  I can do the
     PD> encryption but don't know how to store the encrypted passWords in the
     PD> Program's own .exe.  Any help would be appreciated.
    }

    Procedure PatchExeFile(ItemAddr:Pointer;itemsize:LongInt);
    Var
      FiletoPatch : File;
      HeaderSize  : Word;
      seeksize    : LongInt;
      offset      : Word;
      LDseg       : LongInt;
      ch          : Char;

    begin
      assign(FiletoPatch, paramstr(0));
      reset(FiletoPatch, 1);
      seek(FiletoPatch, 8);
      blockread(Filetopatch, headersize, sizeof(headersize));
      offset := ofs(itemAddr^);
      Ldseg := LongInt(Dseg);
      seeksize := 16 * (LDseg - PrefixSeg + HeaderSize) + offset - 256
        seek(Filetopatch, seeksize);
      blockWrite(Filetopatch, ItemAddr^, ItemSize);
      close(Filetopatch);
    end;

    {Call it this way:
    }
    PatchExeFile(Addr(passWords), sizeof(passWords));

    {note that For this to work, passWords must be a TypeD ConstANT.
    So you declare it this way:
    }
      PassWords : PassWord_Array =
      (
        (PassWord : #247#154#189#209#18#104#143#29; Protected : False),
        .
        .
        .
        (PassWord : #247#154#189#209#18#104#143#29; Protected : False)
      );

    {  PassWord_Array is declard as an Array of PassWord_Record;

        The above declaration is from my Crypto.inC. I have a Crypto.PAS
    Program that generates this File from my Make File so that on each
    Compile the encryption is changed and the Array of passWords is stored
    with valid encrypted passWords. I used #<AsciiValue> because the
    encryption can generate values from Ascii 0 to Ascii 255 and some of
    those cause troubles in Strings Constants using "'" as delimeters.

        As long as you use:

    Const <ConstName> : <ConstType> = <ConstantValue>;

        You will be sure PatchExe can find it's correct adress in the EXE.
    From there on you can read it in your TP Program as usual and store it
    using the call to PatchExe I gave up there.

        BTW, do as I do and generate a new random encryption key on each
    run, Re-encrypting everything and writting it back to the exe. This
    drives Hackers mad when they try to decypher your encrypted passWords.

    One last note:
        The above PatchExe was written when I used TP 6.0. I haven't checked
        yet if TP 7.0 Uses different mapping of his EXe and it will most
        probably not work on a Protected-mode Compiled EXE.
    }

[Back to ENCRYPT SWAG index] [Back to Main SWAG index] [Original]