zoukankan      html  css  js  c++  java
  • 软件汉化:OllyDBG 入门之四破解常用断点设置(转)

    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,双击下断点。

    我最近在玩和讯财经微博,很方便,很实用。
    一句话,一张图,随时随地与我分享理财心得与亲历见闻。
    点击以下链接激活,来和我一起玩吧!
    http://t.hexun.com/active.aspx?InviteCode=vgHnLwTTuTjrgTw%2fP7b6%2fA%3d%3d

  • 相关阅读:
    PHP 使用 GET 传递数组变量
    Java实现 蓝桥杯 算法训练 数据交换
    Java实现 蓝桥杯 算法训练 数据交换
    Java实现 蓝桥杯 算法训练 数据交换
    Java实现 蓝桥杯 算法训练 景点游览
    Java实现 蓝桥杯 算法训练 景点游览
    Java实现 蓝桥杯 算法训练 景点游览
    Java实现 蓝桥杯 算法训练 二进制数数
    Java实现 蓝桥杯 算法训练 二进制数数
    Java实现 蓝桥杯 算法训练 二进制数数
  • 原文地址:https://www.cnblogs.com/Gemgin/p/3136284.html
Copyright © 2011-2022 走看看