很多人说VB不能远程注入DLL,其实是错误的VB其实也能象C++等其他语言一样轻松搞定!!不信请看下面代码!更多精彩的代码请访问我的博客。
其实网上也有类似VB代码但是只有注入没有下载,而且注入通用性很差很多会出现非法操作,我的这个代码经过充分测试包括系统进程都可以正常注入和卸载,就连杀毒软件都能注入。(希望不要干坏事哦!!)
地址一:http://www.chenhui530.com
地址二:http://chenhui.ylmf.cn
近期将更新所有原创作品贴在我的博客上!Option ExplicitPrivate Const PROCESS_CREATE_THREAD = &H2
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const PROCESS_VM_WRITE = &H20
Private Const PROCESS_VM_OPERATION = &H8
Private Const MEM_COMMIT = &H1000
Private Const MEM_RELEASE = &H8000
Private Const PAGE_READWRITE = &H4
Private Const INFINITE = &HFFFFFFFF
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const TOKEN_ASSIGN_PRIMARY = &H1
Private Const TOKEN_DUPLICATE = (&H2)
Private Const TOKEN_IMPERSONATE = (&H4)
Private Const TOKEN_QUERY = (&H8)
Private Const TOKEN_QUERY_SOURCE = (&H10)
Private Const TOKEN_ADJUST_PRIVILEGES = (&H20)
Private Const TOKEN_ADJUST_GROUPS = (&H40)
Private Const TOKEN_ADJUST_DEFAULT = (&H80)
Private Const TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or TOKEN_ASSIGN_PRIMARY Or _
TOKEN_DUPLICATE Or TOKEN_IMPERSONATE Or TOKEN_QUERY Or TOKEN_QUERY_SOURCE Or _
TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)
Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const ANYSIZE_ARRAY = 1
Private Const SE_DEBUG_NAME = "SeDebugPrivilege"Private Type LUID
   lowpart As Long
   highpart As Long
End TypePrivate Type LUID_AND_ATTRIBUTES
   pLuid As LUID
   Attributes As Long
End TypePrivate Type TOKEN_PRIVILEGES
   PrivilegeCount As Long
   Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End TypePrivate Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPriv As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long                'Used to adjust your program's security privileges, can't restore without it!
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As Any, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long '获取当前进程句柄
Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType 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 TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CreateRemoteThread Lib "kernel32" (ByVal hProcess As Long, lpThreadAttributes As Any, ByVal dwStackSize As Long, lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetExitCodeThread Lib "kernel32" (ByVal hThread As Long, lpExitCode As Long) As LongPublic Function InjectDll(ByVal dwProcessId As Long, ByVal pszLibFile As String) As Boolean
   Dim hProcess As Long, hThread As Long
   Dim pszLibFileRemote As Long, exitCode As Long   On Error GoTo errhandle
   hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_CREATE_THREAD Or PROCESS_VM_OPERATION Or PROCESS_VM_WRITE, 0, dwProcessId)   If hProcess = 0 Then GoTo errhandle   Dim cch   As Long, cb As Long   cch = 1 + LenB(StrConv(pszLibFile, vbFromUnicode))
   cb = cch   pszLibFileRemote = VirtualAllocEx(hProcess, ByVal 0&, cb, MEM_COMMIT, PAGE_READWRITE)   If pszLibFileRemote = 0 Then GoTo errhandle   If (WriteProcessMemory(hProcess, ByVal pszLibFileRemote, ByVal pszLibFile, cb, ByVal 0&) = 0) Then GoTo errhandle   Dim pfnThreadRtn   As Long   pfnThreadRtn = GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA")   If pfnThreadRtn = 0 Then GoTo errhandle   hThread = CreateRemoteThread(hProcess, ByVal 0&, 0&, ByVal pfnThreadRtn, ByVal pszLibFileRemote, 0, 0&)   If (hThread = 0) Then GoTo errhandle   WaitForSingleObject hThread, INFINITE   GetExitCodeThread hThread, exitCode   InjectDll = CBool(exitCode)errhandle:   If pszLibFileRemote <> 0 Then
       VirtualFreeEx hProcess, ByVal pszLibFileRemote, 0, MEM_RELEASE
       InjectDll = False
       Exit Function
   End If
   If hThread <> 0 Then
       CloseHandle hThread
       InjectDll = False
       Exit Function
   End If
   If hProcess <> 0 Then
       CloseHandle hProcess
       InjectDll = False
       Exit Function
   End If
   InjectDll = True
End Function
 

