【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啥的

浙公网安备 33010602011771号