个人管理功能

在CSDN Blog撰写技术文章,即有机会入选CSDN技术中心,现在就去免费注册!已注册用户,点击登录

搜索
热门标签
专题历史

有人说SOA是一种IT策略,有人说SOA是一种架构理念,还有人说SOA是一种服务。SOA到底是什么?它将带来什么?软件产业的变革亦或是新的机遇下的挑战?业界权威专家带领我们一起去深究,去探索。BEA三位重量级专家与您共同探讨SOA

随着WPF/E更名为正式名称Silverlight,以及Silverlight 1.1 Alpha 版本的发布,答案变得清晰,而且令人兴奋! - 一个跨操作系统,跨浏览器的Web应用平台出现了。Silverlight 这样一个4.5MB的浏览器插件(1.1 Alpha文件)是如何做到的这些的?周岳: SilverLight-Web应用的一道强光

中国移动用户数量在大踏步地发展与增长,根据产业部的数据,仅三月就新增了670万户。预估计6月份之后,中国很快将迎来第五亿手机用户(平均不到3人拥有一台手机)而J2ME做为最重要的手机跨平台技术,凭借Java平台以其良好的开放性和支持能力,得到了众多手机厂商的支持。对众多开发者来说,J2ME程序易于移植,轻松实现“一次编写,到处运行”。J2ME系列开发专题,将带你从最基本的工具安装,环境配置开始,进入移动应用开发的世界。
 
CSDN移动开发系列之-“J2ME开发实训”

7月31日-8月1日,即将在上海召开甲骨文全球大会•亚太地区会议同期举行的甲骨文开发者大会,这是一项付费参加的面向开发人员的活动。在甲骨文开发者大会期间,您将听到世界一流的专家讲述如何使用Java、.NET、XML和PL/SQL以及Ajax、PHP、Spring、Groovy on Rails等流行技术来简化开发过程。在为期两天的甲骨文开发者大会中,您将能够提高自身的开发技能,扩充知识,参加几十场由专家主持的深入细致的技术讲座并在专家的辅导下进行上机操作、了解高级技能和获得详细指导。在甲骨文开发者大会期间,您有机会直接向业界一流的技术专家和开发人员请教。欢迎参加甲骨文全球大会·2007·亚太地区开发者大会

2007年6月29日,自由软件基金会宣布,其创始人Richard Stallman将在GNU的网站上,在本周太平洋时间星期五上午9点通过视频发布GPLv3。本来,GPL并不是所有开源组织所认可的协议。其从出现以来一直存在争议,GPL被认为是一种“病毒式”的协议,BSD的fans和老牌Unix黑客们认为,他们编写Unix的年头都比GPL声明要长得多,他们更愿意采用比GPL更加的自由的BSD协议。今天,开源社区中有70%左右的项目采用了GPL。很多在开源社区的老牌黑客们认为,Richard Stallman所鼓吹开源软件的言行与当年卡尔·马克思号召产业无产阶级反抗工作的努力如出一辙。在GPLv3的第三版修订案发布时,开源软件团体中的许多成员都反对这种协议。尤其是Linux的核心开发小组,其中29个高级架构师有28个反对这个协议。Linus Torvalds称这个协议有“宗教性质”,并公开反对。而整个软件行业特别是开源社区对GPLv3的争论也愈演愈烈。GPLv3:大教堂和集市的新一轮对抗

2007年7月14日由CSDN与ThoughtWorks联合主办的第二届“敏捷中国”技术大会在北京丽亭华苑酒店召开,多位开源社区和ThoughtWorks公司的技术领袖即将带来精彩的演讲。本次“敏捷中国”技术大会集中展现塑造敏捷企业所需的方方面面:业界领先的敏捷项目管理工具;极大提升软件开发效率的新语言和新框架;数据库领域的敏捷实践;全方位的敏捷项目管理指导;还有身临其境的亲身体验。来自开源社区和ThoughtWorks公司的技术领导者们将带领听众全面感受敏捷企业。“敏捷中国大会”现场直击

