如何能在VB程序实现自身的进程保护
可以简单的避免任务管理器的结束
和逃脱cmd中的taskkill
应该最好是利用双进程保护吧。
但本身程序窗口已经隐藏了,无法使用findwindow获得窗口标题
各位大虾有什么办法实现双进程保护呢
再次多谢了

解决方案 »

  1.   

    为什么要双进程呢???直接改下EPROCESS里有很多地方都可以实现进程保护的
      

  2.   

    Option Explicit
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
    Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
    Private Declare Function Module32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As MODULEENTRY32) As Long
    Private Declare Function Module32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As MODULEENTRY32) As Long
    Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate Type PROCESSENTRY32
        dwSize As Long
        cntUsage As Long
        th32ProcessID As Long
        th32DefaultHeapID As Long
        th32ModuleID As Long
        cntThreads As Long
        th32ParentProcessID As Long
        pcPriClassBase As Long
        dwFlags As Long
        szExeFile As String * 260
    End TypeConst TH32CS_SNAPPROCESS = &H2Const TH32CS_SNAPmodule = &H8Private Type MODULEENTRY32
        dwSize As Long
        th32ModuleID As Long
        th32ProcessID As Long
        GlblcntUsage As Long
        ProccntUsage As Long
        modBaseAddr As Byte
        modBaseSize As Long
        hModule As Long
        szModule As String * 256
        szExePath As String * 1024
    End Type
      Dim i As Long
    Private Sub Command1_Click()    EndEnd SubPrivate Sub Form_Load()    App.TaskVisible = False '不要在任务管理内显示
     i = 0
    End SubPrivate Sub Timer1_Timer()  Dim ret As Long, lPid As Long
      Dim isLive As Boolean
      Dim Mode As MODULEENTRY32, Proc As PROCESSENTRY32
      Dim hSnapshot As Long, hMSnapshot As Long
      Dim sFilename As String     
        If Dir(App.Path + "\Stop.Flg") <> "" Then End '如果当前文件夹内存在stop.flg这个文件 则停止双进程保护
        
        sFilename = App.Path + "\yourSoft.exe" '另一个进程的路径
        
        hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0)
        Proc.dwSize = Len(Proc)
        Mode.dwSize = Len(Mode)
        
        lPid = ProcessFirst(hSnapshot, Proc)
        Do While lPid <> 0
            hMSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPmodule, Proc.th32ProcessID)
            Mode.szExePath = Space$(256)
            ret = Module32First(hMSnapshot, Mode)
            If ret > 0 Then
                If InStr(1, Mode.szExePath, sFilename, vbTextCompare) > 0 Then 'Mode.szExePath=进程路径
                    isLive = True '找到目标进程
                    CloseHandle hMSnapshot
                    Exit Do
                End If
            End If
            CloseHandle hMSnapshot
            lPid = ProcessNext(hSnapshot, Proc)
        Loop
        CloseHandle hSnapshot
        If Not isLive Then
            ShellExecute 0, "", sFilename, "-AUTO", "", 1 '如果目标进程不存在 则启动它
            Debug.Print sFilename
        End If
    End Sub刚好前两天用到的你参考一下吧
      

  3.   

    http://www.m5home.com/bbs/thread-3409-1-1.html加载驱动实现进程保护用用看:)
      

  4.   

    http://www.m5home.com/bbs/thread-3479-1-1.html还有一个....
      

  5.   

    simon__sun看你只是发了代码。并没有说明是那个模块运行代码,用起来有点模糊,而且我看代码应该是分两个工程才能实现的吧。
    至于老马的,都是加载驱动实现进程保护,但正因为如此,杀软都认为是病毒来看待!
    不过还是感谢你们两个发的,还有老马的论坛。我昨天在上面已经注册了一个帐号,今天还没有成功验证,说发一个邮件,但邮件我还没有收到,我的帐号是fyjs-quan,可以帮我一下么,想在你的论坛看一下东西,或者灌灌水。
    现在等待陈辉的回答了,他说有另一种方法,我很想知道他有什么方法,教教我吧,辉哥
    不过,其他大虾如果有什么新招可以达到进程保护的,发出来给大家共享一下,就此感谢了
      

  6.   

    想起来还有一个东东呢,哈哈.http://www.m5home.com/bbs/thread-1452-1-1.html试试吧.
      

  7.   

    就一个窗体加个timer控件和command就好了,稍微改下就可以实现两个程序之间相互保护了!!  
      

  8.   

    老马,你发的那个隐藏进程好像不行丫,我的是XP SP3的,应该跟杀软无关吧,杀软都没有任何提示
    还有simon__sun你能详细一说吗,代码上有一个yourSoft.exe的文件,是不是要生成这样的文件,不过我把名字改成这个样子还是没有能双进程保护丫?所以我看都是麻烦您再详细一点了。(*^__^*) 嘻嘻
      

  9.   

    XP SP3下很多RING3的手段都失效了陈辉好象上次说过,是因为某些地址改变了的原因.....
    玩不转,没办法唉~~~
      

  10.   

    如果你只想逃脱taskkill和任务管理器的话
    可以告诉你一招很阴的(对微软的有效,对其他软件无效)把进程名改成Winlogon.exe
    就结束不掉了还有一种是双进程保护,不过很烦的,被结束掉以后程序的数据全部丢失,
    能做到的只是被结束了自动重启而已(用来做绿坝不错)。
      

  11.   

    当然,如果只是逃过任务管理器的话,进程名改为smss.exe和csrss.exe绝对可以
    但如果只是对任务管理有效的进程保护,还有什么用处呢!可以用来欺骗一下小孩吧
    至于程序被结束掉的数据全部丢失的问题,可以对程序的变量定义尽量少一点,或者用写入文件来缓存一下,启动的时候再读取,这个方法应该不错吧!
    嘻嘻,我想要一个代码,望大虾成全,感谢!
      

  12.   

    把Eprocess 的 &H84改成-1就可以
      

  13.   

    不管的,管伪装PID不行的,还要改些