| 网站首页 | VB.Net实例分析 | .Net技术文摘 | 下载中心 | VB.Net书籍笔记 | .Net源码 | VBS脚本与组件调用 | Windows2008技术文摘 | 给我们留言 | 
最新公告:

  没有公告

您现在的位置: 乐博网 >> VB.Net实例分析 >> 安全编程 >> 实例分析正文
最新推荐 更多内容
[组图]突破Disable按钮的限制
突破Disable按钮的限制
作者:Larry Nung    来源:Level Up     更新时间:2009-11-14

突破Disable按钮的限制 简介:
当我们程式中有部份功能试图不让使用者使用时,通常会把按钮的属性给Disable掉,让使用者无法执行特定的功能(逻辑:无法点击,也就无法触发按钮的事件)。但这样做真的就安全吗?答案是否定的。其实光是把按钮给Disable掉是很容易破解的,目前就已有许多破解工具 (e.x. 按钮突破大师),因此在编码上最好还是要在程式中自行加上判断,让按钮就算被突破也无法执行。

突破Disable按钮的封锁与限制
欲突破Disable按钮的封锁与限制,其实很简单。只要透过Win32 API即可达成。

需要使用的API有:

•ChildWindowFromPoint
•GetForegroundWindow
•IsWindowEnabled
•EnableWindow
•GetCursorPos
•ScreenToClient
 

程式流程如下:

image

 

程式範例如下: '更多.net源码和教程,来自[乐博网 www.lob.cn]

MFC

void CBtnEnableDlg::OnButton1() 
{
  SetTimer(1,100,NULL);
}
 
void CBtnEnableDlg::OnTimer(UINT nIDEvent) 
{
 HWND hWnd,hWndChild;
  POINT point;
 
    hWnd=::GetForegroundWindow();
    GetCursorPos(&point);
    ::ScreenToClient(hWnd,&point);
    hWndChild=::ChildWindowFromPoint(hWnd,point);
    if(::IsWindowEnabled(hWndChild)==0)
    {            
    ::EnableWindow(hWndChild,1);
  }             
    
    CDialog::OnTimer(nIDEvent);
}

 

 

VB.NET

Imports System.Runtime.InteropServices
 
Public Class Form1
 
    <DllImport("user32.dll")> _
Private Shared Function ChildWindowFromPoint(ByVal hWndParent As IntPtr, ByVal Point As Point) As IntPtr
    End Function
 
    <DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function GetForegroundWindow() As IntPtr
    End Function
 
    <DllImport("user32.dll")> _
Private Shared Function IsWindowEnabled(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
    End Function
 
    Declare Function EnableWindow Lib "user32" (ByVal hwnd As IntPtr, ByVal fEnable As Integer) As Integer
 
    <DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function ScreenToClient(ByVal hWnd As IntPtr, ByRef lpPoint As Point) As Boolean
    End Function
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim p As Point = MousePosition
        Dim hWnd, hWndChild As IntPtr
        hWnd = GetForegroundWindow()
        ScreenToClient(hWnd, p)
        hWndChild = ChildWindowFromPoint(hWnd, p)
 
        If Not IsWindowEnabled(hWndChild) Then
            EnableWindow(hWndChild, 1)
        End If  '更多.net源码和教程,来自[乐博网 www.lob.cn]
    End Sub
 
    Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
        Timer1.Enabled = CheckBox1.Checked
    End Sub
End Class

 

执行后我们把滑鼠移到Disable的按钮上,按钮就会被强制变回Enable状态了。变回Enable的按钮也变得可以按下与执行。

执行步骤
Step1.开启按钮突破程式

image

 

Step2.开启欲突破的程式

image

 

Step3.启动按钮突破功能

image

 

Step4.把滑鼠移到欲突破的按钮上

当滑鼠移到欲突破的Disable按钮上,按钮会被强制设回Enable。

image

 

P.S.

上述范例对.NET程式的按钮无效,请使用非.NET程式来测试。
虽范例无法达到突破.NET按钮,但这不代表.NET程式不需注意这问题。因为能突破.NET按钮的工具确实存在(e.x. Enable.NET)。
虽范例只能把Disable按钮设为Enable,但其实运用同样的概念也可以把隐藏的元件显示出来。

  • 上一篇:

  • 下一篇: 没有了
  • 【字体: 】【打印此文】【关闭窗口
      相关文章:(只显示最新16条)
    按钮上画图的实现方法
    按钮定位坐标和大小的实例
    Button控件事件实例
    按钮控件事件实例
    VB.Net获取按钮大小和位置的实例
    Button控件上画图的实例
    设置Button控件背景的实例
    VB.Net窗体中动态增加Button控件的实例
    修改Button控件字体的实例

    | 设为首页 | 加入收藏 | 联系站长 | | 友情链接 | 版权申明 |
    乐博网欢迎各种媒体转载我们的原创作品[转载请注明出处];我们鼓励更多VB.Net开发者一起加入研究与探讨;如发现文章访问错误、内容错误或版权疑问、内容有违相关法律(如涉及政治、色情、反动或散布虚假有害信息)等情况,请及时向我们举报,我们将及时纠正!
    联系邮箱:Shiny#vip.qq.com (#替换为@) QQ交流群: 40797788 [闽ICP备05014267号]