VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: qq275158045

[求助] 问一个难与不难之间的问题,DLL直接远程注入hook 按键(非按键消息注入)

[复制链接]
发表于 2012-10-27 18:35:53 | 显示全部楼层
Option Explicit
                                                                 
Public Type EVENTMSG
    vKey            As Long
    sKey            As Long
    Flag            As Long
    time            As Long
End Type
Public MyMsg        As EVENTMSG
Public Const WH_KEYBOARD_LL = 13
Public Const WM_KEYDOWN = &H100
Public Const HIDE_WINDOW = 0
Public Const SW_SHOWNORMAL = 1
Public Const SW_SHOWNOACTIVATE = 4
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Dim hHookID        As Long, HookIng As Boolean
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Public Function HookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If nCode >= 0 Then
        If wParam = WM_KEYDOWN Then
            CopyMemory MyMsg, ByVal lParam, Len(MyMsg)
            If MyMsg.sKey = 82 Then
                If HookIng Then
                    '隐藏窗口
                    Call ShowWindow(FrmMain.hwnd, SW_SHOWNORMAL)
                Else
                    '显示窗口
                    Call ShowWindow(FrmMain.hwnd, HIDE_WINDOW)
                End If
                HookIng = Not HookIng
            End If
        End If
    End If
    HookProc = CallNextHookEx(hHookID, nCode, wParam, lParam)
End Function
                                                                    
Public Sub RunThread(ByVal lpParam As Long)
    Dim hWndForm    As Long
    '创建 全局键盘Hook
    hHookID = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf HookProc, lpParam, 0)
    '加载窗体
    FrmMain.Show
    Do
        DoEvents
        Sleep 1
    Loop
End Sub
                                                                        
'///Dll入口模块
Public Function DLLMain(ByVal hinstDLL As Long, ByVal fdwReason As Long, ByVal lpvReserved As Long) As Long
    If fdwReason = DLL_PROCESS_ATTACH Then                                      'dll加载
        DLLMain = 1
        '初始化
        InitVbDll
        ' 创建线程
        CreateThread AddressOf RunThread, ByVal hinstDLL
    ElseIf fdwReason = DLL_PROCESS_DETACH Then                                  'dll卸载
        AuxMem.FreeLibraryAndExitThread hinstDLL, 0
    End If
End Function
                                                                    
Sub Main()
    'XXOO
End Sub
                                                                        

点评

嗯 而且还自动退循环 挺好的。。哈哈  发表于 2012-10-27 19:42
原来FreeLibraryAndExitThread在这个时候用到  发表于 2012-10-27 19:26
按Insert 隐藏呼出窗体  发表于 2012-10-27 18:36
回复 支持 反对

使用道具 举报

发表于 2012-10-27 18:36:19 | 显示全部楼层
本帖最后由 19900603 于 2012-10-27 18:42 编辑

注意 窗体点X不能关闭  
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Call ShowWindow(Me.hwnd, HIDE_WINDOW)
    Cancel = 1
End Sub
         

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

之前忙没认真看 可以创建局部的嘛?的嘛?那样多开很不方面  发表于 2012-11-1 10:51
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-27 21:24:58 | 显示全部楼层
19900603 发表于 2012-10-27 18:36
注意 窗体点X不能关闭  
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
     ...

非常感谢您的帮助 我先消化一下代码先!
回复 支持 反对

使用道具 举报

发表于 2012-11-1 17:29:47 | 显示全部楼层
qq275158045 发表于 2012-10-27 21:24
非常感谢您的帮助 我先消化一下代码先!

先获取窗口句柄  然后 再 用 SETWINDOWLONG 子类 试试
不知道在Dll中能行不
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-1 17:59:04 | 显示全部楼层
19900603 发表于 2012-11-1 17:29
先获取窗口句柄  然后 再 用 SETWINDOWLONG 子类 试试
不知道在Dll中能行不

我把最后一个参数 0改为线程ID 貌似没无效!奇怪了!难道一定要返回给其他进程?

点评

SetWindowsHookEx 的最后一个参数? 那得改成 窗口的线程,,,  发表于 2012-11-1 18:05
哪个最后参数????  发表于 2012-11-1 18:04
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-1 19:28:00 | 显示全部楼层
@19900603  SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf HookProc, lpParam, 0)
把这个0改为窗口线程ID 然后注入没反应!
回复 支持 反对

使用道具 举报

发表于 2015-4-21 22:13:42 | 显示全部楼层
菜鸟学飞 发表于 2012-10-27 12:46
步骤:把dll注入目标进程,dllmain事件里面创建一个线程,在线程里面创建一个窗体并隐藏,在窗体的load事件里面 ...

跪了   找了n天终于找到组织了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-5 11:30

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表