新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     >>计算机科学论坛<<     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 讨论密码学、密码协议、入侵检测、访问控制等与安全理论研究有关的主题
    [返回] 计算机科学论坛计算机理论与工程『 安全理论 』 → [转贴]高手课堂:自己编写病毒专杀工具 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 16853 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [转贴]高手课堂:自己编写病毒专杀工具 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     longshentailang 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:计算机学士学位
      文章:325
      积分:2990
      门派:XML.ORG.CN
      注册:2006/6/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给longshentailang发送一个短消息 把longshentailang加入好友 查看longshentailang的个人资料 搜索longshentailang在『 安全理论 』的所有贴子 引用回复这个贴子 回复这个贴子 查看longshentailang的博客楼主
    发贴心情 [转贴]高手课堂:自己编写病毒专杀工具

    高手课堂:自己编写病毒专杀工具
      出处:www.anqn.com  责任编辑:ANSON  2006-09-08 15:24:42

    如今病毒木马蠕虫层出不穷,变种也是一个接一个。反病毒公司以及各大安全公司随着影响很大的病毒的出现都会免费提供病毒专杀工具,这个举措对普通用户来说确实很有帮助。其实写病毒专杀工具也不像大家想象的那么神秘,利用SDK写个控制台程序来实现病毒专杀,因无须写图形界面,所以简便快捷!你自己也能写!不信?就接着看吧^_^ 废话不说了,接下来就开始谈谈病毒专杀工具的思路及实现方法。

    此文中讲解的病毒专杀工具是针对木马、蠕虫等独立的程序而言的广义的病毒而言,而不是指那种自我复制感染PE文件的依附于其他程序的那种狭义的病毒。因为写那种病毒的专杀工具需要PE文件结构等知识,相对而言有点难度,所以我们就先从相对简单点的开始,难的以后再介绍。

    对于大多数病毒而言,杀毒的思路其实很简单,那就是:终止病毒的进程、删除自启动项目(一般在注册表中的run*主键下)、删除病毒文件,对设置了文件关联的病毒而言还要修改注册表恢复文件关联。下面将分别陈述。

    一.终止进程
    以前网上曾有许多朋友问我怎么根据文件名终止指定进程,为什么使用函数TerminateProcess()不能直接终止指定进程。首先让我们来看看函数TerminateProcess()的声明吧:Bool TerminateProcess(HANDLE hPeocess,UINT uExitCode),其中第一个参数为进程句柄,而不是进程名称(文件名)。那怎样才能获得指定进程的句柄呢?我们可以使用函数OpenProcess(),其原型为
    HANDLE OpenProcess(
    DWORD dwDesiredAccess, // 访问标志
    BOOL bInheritHandle, // 处理继承的标志
    DWORD dwProcessId // 进程标识号,即进程ID
    );

    最后一个参数就是该进程的ID,进程句柄和进程ID是两回事,这时你可能很郁闷:怎么知道进程ID呢?方法当然有啦!在Windows9X/2000/XP/2003中,微软均提供了用来枚举进程的ToolHelp API系列函数。先运用函数CreateToolhelp32Snapshot()取得快照句柄,然后使用Process32First()以及Process32Next()枚举当前的进程。枚举过程中会将每一个进程的信息存放到PROCESSENTRY32结构中。PROCESSENTRY32的原型为:

    typedef struct tagPROCESSENTRY32
    {
    DWORD dwSize; // 结构大小;
    DWORD cntUsage; // 此进程的引用计数;
    DWORD th32ProcessID; // 进程ID;
    DWORD th32DefaultHeapID; // 进程默认堆ID;
    DWORD th32ModuleID; // 进程模块ID;
    DWORD cntThreads; // 此进程开启的线程计数;
    DWORD th32ParentProcessID; // 父进程ID;
    LONG pcPriClassBase; // 线程优先权;
    DWORD dwFlags; // 保留;
    char szExeFile[MAX_PATH]; // 进程全名;
    } PROCESSENTRY32;

    其中th32ProcessID就是进程的ID,szExeFile为该进程的文件名。所以要终止指定进程,我们可以枚举进程,逐一判断szExeFile是否和我们欲终止的进程名相同,如果相同就取其th32ProcessID参数,然后代入OpenProcess函数,取得目标进程的句柄。这样就可以利用函数TerminateProcess()终止该进程了。我写了个终止指定进程的函数,如下:

    void KillProcessFromName(LPCTSTR name)//name为你要终止的进程的名称,Win9X则需包括路径
    {
    PROCESSENTRY32 pe;//定义一个PROCESSENTRY32结类型的变量
    HANDLE hShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);// 创建快照句柄
    pe.dwSize=sizeof(PROCESSENTRY32);//一定要先为dwSize赋值
    if (Process32First(hShot,&pe))
    {
    do
    {if (strcmp(pe.szExeFile,name)==0) //判断此进程是否为你要终止的进程
    HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe.th32ProcessID);
    //如果是就利用其ID获得句柄
    TerminateProcess(hProcess,0);//终止该进程
    }
    while(Process32Next(hkz,&pe));
    }
    CloseHandle(hShot);//最后别忘记Close
    }
      
    在使用时只要在main()主函数里调用函数KillProcessFromName(),把参数设为你要终止的进程的名称即可,Win9X则需包括路径。还有一点值得注意一下,就是别忘了include 。

    二、删除文件
    这一步骤很简单,调用函数DeleteFile()即可,Bool DeleteFile(LPCTSTR lpFilename),把lpFilename设要指向删除的文件的文件名的指针即可,可包含具体路径。

    三、修改注册表,删除启动项及文件关联
    首先用函数RegOpenKeyEx()打开目标主键,RegOpenKeyEx()函数原型为:
    LONG RegOpenKeyEx(
    HKEY hKey,// 将要打开的键的句柄
    LPCTSTR lpSubKey,// 指向将要打开的包含子建的名称字符串指针
    DWORD ulOptions,// 为保留字,必须为NULL
    REGSAM samDesired,// 访问权限
    PHKEY phkResult//指向打开键的句柄指针
    );

    获得句柄后用函数RegSetValueEx()进行修改键值,函数原型为:
    LONG RegSetValueEx(
    HKEY hKey, //当前打开的键的句柄
    LPCTSTR lpValueName, //指向非空的包含要查询的值名称的字符串指针
    DWORD Reserved, //保留值,必须为NULL
    DWORD dwType,//键值类型,比如REG_SZ、REG_DWORD等
    CONST BYTE * lpData , //指向键值数据的指针,注意此变量类型,不是LPCTSTR!
    DWORD cbData//指向保存设定值长度变量的指针,以字节为单位
    );

    当然也可以用函数RegDeleteValue()来删除键值。操作完毕后别忘了用函数RegCloseKey()来Close。

    使用这些函数很简单,只要把相应的参数换为你要删除或修改注册表的相应数值,唯一值得注意的是RegSetValueEx()函数中第5个参数的类型是BYTE而不是LPCTSTR!通过这些就可以很方便删除指定启动项以及恢复文件关联,为了便于大家理解,我举个修复EXE文件关联的例子,大家修改相应的参数就可以适用其它键值的修改,换用RegDeleteValue函数就可以实现删除自启动项。
    HKEY hKey;
    LPCTSTR data1="\"%1\" %*";//EXE文件默认的open方式,”%1\"表EXE文件本身
    DWORD lResult=RegOpenKeyEx(HKEY_CLASSES_ROOT,
    "exefile\\shell\\open\\command",0,KEY_WRITE,&hKey);
    if(lResult==ERROR_SUCCESS)
    RegSetValueEx(hKey,"",NULL,REG_SZ,(LPBYTE)data1,9);//修改键值
    RegCloseKey(hKey);

    到这里,一个病毒专杀工具的模型就已初步完成了,大家自己编写时只需把文中函数的形参换为你要杀的目标病毒的相应特征数据编译即可。这个是个简单的专杀工具,只能对付普通的木马、蠕虫等病毒,大家应具体情况具体分析,根据具体情况扩充该程序功能,比如有些木马是通过修改win.ini、system.ini来实现自动运行,我们就需操作文件删除相应数据,除此之外,有时还需添加终止服务、卸载DLL模块、进入RING0操作等功能。总之,我相信大家一定能自己写出病毒木马专杀工具的!呵呵,是不是很有成就感呢!


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/9/11 10:08:00
     
     longshentailang 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:计算机学士学位
      文章:325
      积分:2990
      门派:XML.ORG.CN
      注册:2006/6/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给longshentailang发送一个短消息 把longshentailang加入好友 查看longshentailang的个人资料 搜索longshentailang在『 安全理论 』的所有贴子 引用回复这个贴子 回复这个贴子 查看longshentailang的博客2
    发贴心情 
    当然,上面只是一个最基本的病毒专杀工具模型,实际应用时还有很多问题需要考虑。相信大家一定能在此基础上开发出更完善的病毒木马专杀工具!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/9/11 10:15:00
     
     落叶 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:28
      积分:147
      门派:XML.ORG.CN
      注册:2006/10/6

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给落叶发送一个短消息 把落叶加入好友 查看落叶的个人资料 搜索落叶在『 安全理论 』的所有贴子 引用回复这个贴子 回复这个贴子 查看落叶的博客3
    发贴心情 
    受用,谢老

    ----------------------------------------------
    学无止境,请高手们多多指教。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/10/9 9:08:00
     
     juwenbin 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:5
      积分:74
      门派:XML.ORG.CN
      注册:2007/1/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给juwenbin发送一个短消息 把juwenbin加入好友 查看juwenbin的个人资料 搜索juwenbin在『 安全理论 』的所有贴子 引用回复这个贴子 回复这个贴子 查看juwenbin的博客4
    发贴心情 
    学习学习
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/1/22 12:30:00
     
     tianyizhilan 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:7
      积分:84
      门派:XML.ORG.CN
      注册:2007/3/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给tianyizhilan发送一个短消息 把tianyizhilan加入好友 查看tianyizhilan的个人资料 搜索tianyizhilan在『 安全理论 』的所有贴子 引用回复这个贴子 回复这个贴子 查看tianyizhilan的博客5
    发贴心情 
    这个用的是什么语言,是什么编译环境啊

    ----------------------------------------------
    凡事勤则易,凡事惰则难【impossible --> I'm possible】 日志扫描软件sreng2 下载地址:http://www.liuxun.net.cn/soft/tools/2006-10-08/26.html autorun.ini专杀 http://www.liuxun.net.cn/soft/tools/2006-10-17/36.html

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/3/14 17:03:00
     
     changeone 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:59
      门派:XML.ORG.CN
      注册:2007/11/6

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给changeone发送一个短消息 把changeone加入好友 查看changeone的个人资料 搜索changeone在『 安全理论 』的所有贴子 引用回复这个贴子 回复这个贴子 查看changeone的博客6
    发贴心情 
    佩服,谢谢
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/11/8 18:57:00
     
     落叶 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:28
      积分:147
      门派:XML.ORG.CN
      注册:2006/10/6

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给落叶发送一个短消息 把落叶加入好友 查看落叶的个人资料 搜索落叶在『 安全理论 』的所有贴子 引用回复这个贴子 回复这个贴子 查看落叶的博客7
    发贴心情 
    找了好久,终于让我找到了!谢谢啊

    ----------------------------------------------
    学无止境,请高手们多多指教。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/2/1 14:51:00
     
     魔鬼在身边 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:2
      积分:56
      门派:XML.ORG.CN
      注册:2008/2/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给魔鬼在身边发送一个短消息 把魔鬼在身边加入好友 查看魔鬼在身边的个人资料 搜索魔鬼在身边在『 安全理论 』的所有贴子 引用回复这个贴子 回复这个贴子 查看魔鬼在身边的博客8
    发贴心情 
    非常谢谢!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/2/18 14:05:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 安全理论 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/6/17 17:27:54

    本主题贴数8,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms