OllyDBG 入门之四--破解常用断点(转)

软件汉化2010-07-08 16:25:23 阅读76评论0   字号: 订阅

bpx hmemcpy    破解万能断点,拦截内存拷贝动作
bpx Lockmytask 当你用其它断点都无效时可以试一下,这个断点拦截按键的动作
bmsg handle wm_gettext 拦截注册码(handle为对应窗口的句柄)
bmsg handle wm_command 拦截OK按钮(handle为对应窗口的句柄)

拦截窗口:
bpx CreateWindow      创建窗口
bpx CreateWindowEx(A) 创建窗口
bpx ShowWindow        显示窗口
bpx UpdateWindow      更新窗口
bpx GetWindowText(A)  获取窗口文本

拦截消息框:

bpx MessageBox(A) 创建消息框
bpx MessageBoxExA 创建消息框
bpx MessageBoxIndirect(A) 创建定制消息框

拦截警告声:
bpx MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)

拦截对话框:
bpx DialogBox         创建模态对话框
bpx DialogBoxParam(A) 创建模态对话框
bpx DialogBoxIndirect 创建模态对话框
bpx DialogBoxIndirectParam(A) 创建模态对话框
bpx CreateDialog         创建非模态对话框
bpx CreateDialogParam(A) 创建非模态对话框
bpx CreateDialogIndirect 创建非模态对话框
bpx CreateDialogIndirectParam(A) 创建非模态对话框
bpx GetDlgItemText(A)    获取对话框文本
bpx GetDlgItemInt        获取对话框整数值

拦截剪贴板:
bpx GetClipboardData 获取剪贴板数据

