【VB.NET】完全屏蔽FLASH控件右键菜单

方法可以是多种多样的,这里提两个方式,从消息钩子或者处理FLASH OCX内部函数,即注入,其实说注入也不太对,修改了几句自己程序内代码而已。

1、从消息处理是很简单的,几句代码就完成了。不过很多人还习惯于使用WIN32 API来做钩子,不是不行,只是有新特性为什么都没人用呢,拖着那么长个代码。

测试代码:

 

Public Class Form1 : Implements IMessageFilter

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Application.AddMessageFilter(Me)
    End Sub

    Public Function PreFilterMessage(ByRef m As System.Windows.Forms.Message) As Boolean Implements System.Windows.Forms.IMessageFilter.PreFilterMessage
        If m.Msg = &H204 AndAlso m.HWnd = AxShockwaveFlash1.Handle Then Return True
    End Function

End Class

 

很简单的,添加一个消息过滤器。

 

2、搞掉调用函数:

int __stdcall sub_101BB80E(HWND hWnd, int x, int y)

原型,地址(绝对)都在这呢,很好办了。修改一下内存页属性,然后……想NOP就NOP,其实还可以做更多处理的要不也不能说“注入”嘛,那不成了标题党了。写过注入的都知道,很简单的事情:

        '构造新5字节
        'jmp
        Marshal.WriteByte(NewEntry, 0, &HE9)
        '用托管函数地址计算新入口地址

        Marshal.WriteInt32(NewEntry, 1, NewFuncAddress.ToInt32 - ProcAddress.ToInt32 - 5)

这不行了么,当然你的托管函数声明还是要参考上面的。

这样做有点小题大做了,但好处是显而易见的,你可以在托管函数中处理非托管调用,想写多长代码就写吧,不必和ASM打太多交道。其实HOOK并不难,尤其是在HOOK本进程时,其实用托管代码注入其他程序也不是不行可以参考easyhook啥的

posted @ 2011-09-28 09:05  zcsor~流浪dè风  Views(830)  Comments(0)    收藏  举报