OllyDBG 入门之四--破解常用断点设

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

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



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POJ1204 Word Puzzles

传送门 这题果然是AC自动机的大好题&#xff01; 题目的大意是&#xff0c;给定一个l*c的大网格&#xff0c;每个格子里有一个字符&#xff0c;每个格子可以向八个方向形成字符串&#xff0c;问给定的字符串在哪里能被匹配以及在网格中出现的方向&#xff08;A代表北&#xff0…

普通话测试系统_普通话

普通话测试系统Traduzido/adaptado do original por Vincius Barqueiro a partir do texto original “Writing Alt Text for Data Visualization”, escrito por Amy Cesal e publicado no blog Nightingale.Traduzido / adaptado由 VinciusBarqueiro 提供原始 文本“为数据可…

Mac OS 被XCode搞到无法正常开机怎么办?

Mac OS 被XCode搞到无法正常开机怎么办&#xff1f; 第一天拿到这台air的时候&#xff0c;迫不及待地把从别处搜集来的XCode 3.2.5iOS SDK 4.1的dmg安装了上来&#xff0c;结果系统直接崩溃&#xff0c;再开机就不能正常开机&#xff0c;总是碰到kernel panic。这不坑爹吗…… …

美国队长3:内战_隐藏的宝石:寻找美国最好的秘密线索

美国队长3:内战There are plenty of reasons why one would want to find solitude in the wilderness, from the therapeutic effects of being immersed in nature, to not wanting to contribute to trail degradation and soil erosion on busier trails.人们有很多理由想要…

Java入门第三季——Java中的集合框架(中):MapHashMap

1 package com.imooc.collection;2 3 import java.util.HashSet;4 import java.util.Set;5 6 /**7 * 学生类8 * author Administrator9 * 10 */ 11 public class Student { 12 13 public String id; 14 15 public String name; 16 17 public Set<…

【译】 WebSocket 协议第八章——错误处理(Error Handling)

概述 本文为 WebSocket 协议的第八章&#xff0c;本文翻译的主要内容为 WebSocket 错误处理相关内容。 错误处理&#xff08;协议正文&#xff09; 8.1 处理 UTF-8 数据错误 当终端按照 UTF-8 的格式来解析一个字节流&#xff0c;但是发现这个字节流不是 UTF-8 编码&#xff0c…

升级xcode5.1 iOS 6.0后以前的横屏项目 变为了竖屏

升级xcode5.1 iOS 6.0后以前的横屏项目 变为了竖屏&#xff0c;以下为解决办法&#xff1a; 在AppDelegate 的初始化方法 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中 将 [window addSubview: viewCon…

动漫数据推荐系统

Simple, TfidfVectorizer and CountVectorizer recommendation system for beginner.简单的TfidfVectorizer和CountVectorizer推荐系统&#xff0c;适用于初学者。 目标 (The Goal) Recommendation system is widely use in many industries to suggest items to customers. F…

Wait Event SQL*Net more data to client

oracle 官方给的说法是 C.3.152 SQL*Net more data to client The server process is sending more data/messages to the client. The previous operation to the client was also a send. Wait Time: The actual time it took for the send to complete 意味着server process…

1.3求根之牛顿迭代法

目录 目录前言&#xff08;一&#xff09;牛顿迭代法的分析1.定义2.条件3.思想4.误差&#xff08;二&#xff09;代码实现1.算法流程图2.源代码&#xff08;三&#xff09;案例演示1.求解&#xff1a;\(f(x)x^3-x-10\)2.求解&#xff1a;\(f(x)x^2-1150\)3.求解&#xff1a;\(f…

libzbar.a armv7

杨航最近在学IOS&#xfeff;&#xfeff; http://download.csdn.net/download/lzwxyz/5546365 我现在用的是这个&#xff1a;http://www.federicocappelli.net/2012/10/05/zbar-library-for-iphone-5-armv7s/ 点它的HERE开始下载 下载的libzbar.a库&#xff0c;如何查看 …

Alex Hanna博士:Google道德AI小组研究员

Alex Hanna博士是社会学家和研究科学家&#xff0c;致力于Google的机器学习公平性和道德AI。 (Dr. Alex Hanna is a sociologist and research scientist working on machine learning fairness and ethical AI at Google.) Before that, she was an Assistant Professor at th…

三位对我影响最深的老师

我感觉&#xff0c;教过我的老师们&#xff0c;不论他们技术的好坏对我都是有些许影响的。但是让人印象最深的好像只有寥寥几位。 第一位就是小学六年级下册教过我的语文老师。他是临时从一个贫困小学调任过来的&#xff0c;不怎么管班级&#xff0c;班里同学都在背地里说他不会…

安全开发 | 如何让Django框架中的CSRF_Token的值每次请求都不一样

前言 用过Django 进行开发的同学都知道&#xff0c;Django框架天然支持对CSRF攻击的防护&#xff0c;因为其内置了一个名为CsrfViewMiddleware的中间件&#xff0c;其基于Cookie方式的防护原理&#xff0c;相比基于session的方式&#xff0c;更适合目前前后端分离的业务场景&am…

UNITY3D 脑袋顶血顶名

&#xfeff;&#xfeff;杨航最近在学Unity3D&#xfeff;&#xfeff; using UnityEngine; using System.Collections; public class NPC : MonoBehaviour { //主摄像机对象 public Camera camera; //NPC名称 private string name "我是doud…

一个项目的整个测试流程

最近一直在进行接口自动化的测试工作&#xff0c;同时对于一个项目的整个测试流程进行了梳理&#xff0c;希望能对你有用~~~ 需求分析&#xff1a; 整体流程图&#xff1a; 需求提取 -> 需求分析 -> 需求评审 -> 更新后的测试需求跟踪xmind 分析流程&#xff1a; 1. 需…

python度量学习_Python的差异度量

python度量学习Hi folks, welcome back to my new edition of the blog, thank you so much for your love and support, I hope you all are doing well. In today’s learning, we will try to understand about variance and the measures involved in it. Although the blo…

多个摄像机之间的切换

杨航最近在学Unity3D&#xfeff;&#xfeff; Unity3D入门 第捌章: 多个摄像机之间的切换 内容描述&#xff1a;这章&#xff0c;我们来学习一下同个场景中多个摄像机怎么切换。 接着我们创建一个空对象 GameObject -> Create Empty 命名为CamearController&#xff0…

Kubernetes的共享GPU集群调度

问题背景 全球主要的容器集群服务厂商的Kubernetes服务都提供了Nvidia GPU容器调度能力&#xff0c;但是通常都是将一个GPU卡分配给一个容器。这可以实现比较好的隔离性&#xff0c;确保使用GPU的应用不会被其他应用影响&#xff1b;对于深度学习模型训练的场景非常适合&#x…

django-celery定时任务以及异步任务and服务器部署并且运行全部过程

Celery 应用Celery之前&#xff0c;我想大家都已经了解了&#xff0c;什么是Celery&#xff0c;Celery可以做什么&#xff0c;等等一些关于Celery的问题&#xff0c;在这里我就不一一解释了。 应用之前&#xff0c;要确保环境中添加了Celery包。 pip install celery pip instal…