转载于看雪论坛:http://bbs.pediy.com/showthread.php?t=31609
设置好断点对于破解的成功是非常重要的,下面列举了一些常用的断点设置. 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,0C,4C,14,33,C0,66,A7;" AF5="^S 30:0 L FFFFFFFF FF,75,E0,E8,85,EF,FF,DC,1D,28,40,00,DF,9E,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函数 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。