如何用Delphi给EXE文件加个外壳,控制每次只有输入密码才能运行文件?或者能够从流中将EXE文件的实际数据不用保存到硬盘上,直接调到内存中运行(避免用户绕过外壳,直接运行EXE文件),请教各位高手~~~~

解决方案 »

  1.   

    用命令行参数实现啊:)if ParamCount=0 then exit;
    if ParamStr(1)<>'123456' then
    begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end;调用这个程序的时候带上参数,如:
    ShellExecute(0, 'open', 'Project1.exe', '-123456', nil, SW_SHOWNORMAL);
      

  2.   

    写错了:)if ParamCount=0 then exit;
    if ParamStr(1)='123456' then
    begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end;调用这个程序的时候带上参数,如:
    ShellExecute(0, 'open', 'Project1.exe', '123456', nil, SW_SHOWNORMAL);
      

  3.   

    将实际的Exe文件做成dll就可以避免用户直接运行了嘛。
    在调用程序中加入输入密码判断就行了。
      

  4.   

    楼上的兄弟,这样好像不行吧?要执行的A.EXE文件,是没有源码的,我的初步想法是用Delphi建立B.EXE,把A.EXE文件添加到B.EXE文件的尾部,运行B.EXE的时候再从B.EXE里面以流的方式取出A.EXE,保存到硬盘上,再执行A.EXE,但这样用户可以在A.EXE执行后,从硬盘上看到实际的A.EXE文件,这样,用户可以绕过外壳,以后直接启动A.EXE,有没有什么方法可以避免用户绕过外壳,直接运行A.EXE文件?或者其它替代方法也可以
      

  5.   

    开发加壳程序,但这不是一件容易做的事情
    呵呵就类似商业的保护系统一样
    例如ASPack什么的,只是他们只是加壳,没要求密码而已,你能开发这类工具就行的
      

  6.   

    To: ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net) 
      能指点一下具体的实现吗?或者告诉我哪儿能找到相关的资料
      

  7.   

    那你就把A.exe加到B.exe的资源里面去吧,运行时由B.exe将它释放到硬盘运行,运行完毕后可以考虑由B.exe来删除A.exe,或者A.exe程序自杀,现在写代码已经可以实现程序在运行时删除自己,参考http://community.csdn.net/Expert/topic/4409/4409389.xml?temp=3.025454E-02
      

  8.   

    http://www.programmerlife.com
    =======================================
    PE文件简单加密--100%源码这个小软件通过在可执行文件(.exe)的尾部添加一个新节(Section),并且修改PE的入口地址,使可执行文件在运行时,跳出一个输入密码的对话框,从而实现了简单的加密。源程序采用Delphi 6.0编写, 兼有少量的asm代码,用於可执行文件的加密。作者在[大富翁论坛]的ID为smokingroom, 希望能和大家交流^_^
    如需传播,请保留作品的完整性!
      

  9.   

    To:sdzeng(大头鸟)
      在http://www.programmerlife.com 上没有找到你说的东东啊?还有,我实际上是要用检测Usb狗来做权限控制,不是输入密码来验证。To: clasj(我蛮怀)
       有没有办法直接把B.exe从流中调到内存运行?我想最好能实现这样,实在不行就只能先释放到硬盘运行等运行完后再删除;另外,对于ShellExecut、WinExec等外壳调用函数能否等待调用返回结果再继续执行后面的代码?
       各位高手给点建议好么~~
      

  10.   

    program Project1;//{$APPTYPE CONSOLE}{$R MYRES.RES}uses
      SysUtils, Windows, Classes;var
      StartupInfo: _StartupInfoA;
      ProcessInfo: _Process_Information;
      Stream: TResourceStream;
    begin
      Stream:=TResourceStream.Create(0, 'test', 'exefile');
      try
        Stream.SaveToFile('C:\test.exe');
        StartupInfo.cb:=SizeOf(StartupInfo);
        CreateProcess('C:\test.exe', nil, nil, nil, false, 0, nil, nil, StartupInfo, ProcessInfo);
        WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
        DeleteFile('C:\test.exe');
      finally
        Stream.Free;
      end;
    end.
      

  11.   

    To: clasj(我蛮怀)
      非常感谢,这样可以满足基本需求了,但用户可以在test.exe被释放出来,执行后,拷贝test.exe,从而以后绕过加密的外壳,有没有更好的方法啊?
      

  12.   

    只有PE文件加壳,增加新段,修改OEP,才能保护程序的加密保护这类软件基本上没有免费的!一般都自用,不公开的,呵呵你需要可以去购买的