文章如下:http://gtogo.myetang.com/po/biancheng/2.htm[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows] 
"AppInit_DLLs"="backdoor.dll" 
wantjob就是用这个法子。微软知识库Q134655和Q125680里介绍过,大家不妨弄来看看。 
    写一个backdoor.dll,再加上这个键值,系统启动后就会加载这个模块。因为没有自己 
的进程,所以也是看不见的系统启动后就会加载的dll与一般的供其他程序调用的dll有何区别?
这两种dll在写法上有何不同。

解决方案 »

  1.   

    我想应该在dllmain这个函数里面,创建一个或多个线程,这样dll才可以执行自己的任务嘛。
    猜测而已  :)
      

  2.   

    没什么区别啊!
    如果你曾经多少使用过Wi n d o w s操作系统,你肯定熟悉注册表的情况。整个系统的配置都
    是在注册表中维护的,可以通过调整它的设置来改变系统的行为特性。将要介绍的项目是在下
    面的关键字中:
    Windows 98 Windows 98将忽略注册表的这个关键字。在Windows 98下,无法使用
    该方法插入D L L。
    图2 2 - 2显示了使用Registry Editor(注册表编辑器)时该关键字中的各个项目的形式。该关
    键字的值包含一个D L L文件名或者一组D L L文件名(用空格或逗号隔开)。由于空格用来将文
    件名隔开,因此必须避免使用包含空格的文件名。列出的第一个D L L文件名可以包含一个路径,
    但是包含路径的其他D L L均被忽略。由于这个原因,最好将你的D L L放入Wi n d o w s的系统目录
    中,这样就不必设定路径。在窗口中,我将该值设置为单个D L L路径名C : \ M y L i b . d l l。
    图22-2 注册表窗口
    当重新启动计算机及Wi n d o w s进行初始化时,系统将保存这个关键字的值。然后,当
    U s e r 3 2 . d l l库被映射到进程中时,它将接收到一个D L L _ P R O C E S S _ AT TA C H通知。当这个通知
    被处理时,U s e r 3 2 . d l l便检索保存的这个关键字中的值,并且为字符串中指定的每个D L L调用
    L o a d L i b r a r y函数。当每个库被加载时,便调用与该库相关的D l l M a i n函数,其f d w R e a s o n的值是
    D L L _ P R O C E S S _ AT TA C H,这样,每个库就能够对自己进行初始化。由于插入的D L L在进程
    的寿命期中早早地就进行了加载,因此在调用函数时应该格外小心。调用k e r n e l 3 2 . d l l中的函数
    时应该不会出现什么问题,不过调用其他D L L中的函数时就可能产生一些问题。U s e r 3 2 . d l l并
    不检查每个库是否已经加载成功,或者初始化是否取得成功。
    在插入D L L时所用的所有方法中,这是最容易的一种方法。要做的工作只是将一个值添加
    到一个已经存在的注册表关键字中。不过这种方法也有它的某些不足:
    • 由于系统在初始化时要读取这个关键字的值,因此在修改这个值后必须重新启动你的计
    算机—即使退出后再登录,也不行。当然,如果从这个关键字的值中删除D L L,那么
    在计算机重新启动之前,系统不会停止对库的映射操作。
    • 你的D L L只会映射到使用U s e r 3 2 . d l l的进程中。所有基于G U I的应用程序均使用U s e r 3 2 . d l l,
    不过大多数基于C U I的应用程序并不使用它。因此,如果需要将D L L插入编译器或链接
    程序,这种方法将不起作用。
    • 你的D L L将被映射到每个基于G U I的应用程序中,但是必须将你的库插入一个或几个进
    程中。你的D L L映射到的进程越多,“容器”进程崩溃的可能性就越大。毕竟在这些进程
    中运行的线程是在执行你的代码。如果你的代码进入一个无限循环,或者访问的内存不
    正确,就会影响代码运行时所在进程的行为特性和健壮性。因此,最好将你的库插入尽
    可能少的进程中。
    • 你的D L L将被映射到每个基于G U I的应用程序中。这与上面的问题相类似。在理想的情
    况下,你的D L L只应该映射到需要的进程中,同时,它应该以尽可能少的时间映射到这
    些进程中。假设在用户调用你的应用程序时你想要建立Wo r d P a d的主窗口的子类。在用
    户调用你的应用程序之前,你的D L L不必映射到Wo r d P a d的地址空间中。如果用户后来
    决定终止你的应用程序的运行,那么你必须撤消Wo r d P a d的主窗口。在这种情况下,你
    的D L L将不再需要被插入Wo r d P a d的地址空间。最好是仅在必要时保持D L L的插入状态。