设置好断点对于破解的成功是非常重要的,下面列举了一些常用的断点设置.
bpx hmemcpy 破解万能断点,拦截内存拷贝动作(注意:Win9x专用断点)
bpx Lockmytask 当你用其它断点都无效时可以试一下,这个断点拦截按键的动作
(Win9x专用)
实在找不到断点可以试下面的方法:
bp handle wm_gettext 拦截注册码(handle为对应窗口的句柄)
bp handle wm_command 拦截OK按钮(handle为对应窗口的句柄)
-------------------------------------------------------------------------------------------
利用消息断点
在处理字串方面可以利用消息断点WM_GETTEXT和WM_COMMAND。前者用来读取某个控件中的文本,比如拷贝编辑窗口中的序列号到程序提供的一个缓冲区里;后者则是用来通知某个控件的父窗口的,比如当输入序列号之后点击OK按钮,则该按钮的父窗口将收到一个WM_COMMAND消息,以表明该按钮被点击。
BP xxxx WM_GETTEXT (拦截序列号)
BP xxxx WM_COMMAND (拦截OK按钮)
可以用SoftICE提供的HWND命令获得窗口句柄的信息,也可以利用Visual Studio中的Spy++实用工具得到相应窗口的句柄值,然后用BMSG设断点拦截。例:
BMSG 0129 WM_COMMAND
------------------------------------------------------------------------------------------
拦截窗口:
bpx createWindow 创建窗口
bpx createWindowExA 创建窗口
bpx createWindowExW
bpx ShowWindow 显示窗口
bpx updateWindow 更新窗口
bpx GetWindowTextA 获取窗口文本
bpx GetWindowTextW
拦截消息框:
bpx MessageBoxA 创建消息框
bpx MessageBoxW
bpx MessageBoxExA 创建消息框
bpx MessageBoxExW
bpx MessageBoxIndirectA 创建定制消息框
bpx MessageBoxIndirectW
__________________________________________________
如何在OllyDbg下设消息断点了
首先运行一个程序,打开"窗口"界面,选择所调试程序的主窗口,右键.选择"消息断点在 ClassProc",然后在列表中选一个需要的消息(如:WM_RBUTTONDOWN),下面的选项选择"中断在相同标题的窗口",然后确定就可以了.现在在窗口上点一下右键试试看吧...
-------------------------------------------------------------------------------------------
拦截警告声:
bpx MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)
拦截对话框:
bpx DialogBox 创建模态对话框
bpx DialogBoxParam(A/W) 创建模态对话框
bpx DialogBoxIndirect 创建模态对话框
bpx DialogBoxIndirectParam(A/W) 创建模态对话框
bpx createDialog 创建非模态对话框
bpx createDialogParam(A/W) 创建非模态对话框
bpx createDialogIndirect 创建非模态对话框
bpx createDialogIndirectParam(A/W) 创建非模态对话框
bpx GetDlgItemText(A/W) 获取对话框文本
bpx GetDlgItemInt 获取对话框整数值
拦截剪贴板:
bpx GetClipboardData 获取剪贴板数据
拦截注册表:
bpx RegOpenKey(A/W) 打开子健 ( 例:bpx RegOpenKey(A) if *(esp->8)=='****' )
bpx RegOpenKeyExA(W) 打开子健 ( 例:bpx RegOpenKeyEx if *(esp->8)=='****' )
bpx RegQueryValue(A/W) 查找子健 ( 例:bpx RegQueryValue(A) if *(esp->8)=='****' )
bpx RegQueryValueEx(A/W) 查找子健 ( 例:bpx RegQueryValueEx if *(esp->8)=='****' )
bpx RegSetValue(A/W) 设置子健 ( 例:bpx RegSetValue(A) if *(esp->8)=='****' )
bpx RegSetValueEx(A/W) 设置子健 ( 例:bpx RegSetValueEx(A) if *(esp->8)=='****' )
'****'为指定子键名的前4个字符,如子键为'Regcode',
则'****'= 'Regc'
功能限制拦截断点:
bpx EnableMenuItem 禁止或允许菜单项
bpx EnableWindow 禁止或允许窗口
bmsg hMenu wm_command 拦截菜单按键事件,其中hMenu为菜单句柄
bpx K32Thk1632Prolog 配合bmsg hMenu wm_command使用,可以通过这个断点进入菜单处
理程序
应用示例:
CALL [KERNEL32!K32Thk1632Prolog]
CALL [......] <-- 由此跟踪进入菜单处理程序
CALL [KERNEL32!K32Thk1632Epilog]
拦截时间:
bpx GetLocalTime 获取本地时间
bpx GetSystemTime 获取系统时间
bpx GetFileTime 获取文件时间
bpx GetTickCount 获得自系统成功启动以来所经历的毫秒数
bpx GetCurrentTime 获取当前时间(16位)
bpx SetTimer 创建定时器
bpx TimerProc 定时器超时回调函数
拦截文件:
bpx createFileA(W) 创建或打开文件 (32位)
bpx OpenFile 打开文件 (32位)
bpx ReadFile 读文件 (32位)
bpx WriteFile 写文件 (32位)
bpx _lcreat 创建或打开文件 (16位)
bpx _lopen 打开文件 (16位)
bpx _lread 读文件 (16位)
bpx _lwrite 写文件 (16位)
bpx _hread 读文件 (16位)
bpx _hwrite 写文件 (16位)
拦截驱动器:
bpx GetDrivetype(A/W) 获取磁盘驱动器类型
bpx GetLogicalDrives 获取逻辑驱动器符号
bpx GetLogicalDriveStringsA(W) 获取当前所有逻辑驱动器的根驱动器路径
拦截狗:
bpio -h 378(或278、3BC) R 378、278、3BC是并行打印端口
bpio -h 3F8(或2F8、3E8、2E8) R 3F8、2F8、3E8、2E8是串行端口
VB程序专用断点:
bpx msvbvm60!rtcMsgBox
bpx msvbvm60!__vbaStrCmp
bpx msvbvm60!__vbaStrComp
bpx msvbvm60!__vbaStrCompVar
bpx msvbvm60!__vbaStrTextCmp
bpx msvbvm60!__vbaFileOpen
bpx msvbvm60!__vbaInputFile
bpx msvbvm60!__vbaFileSeek
bpx msvbvm60!__vbaWriteFile
bpx msvbvm60!__vbaFileClose
bpx msvbvm60!rtcFileAttributes
bpx msvbvm60!rtcFileDateTime
bpx msvbvm60!rtcFileLen
bpx msvbvm60!rtcFileLength
bpx msvbvm60!__vbaVarInt
bpx msvbvm60!__vbaVarCmpGe
bpx msvbvm60!__vbaVarCmpGt
bpx msvbvm60!__vbaVarCmpLe
bpx msvbvm60!__vbaVarCmpLt
bpx msvbvm60!__vbaVarCmpNe
bpx msvbvm60!__vbaVarTextCmpEq
bpx msvbvm60!__vbaVarTextCmpGe
bpx msvbvm60!__vbaVarTextCmpGt
bpx msvbvm60!__vbaVarTextCmpLe
bpx msvbvm60!__vbaVarTextCmpLt
bpx msvbvm60!__vbaVarTextCmpNe
bpx msvbvm60!__vbaVarTextTstEq
bpx msvbvm60!__vbaVarTextTstGe
bpx msvbvm60!__vbaVarTextTstGt
bpx msvbvm60!__vbaVarTextTstLe
bpx msvbvm60!__vbaVarTextTstLt
bpx msvbvm60!__vbaVarTextTstNe
bpx msvbvm60!__vbaVarTstEq
bpx msvbvm60!__vbaVarTstGe
bpx msvbvm60!__vbaVarTstGt
bpx msvbvm60!__vbaVarTstLe
bpx msvbvm60!__vbaVarTstLt
bpx msvbvm60!__vbaVarTstNe
注意:VB程序仍然可以使用普通API函数,只要函数"最终"CALL了这个函数
上面的断点对应VB6程序,如果是VB5程序则将msvbvm60改成msvbvm50即可
--------------------------------------------------------------------------------
VB3、VB4、VB5程序破解法宝(将以下内容覆盖Softice中winice.dat文件的对应项):
AF3="^S 30:0 L FFFFFFFF 8B,CA,F3,A6,74,01,9F,92,8D,5E,08;"
AF4="^S 30:0 L FFFFFFFF 56,57,8B,7C,24,10,8B,74,24,0C,8B,4C,24,14,33,C0,F3,66,A7;"
AF5="^S 30:0 L FFFFFFFF FF,75,E0,E8,85,EF,FF,FF,DC,1D,28,10,40,00,DF,E0,9E,75,03;"
跟踪时按ALT+F3、ALT+F4、ALT+F5键(分别对应VB3、VB4、VB5程序),搜寻成功后你将得到一个地址30:????????,然后设置断点"bpx 30:????????",这样可以有效的拦截很多程序的注册码(破解VB程序记得将VB的DLL库导入Softice)!^_^
★注意:上面所列函数末尾有带"A"的,有带"W"的,有不带后缀的;一般说来,如果函数同时可以有后缀也可以没有后缀(形如:MessageBox(A/W)), 则不带后缀的表示16位的函数(MessageBox),带后缀的(MessageBoxA、MessageBoxW)表示32位的函数;通常优先使用带后缀(A或W)的断点,带A后缀的一般用于WIN9X系统, 而带W后缀的一般用于NT系统;如果函数没有任何后缀,则表示这是个通用的跨平台的API函数
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!