解决方案 »

  1.   

    Public Function UnloadDll(ByVal dwProcessId As Long, ByVal pszLibFile As String) As Boolean
       Dim hProcess As Long, hThread As Long
       Dim pszLibFileRemote As Long, exitCode As Long
        
       On Error GoTo errhandle
       hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_CREATE_THREAD Or PROCESS_VM_OPERATION Or PROCESS_VM_WRITE, 0, dwProcessId)
       If hProcess = 0 Then GoTo errhandle
        
       Dim cch   As Long, cb As Long
        
       cch = 1 + LenB(StrConv(pszLibFile, vbFromUnicode))
       cb = cch
        
       pszLibFileRemote = VirtualAllocEx(hProcess, ByVal 0&, cb, MEM_COMMIT, PAGE_READWRITE)
       
       If pszLibFileRemote = 0 Then GoTo errhandle   If (WriteProcessMemory(hProcess, ByVal pszLibFileRemote, ByVal pszLibFile, cb, ByVal 0&) = 0) Then GoTo errhandle
      
       Dim pfnThreadRtn   As Long
       pfnThreadRtn = GetProcAddress(GetModuleHandle("Kernel32"), "GetModuleHandleA")
           If pfnThreadRtn = 0 Then GoTo errhandle
        
       hThread = CreateRemoteThread(hProcess, ByVal 0&, 0&, ByVal pfnThreadRtn, ByVal pszLibFileRemote, 0, pszLibFileRemote)
       If (hThread = 0) Then GoTo errhandle   WaitForSingleObject hThread, INFINITE
       GetExitCodeThread hThread, exitCode
       VirtualFreeEx hProcess, pszLibFileRemote, 0, MEM_RELEASE
       CloseHandle hThread
       
       pfnThreadRtn = GetProcAddress(GetModuleHandle("Kernel32"), "FreeLibrary")
       hThread = CreateRemoteThread(hProcess, ByVal 0&, 0&, ByVal pfnThreadRtn, ByVal exitCode, 0, pszLibFileRemote)
       WaitForSingleObject hThread, INFINITE
       GetExitCodeThread hThread, exitCodeerrhandle:
       If pszLibFileRemote <> 0 Then
           VirtualFreeEx hProcess, ByVal pszLibFileRemote, 0, MEM_RELEASE
           UnloadDll = False
           Exit Function
       End If
       If hThread <> 0 Then
           CloseHandle hThread
           UnloadDll = False
           Exit Function
       End If
       If hProcess <> 0 Then
           CloseHandle hProcess
           UnloadDll = False
           Exit Function
       End If
       UnloadDll = CBool(exitCode)
    End FunctionPublic Function EnablePrivilege() As Boolean
       Dim hdlProcessHandle As Long
       Dim hdlTokenHandle As Long
       Dim tmpLuid As LUID
       Dim tkp As TOKEN_PRIVILEGES
       Dim tkpNewButIgnored As TOKEN_PRIVILEGES
       Dim lBufferNeeded As Long
       Dim lp As Long
       hdlProcessHandle = GetCurrentProcess()
       lp = OpenProcessToken(hdlProcessHandle, TOKEN_ALL_ACCESS, hdlTokenHandle)
       lp = LookupPrivilegeValue(vbNullString, "SeDebugPrivilege", tmpLuid)
       tkp.PrivilegeCount = 1
       tkp.Privileges(0).pLuid = tmpLuid
       tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
       EnablePrivilege = AdjustTokenPrivileges(hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded)
    End FunctionPublic Function KillProcess(ByVal ProcessID As String) As Boolean '结束指定进程
       Dim lPHand As Long, TMBack As Long
       
       lPHand = OpenProcess(1&, True, CLng(ProcessID)) '获取进程句柄
       TMBack = TerminateProcess(lPHand, 0&) '关闭进程
       If TMBack <> 0 Then
           KillProcess = True
       Else
           KillProcess = False
       End If
       CloseHandle lPHand
    End Function
      

  2.   

    WIN32ASM zhong yong ASM shi xian le, hao xiang mei you unload, lz zhen niu.
      

  3.   

    这么多人回复,难道只有我真正使用了这段代码吗?其实这段代码中InjectDll和UnloadDll这两个函数还有点小bug,会出现卸载了dll但是函数返回false的情况,在此提醒一下,希望需要这段代码的朋友们使用时自行修改一下再用。在此真诚感谢楼主,这段代码使我自己写的一个进程管理器功能更加强大
      

  4.   

    pscode.com/vb上有
    http://pscode.com/vb/scripts/ShowCode.asp?txtCodeId=67319&lngWId=1
    http://pscode.com/vb/scripts/ShowCode.asp?txtCodeId=62338&lngWId=1
      

  5.   

    两个疑问:
    1、 远程注入dll 后,,怎么让注入的dll或exe文件执行呢?
        光注入了,不知道怎么运行exe或dll 呀
    2、当被注入的程序关闭以后,注入的dll或exe也会被关闭了,,怎么样作到被注入的程序关闭以后,,注入的dll或exe仍然运行,且重新启动以后仍然会附身到别的进程里呢??3、以上有点木马的味道了
      

  6.   

    我个人觉得用Webservice来得快来得安全!!!远程栈根很容易导至系统完完!
      

  7.   

    好东西.................不知楼主可否发一份原码给我研究研究?
    E-mail:[email protected]
      

  8.   

    楼主有时间加我QQ呗,你QQ我加不上啊~~~这段代码要是有点注释就完美了啊