从2004年起,在每年的夏季,CSDN都会举办面向中国程序员的大型网上调查活动。这是中国样本最丰富的开发者社区调查,持续、全面和深入地反映了中国开发者社群自身状况、各项技术、工具、产品的使用状况和发展趋势,是完整、准确地了解中国开发者市场的重要参考资料。本次调查覆盖基础信息、.NET、Java、C/C++、Web开发、数据库应用开发、软件工程及项目管理、移动及嵌入式开发、开放源代码、企业信息化等10个领域。还有惊喜大奖等着你哦,赶快进入吧! 2007中国软件开发者大调查正式启动

推荐作者
  • 大宝大宝

    时间如流水,知惜方成功。

  • SkymanSkyman

    江苏人氏,梅兰芳之老乡。现游学渝州之最...

  • ralph623ralph623

新进作者
  • 冲 s冲 s

  • 小鱼小鱼

  • 棱角棱角

    多年J2EE构架设计与开发经验,专注于企业信息系统建设,精通Java设计模式,并能熟练的运用到企业开发中。 精通Struts与Spring框架。数据库方面精通Oracle数据库,从事过数据库方面的开发以及oracle优化方面的工作。

最新技术图书推荐
最新Viking(维金)病毒专杀工具,纯VB编写。

发表日期:2007-11-05
更新日期:2007-11-05
作者文章阅读次数:17577

源自:塞北雪貂 (个人网站) 标签:其他

您认为本文应该得        共有25人参与打分打印|收藏|讨论|投诉

Viking的肆虐让很多受害者忍无可忍,更可气的是专业软件公司提供的专杀工具竟然无法彻底清除。 无奈之余自己动手写了一个,请需要的朋友到这里下载:

      (声明:魏滔序原创,转贴请注明出处。)
      Viking的肆虐让很多受害者忍无可忍,更可气的是专业软件公司提供的专杀工具竟然无法彻底清除。
      无奈之余自己动手写了一个,请需要的朋友到这里下载:http://www.chenoe.com
       该工具可以有效解除被感染的exe中的病毒并还原exe文件,网上的大部分工具是直接删除exe文件。另外,本工具还具有Viking免疫功能。

        下载后直接运行即可查杀,如果查杀几次都有无法关闭的进程的,重新启动一下计算机继续查杀应该可以杀掉。直到病毒数为0时为止。

        另外提供该工具中结束进程部分的代码,结束进程一般采用TerminateProcess函数,但是对于比较顽固的进程就要用非常规的手段来Kill了。
        我的方法是,先提高本程序为Debug级别的权限。再用TerminateProcess关闭,如果失败就枚举该进程中的线程并用TerminateThread关闭。然后再用TerminateProcess结束进程。这样就基本上可以关闭99%的非系统进程了。
        还有,对于被注入了病毒dll的进程,要先枚举进程中的模块并判断。然后决定是否Kill,Kill方法同上。

以下为进程、线程、模块相关的代码:
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Thread32First Lib "KERNEL32.dll" (ByVal hSnapshot As Long, ByRef lpte As THREADENTRY32) As Long
Private Declare Function Thread32Next Lib "KERNEL32.dll" (ByVal hSnapshot As Long, ByRef lpte As THREADENTRY32) As Long
Private Declare Function Module32First Lib "KERNEL32.dll" (ByVal hSnapshot As Long, ByRef lppe As MODULEENTRY32) As Long
Private Declare Function Module32Next Lib "KERNEL32.dll" (ByVal hSnapshot As Long, ByRef lpme As MODULEENTRY32) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function OpenThread Lib "KERNEL32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwThreadId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Const TH32CS_SNAPPROCESS = &H2
Private Const TH32CS_SNAPTHREAD = &H4
Private Const TH32CS_SNAPMODULE As Long = &H8

