软件保护之杀死Crack相关进程

进程

软件保护之杀死Crack相关进程

     
             屠恩海(SunHai)

   开发工具:Microsoft Visual Studio .NET 2003
   操作系统:Windows XP

  程序开发三个永恒的主题是:
  一.程序的功能及创意
  二.程序的推广
  三.程序的保护
  
  理论上说,不存在不能被Crack的程序。所谓的防Crack,只是增加Crack的难度而已。

                 用Process类管理进程

  Process 类提供对本地和远程进程的访问并使您能够启动和停止本地系统进程。

  Process 组件提供对正在计算机上运行的进程的访问。用最简短的话来说,进程就是当前运行的应用程序。线程是操作系统向其分配处理器时间的基本单位。线程可执行进程的任何一部分代码,包括当前由另一线程执行的部分。

  对于启动、停止、控制和监视应用程序等任务, Process 组件是很有用的工具。使用 Process 组件,可以获取当前运行的进程的列表,或者启动新的进程。 Process 组件用于访问系统进程。初始化 Process 组件后,可使用该组件来获取有关当前运行的进程的信息。此类信息包括线程集、加载的模块(.dll 和 .exe 文件)和性能信息(如进程当前使用的内存量)。

  如果在系统中用引号声明了一个路径变量,则在启动该位置中的任何进程时,必须完全限定该路径。否则,系统将找不到该路径。例如,如果 c:\mypath 不在您的路径中,而您使用引号添加它( path = %path%;"c:\mypath" ),则在启动 c:\mypath 中的任何进程时,您必须完全限定它们。

  进程组件同时获取有关一组属性的信息。 Process 组件获取有关任一组的一个成员的信息后,它将缓存该组中其他属性的值,并且在您调用 Refresh 方法之前,不获取有关该组中其他成员的新信息。因此,不保证属性值比对 Refresh 方法的最后一次调用更新。组细分与操作系统有关。

  系统进程在系统上由其进程标识符唯一标识。与许多 Windows 资源一样,进程也由其句柄标识,而句柄在计算机上可能不唯一。句柄是表示资源标识符的一般术语。即使进程已退出,操作系统仍保持进程句柄,该句柄通过 Process 组件的 Handle 属性访问。因此,可以获取进程的管理信息,如 ExitCode (通常,或者为零表示成功,或者为非零错误代码)和 ExitTime 。句柄是非常有价值的资源,所以句柄泄漏比内存泄漏危害更大。                   
   

                 自动停止Crack有关进程

     我们可用Process 类检测进程,发现Crack有关进程,即作出相应措施。比如停止Crack相关进程,退出软件,给出警告,把正式版变为试用版……(你可不要告诉我你会调用Format D:)。

  可通过两种方法利用 Process 组件停止进程。使用哪种方法取决于所停止的进程的类型:

如果进程有图形用户界面,则调用 CloseMainWindow 方法。该方法向进程的主窗口发送一个关闭请求,其行为与从用户界面中选择“关闭”命令相同。使用该方法使目标程序有机会在清除操作中提示用户保存任何没有保存的数据。
如果进程没有用户界面,则调用 Kill 方法。 警告 调用 Kill 方法将在不提示保存更改的数据的情况下,立即停止进程。任何没有保存的数据将丢失。
  我把Crack相关进程分为四类:
   反编译
   跟踪调试
   监视
   其他

   只有真正的Crack高手才真正懂得如何防Crack。我们首先要知道常见的Crack相关软件及其进程名,特别是.Net下的Crack相关软件。我并不懂Crack,这里只列出我所掌握的一些情况,希望大家一起来补充完善。

  这里主要用到 Process.MainWindowTitle 属性获取进程的主窗口标题。

    [Visual Basic] Public ReadOnly Property MainWindowTitle As String   
  
  仅当进程有图形界面时,该进程才具有与其关联的主窗口。如果关联进程没有主窗口(因而 MainWindowHandle 为零),则 MainWindowTitle 为空字符串 ("")。如果刚启动了一个进程,并且想使用其主窗口标题,则请考虑使用 WaitForInputIdle 方法让进程完成启动,从而确保创建了主窗口句柄。否则,系统将引发异常。
  Windows 98 平台说明: 如果在启动进程时 ProcessStartInfo.UseShellExecute 设置为 true ,则此属性在此平台上不可用。

Private Sub close()

  Dim pProcess() As Process 
  pProcess = Process.GetProcesses() '获取当前所有进程
  Dim All As Integer
  Dim myArray() As String = _
  {"Assembly View", "Anakrino", "Borg", "PEBrowse", "ProcessDasm", "VirtualCode", "Dasm", "IDA", _
   "FrogsICE", "DriverWorkbench", "OllyDbg", "twx", "TRW", "SoftICE", "NTICE", "SICE", _
   "API Monitor", "ApiHooks", "APIS", "API-Log", "APISpy", "ExeSpy", "File Monitor", "RegistryMonitor",    "MemoryMonitor", "Regmon", "Regshot", "RegSnap", "RegSpy", "Res Spy", _
   "crack", "破解", "sn", "SN"}

    For All = 0 To pProcess.Length() - 1
      For Kill As Integer = 0 To myArray.Length - 1
        If InStr(pProcess(All).MainWindowTitle, myArray(Kill).ToString) Then
          pProcess(All).Kill()       '杀死Crack相关进程
          End                '退出软件。这里你还可以加上其他措施
        'MsgBox(pProcess(All).MainWindowTitle)
        End If
      Next
    Next

