首页 > 其他分享 >忘记工程密码解决

忘记工程密码解决

时间:2024-10-24 11:02:32浏览次数:1  
标签:Function Dim 工程 hook ByVal Long 密码 忘记 MyDialogBoxParam

Option Explicit
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
        (Destination As Long, Source As Long, ByVal Length As Long)


Private Declare Function VirtualProtect Lib "kernel32" (lpAddress As Long, _
        ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
        
Private Declare Function GetModuleHandleA Lib "kernel32" (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 DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As Long, _
        ByVal pTemplateName As Long, ByVal hWndParent As Long, _
        ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer
        
Dim HookBytes(0 To 5) As Byte
Dim OriginBytes(0 To 5) As Byte
Dim pFunc As Long
Dim Flag As Boolean


Private Function GetPtr(ByVal Value As Long) As Long
    '获得函数的地址
    GetPtr = Value
End Function


Public Sub RecoverBytes()
    '若已经hook,则恢复原API开头的6字节,也就是恢复原来函数的功能
    If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6
End Sub


Public Function Hook() As Boolean
    Dim TmpBytes(0 To 5) As Byte
    Dim p As Long
    Dim OriginProtect As Long
   
    Hook = False
   
    'VBE6.dll调用DialogBoxParamA显示VB6INTL.dll资源中的第4070号对话框(就是输入密码的窗口)
    '若DialogBoxParamA返回值非0,则VBE会认为密码正确,所以我们要hook DialogBoxParamA函数
    pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")
   
    '标准api hook过程之一: 修改内存属性,使其可写
    If VirtualProtect(ByVal pFunc, 6, &H40, OriginProtect) <> 0 Then
        '标准api hook过程之二: 判断是否已经hook,看看API的第一个字节是否为&H68,
        '若是则说明已经Hook
        MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6
        If TmpBytes(0) <> &H68 Then
            '标准api hook过程之三: 保存原函数开头字节,这里是6个字节,以备后面恢复
            MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6
            '用AddressOf获取MyDialogBoxParam的地址
            '因为语法不允许写成p = AddressOf MyDialogBoxParam,这里我们写一个函数
            'GetPtr,作用仅仅是返回AddressOf MyDialogBoxParam的值,从而实现将
            'MyDialogBoxParam的地址付给p的目的
            p = GetPtr(AddressOf MyDialogBoxParam)
            
            '标准api hook过程之四: 组装API入口的新代码
            'HookBytes 组成如下汇编
            'push MyDialogBoxParam的地址
            'ret
            '作用是跳转到MyDialogBoxParam函数
            HookBytes(0) = &H68
            MoveMemory ByVal VarPtr(HookBytes(1)), ByVal VarPtr(p), 4
            HookBytes(5) = &HC3
            
            '标准api hook过程之五: 用HookBytes的内容改写API前6个字节
            MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6
            '设置hook成功标志
            Flag = True
            Hook = True
        End If
    End If
End Function

Private Function MyDialogBoxParam(ByVal hInstance As Long, _
        ByVal pTemplateName As Long, ByVal hWndParent As Long, _
        ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer
    If pTemplateName = 4070 Then
        '有程序调用DialogBoxParamA装入4070号对话框,这里我们直接返回1,让
        'VBE以为密码正确了
        MyDialogBoxParam = 1
    Else
        '有程序调用DialogBoxParamA,但装入的不是4070号对话框,这里我们调用
        'RecoverBytes函数恢复原来函数的功能,在进行原来的函数
        RecoverBytes
        MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _
                           hWndParent, lpDialogFunc, dwInitParam)
        '原来的函数执行完毕,再次hook
        Hook
    End If
End Function

  

标签:Function,Dim,工程,hook,ByVal,Long,密码,忘记,MyDialogBoxParam
From: https://www.cnblogs.com/luoye00/p/18499190

相关文章

  • 如何给pdf文档加密码保护?(2024全新)6个靠谱pdf加密方法分享
    如何给pdf文档加密码保护?日常办公生活中,我们经常需要使用到pdf文件。作为一个打工人,我们经常需要进行文件传输交流,当你将PDF文件分享到一个群或者人数较多的平台时,为了不让其他人随意查看文件,和保护文件隐私信息不被泄露,我们会选择给文件进行加密保护。那么要如何给PDF文件进行......
  • 2024年资源勘探与地下工程技术国际论坛 (REUET 2024) 2024 International Symposium
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus三、大会介绍2024年资源勘探与地下工程技术国际论坛(REUET2024)将作为主会议第六届智能控制......
  • 一分钟分辨常量指针和指针常量,再也不会忘记的那种
    你只需要记住下面这句话就可以了:**将变量定义式从右往左翻译为英文,其中的"*"译为pointerto**下面开始实践。常量指针/指向常量的指针(PointertoConstant)这种指针不能通过它修改所指向的字符内容,但指针本身可以指向其他地址。constchar*p1;p1isapointertochar......
  • 捷配分享工程师常常弄混的总线分类汇总
    总线是计算机内部用于传输数据、地址和控制信号的共享通道。它由一组导线组成,负责在不同硬件组件间传递信息。总线的分类按功能分:数据总线:负责传输实际的数据。地址总线:用于指定数据的来源或目的地。控制总线是传输控制信号,如读写指令。按传输方式分:串行总线:数据逐位......
  • Nginx配置auth_basic认证,让用户访问指定页面时输入用户名密码认证
    配置方法:[root@localhost~]#yum-yinstallhttpd-toolsLoadedplugins:fastestmirrorLoadingmirrorspeedsfromcachedhostfileResolvingDependencies-->Runningtransactioncheck--->Packagehttpd-tools.x86_640:2.4.6-99.el7.centos.1willbeinstall......
  • 椭圆曲线密码学(ECC)和RSA对比
    椭圆曲线密码学(ECC)和RSA都是非对称加密算法,它们都使用公钥和私钥来实现加密和解密。不过,它们在数学原理和实现方式上存在一些差异:数学基础:RSA:基于大整数因数分解的难题,其安全性依赖于将一个大整数分解为两个大质数的乘积的难度。ECC:基于椭圆曲线离散对数问题(ECDLP),其安全......
  • 剑来-2024秋软件工程第一小组项目展示
    |作业所属课程|班级的链接||---------|------------||作业要求|https://edu.cnblogs.com/campus/fzu/SE2024/homework/13290||作业的目标|开发一个基于LLM大模型接口的软件,为传统的软件赋予全新的体验和功能。||团队名称|银河战舰|......
  • 招聘爬虫工程师(20-30k)
    岗位职责:1、负责设计、开发、维护爬虫系统;2、参与多平台信息的抓取和分析;3、建立完整的数据获取、解析、入库和监控流程,并不断优化迭代完善;4、设计爬虫反屏蔽规则,提升网页抓取的效率和质量;5、利用主流的大数据相关技术,对抓取后的网页数据进行清洗、存储等;并持续优化平台,......
  • 网站数据库密码怎么修改?
    1.登录数据库管理工具使用当前的数据库管理员账号和密码登录到数据库管理工具,如MySQL的phpMyAdmin、SQLServerManagementStudio(SSMS)或PostgreSQL的pgAdmin。2.选择目标数据库在数据库管理工具中,选择需要修改密码的数据库。3.执行SQL语句根据不同的数......
  • 大厂面试Java工程师为什么总爱问Spring相关问题?
    因为Spring框架自从诞生以来就一直备受开发者青睐,很多Java程序员实质上就是Spring程序员,它涵盖了Spring、Springboot、SpringCloud等诸多解决方案,一般我们都会统称为Spring全家桶!出于Spring框架在Java开发者心中中的统治地位,所以不管是面试还是工作,Spring都是绕不开的重点也是......