Private Const PROCESS_TERMINATE As Long = (&H1)
Private Const MAX_PATH As Integer = 260

Private 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 * MAX_PATH
End Type

Private 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

Private Type THREADENTRY32                                          '线程
    dwsize   As Long
    cntusage   As Long
    th32threadID   As Long
    th32OwnerProcessID   As Long
    tpBasePri   As Long
    tpDeltaPri   As Long
    dwFlags   As Long
End Type

Public Function KillThread(ByVal ProcessID As Long) As Boolean
    Dim hThread As Long, r As Long, i As Long
    Dim TList() As THREADENTRY32

    TList = GetThreadList(ProcessID)

    For i = 0 To UBound(TList)
        With TList(i)
            hThread = OpenThread(PROCESS_TERMINATE, False, .th32threadID)    '获取进程句柄
            If hThread <> 0 Then
                r = TerminateThread(hThread, 0)            '关闭进程
            End If
        End With
    Next
    KillThread = r <> 0
End Function


Public Function KillProcess(ByVal ProcessName As String, Optional ByVal bKillThread As Boolean) As Boolean
    Dim hProcess As Long, r As Long
    Dim PList() As PROCESSENTRY32
    Dim Name As String, i As Long

    PList = GetProcessList

    For i = 0 To UBound(PList)
        With PList(i)
            Name = Left(.szExeFile, InStr(1, .szExeFile, vbNullChar) - 1)
            DoEvents
            Form1.lbState.Caption = "正在内存查毒: " & Name
            r = InModule(.th32ProcessID, ProcessName)

            If LCase(Trim(Name)) = LCase(Trim(ProcessName)) Or r Then
                hProcess = OpenProcess(PROCESS_TERMINATE, False, .th32ProcessID)    '获取进程句柄
                If hProcess <> 0 Then
                    r = TerminateProcess(hProcess, 0)      '关闭进程
                    If r Then
                        AddLog Name, "已结束进程"
                    Else
                        If bKillThread Then
                            If KillThread(.th32ProcessID) Then
                                AddLog Name, "已结束线程"
                            Else
                                AddLog Name, "线程结束失败"
                            End If
                        End If
                        r = TerminateProcess(hProcess, 0)  '关闭进程
                        If r Then
                            AddLog Name, "已结束进程"
                        Else
                            AddLog Name, "进程结束失败"
                        End If
                    End If
                Else
                    AddLog Name, "无法获得进程句柄"
                End If
            End If

        End With
    Next
End Function

Private Function GetThreadList(ByVal ProcessID As Long) As THREADENTRY32()
    Dim i As Long
    Dim TList() As THREADENTRY32
    Dim TE32 As THREADENTRY32
    Dim hThreadSnap As Long
    Dim TheLoop As Long

    hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, ProcessID)
    TE32.dwsize = Len(TE32)

    TheLoop = Thread32First(hThreadSnap, TE32)
    While TheLoop <> 0

        If TE32.th32OwnerProcessID = ProcessID Then
            ReDim Preserve TList(i)
            TerminateThread TE32.th32threadID, 0
            TList(i) = TE32
            i = i + 1
        End If

        TheLoop = Thread32Next(hThreadSnap, TE32)
    Wend

    CloseHandle hThreadSnap
    GetThreadList = TList
End Function

Private Function GetProcessList() As PROCESSENTRY32()
    Dim i As Long
    Dim PList() As PROCESSENTRY32
    Dim PE32 As PROCESSENTRY32
    Dim hProcessSnap As Long
    Dim TheLoop As Long

    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
    PE32.dwsize = Len(PE32)

    TheLoop = Process32First(hProcessSnap, PE32)
    While TheLoop <> 0
        ReDim Preserve PList(i)
        PList(i) = PE32
        i = i + 1
        TheLoop = Process32Next(hProcessSnap, PE32)
    Wend

    CloseHandle hProcessSnap
    GetProcessList = PList