拦截注册表:
bpx RegOpenKey(A)    打开子健 ( 例:bpx RegOpenKey(A) if *(esp+8)=='****' )
bpx RegOpenKeyEx     打开子健 ( 例:bpx RegOpenKeyEx if *(esp+8)=='****' )
bpx RegQueryValue(A) 查找子健 ( 例:bpx RegQueryValue(A) if *(esp+8)=='****' )
bpx RegQueryValueEx  查找子健 ( 例:bpx RegQueryValueEx if *(esp+8)=='****' )
bpx RegSetValue(A)   设置子健 ( 例:bpx RegSetValue(A) if *(esp+8)=='****' )
bpx RegSetValueEx(A) 设置子健 ( 例: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  创建或打开文件 (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) 获取磁盘驱动器类型
bpx GetLogicalDrives 获取逻辑驱动器符号
bpx GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径

拦截狗:
bpio -h 378(或278、3BC) R 378、278、3BC是并行打印端口
bpio -h 3F8(或2F8、3E8、2E8) R 3F8、2F8、3E8、2E8是串行端口

VB程序专用断点:
bpx msvbvm50!__vbaStrCmp   比较字符串是否相等
bpx msvbvm50!__vbaStrComp  比较字符串是否相等
bpx msvbvm50!__vbaVarTstNe 比较变量是否不相等
bpx msvbvm50!__vbaVarTstEq 比较变量是否相等
bpx msvbvm50!__vbaStrCopy  复制字符串
bpx msvbvm50!__vbaStrMove  移动字符串
bpx MultiByteToWideChar    ANSI字符串转换成Unicode字符串
bpx WideCharToMultiByte    Unicode字符串转换成ANSI字符串
上面的断点对应VB5程序,如果是VB6程序则将msvbvm50改成msvbvm60即可

VB程序的破解
记住VB常用的一些函数:
MultiByteToWideChar   将ANSI字符串转换成UNICODE字符
WideCHatToMultiByte  将UNICODE字符转换成ANSI字符
rtcT8ValFromBstr    把字符转换成浮点数  
vbaStrCmp        比较字符串(常用断点)
vbaStrComp       字符串比较(常用断点)
vbaStrCopy       复制字符串
StrConv         转换字符串
vbaStrMove       移动字符串
__vbaVarCat          连接字符串
rtcMidCharVar        在字符串中取字符或者字符串!
__vbaLenBstr         取字符串的长度
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程序的跟踪断点:

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双击,在ctrl+n调出窗口找到,名称XXXXXXE区段=ENGINE 导出__vbaVarMove双击来到下面地址(可以直接在命令行 bp __vbaVarMove),回到程序注册窗口点注册被拦断在刚才下断的地址,断后在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,双击下断点。

杨航收集技术资料,分享给大家



OllyDBG 入门之四--破解常用断点设相关推荐

  1. OllyDBG 入门系列5 消息断点及 RUN 跟踪

    标 题: [原创]OllyDBG 入门系列(五)-消息断点及 RUN 跟踪 作 者: CCDebuger 时 间: 2006-02-19,16:02:46 链 接: http://bbs.pediy. ...

  2. 【原创】OllyDBG 入门系列(五)-消息断点及 RUN 跟踪

    标 题: [原创]OllyDBG 入门系列(五)-消息断点及 RUN 跟踪 作 者: CCDebuger 时 间: 2006-02-19,16:02:46 链 接: http://bbs.pediy. ...

  3. OllyDBG 入门系列(四)-内存断点

    [原创]OllyDBG 入门系列(四)-内存断点 <!-- PHPForce - Joey修改性别 --><!-- /PHPForce - Joey修改性别 --> <! ...

  4. OllyDBG 入门系列(五)-消息断点及 RUN 跟踪

    标 题: [原创]OllyDBG 入门系列(五)-消息断点及 RUN 跟踪 作 者: CCDebuger 时 间: 2006-02-19,16:02:46 链 接: http://bbs.pediy. ...

  5. [转]OllyDBG 入门系列(二)-字串参考

    标 题: [原创]OllyDBG 入门系列(二)-字串参考 作 者: CCDebuger 时 间: 2006-02-14,13:34 链 接: http://bbs.pediy.com/showthr ...

  6. OllyDBG 入门系列(二)-字串参考

    标 题: [原创]OllyDBG 入门系列(二)-字串参考 作 者: CCDebuger 时 间: 2006-02-14,13:34:43 链 接: http://bbs.pediy.com/show ...

  7. OD学习手记——常用断点

    汇编 32位CPU所含有的寄存器有: 4个数据寄存器(EAX.EBX.ECX和EDX)对低16位数据的存取,不会影响高16位的数据.这些低16位寄存器分别命名为:AX.BX.CX和DX,它和先前的CP ...

  8. 【原创】OllyDBG 入门系列(七)-汇编功能

    标 题: [原创]OllyDBG 入门系列(七)-汇编功能 作 者: CCDebuger 时 间: 2006-04-09,16:42:10 链 接: http://bbs.pediy.com/show ...

  9. OllyDBG 入门系列(三)-函数

    在第一篇中已经介绍了领空的概念,如我这里调试这个程序时 OllyDBG 的标题栏显示的就是"[CPU - 主线程, 模块 - CrackHea]",这表明我们当前在被调试程序的领空 ...

最新文章

  1. [JS] for-each和map()的区别
  2. 基于Solr的HBase多条件查询测试
  3. 剑指offer:合并两个排序的链表
  4. 网络编程和反射的基本知识点的总结
  5. 【hiho挑战赛24 ABC】贪心和期望dp惨烈的后缀自动机
  6. DxOMark排名更新榜首易主 华为被拉下马:我还会回来的!
  7. Python3.6 的字符串内建函数
  8. 关于2017年总结及2018年计划
  9. java beetl 视频_04.Beetl常用内置函数以及安全输出---《Beetl视频课程》
  10. SourceAnalysis/Binder源码分析.md
  11. java闪光灯_Android实现闪光灯效果
  12. CCNA学习笔记 基础知识回顾(1)
  13. y等于根号x用c语言程序表示出来,c语言描述x和y都大于或等于z的表达式是
  14. 利用python对包含离散型特征和连续型特征的数据进行预处理
  15. 安卓 魔窗SDK 快速接入
  16. 对图像高通滤波matlab,高通巴特沃斯滤波器在MATLAB中对图像进行滤波
  17. html混淆压缩,JavaScript的压缩和混淆
  18. Java常用API——学习笔记(7)
  19. 软件工程导论第三章复习总结附思维导图
  20. 力天创见客流工程实施

热门文章

  1. 《MySQL——给长字符串加索引》
  2. LeetCode 404. 左叶子之和思考分析
  3. java uuid静态方法_Java UUID compareTo()方法与示例
  4. Java ObjectStreamField getOffset()方法与示例
  5. ai人工智能在手机的应用_强化学习在人工智能中的应用
  6. 12-图像梯度-Scharr算子和laplacian算子
  7. linux 关机 日志,centos7 异常关机了,怎么查看系统的异常日志?
  8. mysql 密码sha256_MySQL5.6启用sha256_password插件
  9. C语言 防止头文件被多次引用
  10. mysql与mangodb多租户_MongoDB多租户(Java):如何使用MongoClient在运行时切换具有不同数据库凭据的MongoDB数据库?...