您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > EXCEL-vba工程密码破解
EXCELvba工程密码破解这种方法实际是避开VBA工程密码验证,即,骗vba编辑器,该密码输入成功,请求放行。原理不多说了,先将方法公布:===================================================1.新建一个工作簿,打开,按ALT+F11,进入vba代码编辑器窗口:2.新建一个模块,“插入”--“模块”把以下代码复制进模块并保存---------------------------------------------------------------------------------------OptionExplicitPrivateDeclareSubMoveMemoryLibkernel32AliasRtlMoveMemory_(DestinationAsLong,SourceAsLong,ByValLengthAsLong)PrivateDeclareFunctionVirtualProtectLibkernel32(lpAddressAsLong,_ByValdwSizeAsLong,ByValflNewProtectAsLong,lpflOldProtectAsLong)AsLongPrivateDeclareFunctionGetModuleHandleALibkernel32(ByVallpModuleNameAsString)AsLongPrivateDeclareFunctionGetProcAddressLibkernel32(ByValhModuleAsLong,_ByVallpProcNameAsString)AsLongPrivateDeclareFunctionDialogBoxParamLibuser32AliasDialogBoxParamA(ByValhInstanceAsLong,_ByValpTemplateNameAsLong,ByValhWndParentAsLong,_ByVallpDialogFuncAsLong,ByValdwInitParamAsLong)AsIntegerDimHookBytes(0To5)AsByteDimOriginBytes(0To5)AsByteDimpFuncAsLongDimFlagAsBooleanPrivateFunctionGetPtr(ByValValueAsLong)AsLong'获得函数的地址GetPtr=ValueEndFunctionPublicSubRecoverBytes()'若已经hook,则恢复原API开头的6字节,也就是恢复原来函数的功能IfFlagThenMoveMemoryByValpFunc,ByValVarPtr(OriginBytes(0)),6EndSubPublicFunctionHook()AsBooleanDimTmpBytes(0To5)AsByteDimpAsLongDimOriginProtectAsLongHook=False'VBE6.dll调用DialogBoxParamA显示VB6INTL.dll资源中的第4070号对话框(就是输入密码的窗口)'若DialogBoxParamA返回值非0,则VBE会认为密码正确,所以我们要hookDialogBoxParamA函数pFunc=GetProcAddress(GetModuleHandleA(user32.dll),DialogBoxParamA)'标准apihook过程之一:修改内存属性,使其可写IfVirtualProtect(ByValpFunc,6,&H40,OriginProtect)0Then'标准apihook过程之二:判断是否已经hook,看看API的第一个字节是否为&H68,'若是则说明已经HookMoveMemoryByValVarPtr(TmpBytes(0)),ByValpFunc,6IfTmpBytes(0)&H68Then'标准apihook过程之三:保存原函数开头字节,这里是6个字节,以备后面恢复MoveMemoryByValVarPtr(OriginBytes(0)),ByValpFunc,6'用AddressOf获取MyDialogBoxParam的地址'因为语法不允许写成p=AddressOfMyDialogBoxParam,这里我们写一个函数'GetPtr,作用仅仅是返回AddressOfMyDialogBoxParam的值,从而实现将'MyDialogBoxParam的地址付给p的目的p=GetPtr(AddressOfMyDialogBoxParam)'标准apihook过程之四:组装API入口的新代码'HookBytes组成如下汇编'pushMyDialogBoxParam的地址'ret'作用是跳转到MyDialogBoxParam函数HookBytes(0)=&H68MoveMemoryByValVarPtr(HookBytes(1)),ByValVarPtr(p),4HookBytes(5)=&HC3'标准apihook过程之五:用HookBytes的内容改写API前6个字节MoveMemoryByValpFunc,ByValVarPtr(HookBytes(0)),6'设置hook成功标志Flag=TrueHook=TrueEndIfEndIfEndFunctionPrivateFunctionMyDialogBoxParam(ByValhInstanceAsLong,_ByValpTemplateNameAsLong,ByValhWndParentAsLong,_ByVallpDialogFuncAsLong,ByValdwInitParamAsLong)AsIntegerIfpTemplateName=4070Then'有程序调用DialogBoxParamA装入4070号对话框,这里我们直接返回1,让'VBE以为密码正确了MyDialogBoxParam=1Else'有程序调用DialogBoxParamA,但装入的不是4070号对话框,这里我们调用'RecoverBytes函数恢复原来函数的功能,在进行原来的函数RecoverBytesMyDialogBoxParam=DialogBoxParam(hInstance,pTemplateName,_hWndParent,lpDialogFunc,dwInitParam)'原来的函数执行完毕,再次hookHookEndIfEndFunction-------------------------------------------------------------------3.右击sheet1工作表,“查看代码”复制以下代码进去并保存:-------------------------------------------------------------------sub破解()ifhookthenmsgbox破解成功endifendsubsub恢复()RecoverBytesmsgbox恢复成功endsub------------------------------------4.到此,一个vba破解程序完成了,回到该工作簿窗口,文件-打开打开需要破解vba工程密码的工作簿.5.运行call破解稍后你再双击刚才要解密的VBA工程窗体.是不是如入无人之境啊,工程保护密码形同虚设啊?6.破解完成后,请右键刚破解的VBA工程,在查看工程时需要密码的地方复选框取消选择,OK.完成.7.完成后别忘了执行call恢复,恢复密码保护(恢复程序的密码保护,已被破解的文件不收影响.(请勿用于非法途径)已验证,破解成功
本文标题:EXCEL-vba工程密码破解
链接地址:https://www.777doc.com/doc-1491621 .html