End Function

Private Function GetModuleList(ByVal ProcessID As Long) As MODULEENTRY32()
    Dim i As Long
    Dim MList() As MODULEENTRY32
    Dim ME32 As MODULEENTRY32
    Dim hModuleSnap As Long
    Dim TheLoop As Long

    hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessID)
    ME32.dwsize = Len(ME32)

    TheLoop = Module32First(hModuleSnap, ME32)
    While TheLoop <> 0
        ReDim Preserve MList(i)
        MList(i) = ME32
        i = i + 1
        TheLoop = Module32Next(hModuleSnap, ME32)
    Wend

    CloseHandle hModuleSnap
    GetModuleList = MList
End Function

Private Function InModule(ByVal ProcessID As Long, ByVal ModuleName As String) As Boolean
    Dim i As Long
    Dim MList() As MODULEENTRY32
    Dim Name As String
   
    On Error GoTo Err:

    MList = GetModuleList(ProcessID)

    For i = 0 To UBound(MList)
        With MList(i)
            Name = Left(.szModule, InStr(1, .szModule, vbNullChar) - 1)
            If LCase(Name) = LCase(ModuleName) Then
                InModule = True
                Exit For
            End If
        End With
    Next
Err:
End Function

'这个是显示的杀毒记录
Sub AddLog(txt1 As String, txt2 As String)
    Dim Item As ListItem
    Set Item = Form1.lv.ListItems.Add(, , txt1)
    Item.SubItems(1) = txt2
End Sub

以下为设置本程序权限级别的代码,在程序加载前调用EnableDebugPrivilege即可:
Private Type LARGE_INTEGER
    lowpart As Long
    highpart As Long
End Type

Private Const ANYSIZE_ARRAY As Long = 1
Private Const SE_PRIVILEGE_ENABLED As Long = &H2
Private Const TOKEN_ADJUST_PRIVILEGES As Long = &H20
Private Const TOKEN_QUERY As Long = &H8

Private Type LUID_AND_ATTRIBUTES
    LUID As LARGE_INTEGER
    Attributes As Long
End Type

Private Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type

Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, ByRef lpLuid As LARGE_INTEGER) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, ByRef NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, ByRef PreviousState As Long, ByRef ReturnLength As Long) As Long
Private Declare Function GetCurrentProcess Lib "KERNEL32.dll" () As Long
Private Declare Function GetCurrentProcessId Lib "KERNEL32.dll" () As Long

Private Declare Function CloseHandle Lib "KERNEL32.dll" (ByVal hObject As Long) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, ByRef TokenHandle As Long) As Long
Private Declare Function GetLastError Lib "KERNEL32.dll" () As Long


Function EnableDebugPrivilege() As Boolean
    Dim TP As TOKEN_PRIVILEGES
    Dim hToken As Long, r As Long, e As Long

    r = OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken)
    e = GetLastError
'    Err.Raise 6
    If r And Not e Then
        r = LookupPrivilegeValue(vbNullString, "SeDebugPrivilege", TP.Privileges(0).LUID)
        e = GetLastError

        If r And Not e Then
            TP.PrivilegeCount = 1
            TP.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED

            r = AdjustTokenPrivileges(hToken, False, TP, LenB(TP), 0, 0)
            EnableDebugPrivilege = GetLastError = 0
        End If
    End If
    Call CloseHandle(hToken)
End Function

您认为本文应该得        共有25人参与打分打印|收藏|讨论|投诉

暂无图片

学无止境

评论

CSDN技术中心团队官方Blog:http://blog.csdn.net/techcenter/,反馈邮箱:techcenter at csdn.net (注意:请把 at 换成@)


网站简介广告服务网站地图帮助联系方式诚聘英才English问题报告

北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号

世纪乐知(北京)网络技术有限公司 提供技术支持

Copyright © 2000-2008, CSDN.NET, All Rights Reserved