VB程序的破解思路
VB程序使很多朋友感到头痛,主要是VB程序反编译时产生大量的垃圾代码,而且也不到有
用的信息,在动态调试过程中,垃圾代码太多,往往迷失于冗余的代码中,不到方向。
用的信息,在动态调试过程中,垃圾代码太多,往往迷失于冗余的代码中,不到方向。
记住VB常用的一些函数:
MultiByteToWideChar 将ANSI字符串转换成UNICODE字符
WideCHatToMultiByte 将UNICODE字符转换成ANSI字符
rtcT8ValFromBstr 把字符转换成浮点数
vbaStrCmp 比较字符串(常用断点)
vbaStrComp 字符串比较(常用断点)
vbaStrCopy 复制字符串
StrConv 转换字符串
vbaStrMove 移动字符串
__vbaVarCat 连接字符串
rtcMidCharVar 在字符串中取字符或者字符串!vba计算字符串长度
MultiByteToWideChar 将ANSI字符串转换成UNICODE字符
WideCHatToMultiByte 将UNICODE字符转换成ANSI字符
rtcT8ValFromBstr 把字符转换成浮点数
vbaStrCmp 比较字符串(常用断点)
vbaStrComp 字符串比较(常用断点)
vbaStrCopy 复制字符串
StrConv 转换字符串
vbaStrMove 移动字符串
__vbaVarCat 连接字符串
rtcMidCharVar 在字符串中取字符或者字符串!vba计算字符串长度
__vbaLenBstr 取字符串的长度
vbaVarTstNe 变量比较
vbaVarTstEq 变量比较
rtcMsgBox 显示对话框
VarBstrCmp 比较字符串
VarCyCmp 比较字符串
用 OD载入脱壳后的程序,在命令行输入:bpx hmemcpy,然后回车,会弹出程序运行调用的所有的函数,在每个函数上设置好断点!说明:我破VB程序喜欢用这个断点设置方法,通过一步步跟踪,基本可以把握程序保护的思路,所以我破VB程序基本用这个断点,当然你可以用其它的断点,只要能到关键,任何断点都是用意义的。
关于VB的程序,注册没有提示的二个办法:
第一(提示错误):用GetVBRes来替换里面的提示串,一般是以'111111','222222'之类的替换
vbaVarTstNe 变量比较
vbaVarTstEq 变量比较
rtcMsgBox 显示对话框
VarBstrCmp 比较字符串
VarCyCmp 比较字符串
用 OD载入脱壳后的程序,在命令行输入:bpx hmemcpy,然后回车,会弹出程序运行调用的所有的函数,在每个函数上设置好断点!说明:我破VB程序喜欢用这个断点设置方法,通过一步步跟踪,基本可以把握程序保护的思路,所以我破VB程序基本用这个断点,当然你可以用其它的断点,只要能到关键,任何断点都是用意义的。
关于VB的程序,注册没有提示的二个办法:
第一(提示错误):用GetVBRes来替换里面的提示串,一般是以'111111','222222'之类的替换
因为:VB,用的字来存放提示还有加了点东东,我们用的工具一般是字节分析。换成'22222'之类的就是字节了,用静态分析,就有你该的串了。GetVBRes(网上很多,自己下吧)
第二(没有提示):用vbde这个工具(不知道,有没有用过DEDE,是一样思路),主要是出破解的按钮窗口的位置,来进行跟踪。
先给出修改能正确反编译VB程序的W32DASM的地址:
======================
offsets 0x16B6C-0x16B6D
修改机器码为: 98 F4
======================
VB程序的跟踪断点:
第二(没有提示):用vbde这个工具(不知道,有没有用过DEDE,是一样思路),主要是出破解的按钮窗口的位置,来进行跟踪。
先给出修改能正确反编译VB程序的W32DASM的地址:
======================
offsets 0x16B6C-0x16B6D
修改机器码为: 98 F4
======================
VB程序的跟踪断点:
============
MultiByteToWideChar,
rtcR8ValFromBstr,
WideCharToMultiByte,
__vbaStrCmp
__vbaStrComp
__vbaStrCopy
__vbaStrMove
__vbaVarTstNe
rtcBeep
rtcGetPresentDate (时间API)
rtcMsgBox
=========
时间限制断点:
================
CompareFileTime
GetLocalTime
GetSystemTime
GetTimeZoneInformation
msvcrt.diffTime()
msvcrt.Time()
================
VB断点查方法
1,VB6.0编写,OD载入程序调出注册窗口,alt+e调出可执行模块窗口到X:\WINDOWS\system32\MSVBVM60.DLL
================
CompareFileTime
GetLocalTime
GetSystemTime
GetTimeZoneInformation
msvcrt.diffTime()
msvcrt.Time()
================
VB断点查方法
1,VB6.0编写,OD载入程序调出注册窗口,alt+e调出可执行模块窗口到X:\WINDOWS\system32\MSVBVM60.DLL
双击,在ctrl+n调出窗口到,名称XXXXXXE区段=ENGINE 导出__vbaVarMove双击来到下面地址(可以直接在命令行 bp __vbaVarMove)
回到程序注册窗口点注册被拦断在刚才下断的地址,断后在ctrl+F9,F8回
2,OD载入程序,命令行下断点。
bp rtcMsgBox
堆栈友好提示
确定注册失败按钮返回。接着向上出点注册按钮执行的代码第一句,可以吗?当然行,根据我们知道程序员写一个事件执行的代码是如这种,
各种语言都差不多。
3,OD载入程序,命令行下断点。
bp rtcMsgBox
任意填入伪注册码 9999999999999999999
确定后中断
堆栈友好提示
确定注册失败按钮返回。
回到程序注册窗口点注册被拦断在刚才下断的地址,断后在ctrl+F9,F8回
2,OD载入程序,命令行下断点。
bp rtcMsgBox
堆栈友好提示
确定注册失败按钮返回。接着向上出点注册按钮执行的代码第一句,可以吗?当然行,根据我们知道程序员写一个事件执行的代码是如这种,
各种语言都差不多。
3,OD载入程序,命令行下断点。
bp rtcMsgBox
任意填入伪注册码 9999999999999999999
确定后中断
堆栈友好提示
确定注册失败按钮返回。
W32Dasm反汇编程序,Shiht+F12
4,VB中的messagebox是一个消息框,汇编中用rtcMsgBox下断点.用olldbg载入程序,Alt+e,在可执行文件模块中到Msvbvm60.dll,双击它,
在代码窗口点右键-搜索-当前模块中的名称中的rtcMsgBox函数,双击它,在6A362F29 55 PUSH EBP这一句双击下断点,关掉多余的窗口,只留下
cpu调试主窗口,F9运行程序,点?号按钮,随便输入987654321后,回车后立即中断,然后Ctrt+f9执行到返回地址,因为这是msvbvm60的领空,
我们要回到程序领空.秘密记事本弹出message错误提示信息,点确定,向上看 ,再按F8就回到
5,为Microsoft Visual Basic 6.0。先用SmartCheck到程序比较注册码点,
6,用vb常用比较断点
vbastrcmp
vbastrcomp
vbavartsteq
在od中设断点注册码
7,用Od载入程序,运行,填入上面的注册码和顺序号。在Od中下断点,Alt+E,双击Msvbvm60运行库,右键-搜索当前模块中的名称,到Vbastrcmp,双击下断点。
4,VB中的messagebox是一个消息框,汇编中用rtcMsgBox下断点.用olldbg载入程序,Alt+e,在可执行文件模块中到Msvbvm60.dll,双击它,
在代码窗口点右键-搜索-当前模块中的名称中的rtcMsgBox函数,双击它,在6A362F29 55 PUSH EBP这一句双击下断点,关掉多余的窗口,只留下
cpu调试主窗口,F9运行程序,点?号按钮,随便输入987654321后,回车后立即中断,然后Ctrt+f9执行到返回地址,因为这是msvbvm60的领空,
我们要回到程序领空.秘密记事本弹出message错误提示信息,点确定,向上看 ,再按F8就回到
5,为Microsoft Visual Basic 6.0。先用SmartCheck到程序比较注册码点,
6,用vb常用比较断点
vbastrcmp
vbastrcomp
vbavartsteq
在od中设断点注册码
7,用Od载入程序,运行,填入上面的注册码和顺序号。在Od中下断点,Alt+E,双击Msvbvm60运行库,右键-搜索当前模块中的名称,到Vbastrcmp,双击下断点。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论