时间: 2024-08-22 11:15:52

软件保护之杀死Crack相关进程的相关文章

教你两式妙招强行杀死顽固病毒进程 taskkill_应用技巧

根据进程名查杀 这种方法是通过WinXP系统下的taskkill命令来实现的,在使用该方法之前,首先需要打开系统的进程列表界面,找到病毒进程所对应的具体进程名. 接着依次单击"开始→运行"命令,在弹出的系统运行框中,运行"cmd"命令:再在DOS命令行中输入"taskkill /im aaa"格式的字符串命令,单击回车键后,顽固的病毒进程"aaa"就被强行杀死了.比方说,要强行杀死"conime.exe"病

如何杀死oracle死锁进程

方法一:Oracle的死锁非常令人头疼,总结了一些点滴经验作为学习笔记 1.查哪个过程被锁查V$DB_OBJECT_CACHE视图: SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER='过程的所属用户' AND LOCKS!='0'; 2. 查是哪一个SID,通过SID可知道是哪个SESSION.查V$ACCESS视图: SELECT * FROM V$ACCESS WHERE OWNER='过程的所属用户' AND NAME='刚才查到的过程名'; 3.

zookeeper启动后没有相关进程

查看状态报错,报错,百度硕士nc问题,让看.out文件,但是这哥文件是空的,那就看log 016-12-15 14:08:19,355 [myid:] - INFO [main:QuorumPeer$QuorumServer@149] - Resolved hostname: StandByNameNode to address: StandByNameNode/192.168.58.183 2016-12-15 14:08:19,356 [myid:] - INFO [main:QuorumP

计算机11大经典错误汇总

  10.DOS的Abort,Retry, Fail?错误 85年以后出生的人可能不知道DOS是什么了,只有那老家伙还知道这是什么.我还记得当时的我对于Abort和Fail这两个选择还是比较清楚的,不过,今天完全忘记了Abort和Fail的差别是什么?这个出是DOS下的经常出现,也相当的经典,以至于在Wikepedia上都有专门的业面 Abort, Retry, Fail?.简称为ARF.当然,ARI – Abort, Retry, Ignore? 计算机11大经典错误汇总-计算机经典书籍汇总"

eclipse启动android模拟器后关闭不了~!!

问题描述 运行android模拟器后android模拟器关闭不了直接结束emulator.exe也不行不知道大家有没有碰到过类似的现象.............. 问题补充:Rainbow702 写道 解决方案 估计是模拟器版本问题 ,这玩意有时候就是容易出这或者那的毛病.你也是学android的啊 我们可以交流交流啊.解决方案二:引用嗯.谢谢啊. 不谢,欢迎采纳,多谢了.解决方案三:引用关于android,有没有好点书籍或者资料啊.最好讲的比较深入点... 如果你是初学的话,建议你不要看深一点

怎样在Linux命令行下杀死一个进程

Linux 的命令行里面有用来停止正在运行的进程的所有所需工具.Jack Wallen 将为您讲述细节. 想像一下:你打开了一个程序(可能来自于你的桌面菜单或者命令行),然后开始使用这个程序,没想到程序会锁死.停止运行.或者意外死机.你尝试再次运行该程序,但是它反馈说原来的进程没有完全关闭. 你该怎么办?你要结束进程.但该如何做?不管你信与不信,最好的解决方法大都在命令行里.值得庆幸的是, Linux 有供用户杀死错误的进程的每个必要的工具,然而,你在执行杀死进程的命令之前,你首先需要知道进程是

杀死Linux中的defunct进程(僵尸进程)的方法指南

一.什么是defunct进程(僵尸进程)在 Linux  系统中,一个进程结束了,但是他的父进程没有等待(调用wait /  waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状态时,看到这些进程的状态栏为defunct.僵尸进程是一个早已死亡的进程,但在进程表(processs  table)中仍占了一个位置(slot).但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程.因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚

linux 查找进程及终止进程操作的相关命令

  使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程.这在linux系统下是极其容易的事情,你只需要kill xxx即可,这里xxx代表与此软件运行相关的进程PID号. 首先,我们需要使用linux下另外一个命令ps查找与进程相关的PID号:ps aux | grep program_filter_word 1)ps a 显示现行终端机下的所有程序,包括其他用户的程序. 2)ps -A 显示所有程序. 3)ps c 列出

教你两招轻松杀死顽固不化木马病毒进程

根据进程名查杀 这种方法是通过WinXP系统下的taskkill命令来实现的,在使用该方法之前,首先需要打开系统的进程列表界面,找到病毒进程所对应的具体进程名. 接着依次单击"开始→运行"命令,在弹出的系统运行框中,运行"cmd"命令;再在DOS命令行中输入"taskkill/imaaa"格式的字符串命令,单击回车键后,顽固的病毒进程"aaa"就被强行杀死了.比方说,要强行杀死"conime.exe"病毒进