od调试找游戏bug游戏时,为什么在不同的语句下按F2下断,有时游戏直接断下,有时按游戏还在运行

您没有登录或者您没有权限访问此页面,可能有如下几个原因
1、本版块为正规版块,只有注册会员才能进入!
2、 举报邮箱: 举报QQ:
使用合作网站帐号登录OD调试篇7--笔记及解题报告
时间: 14:02:30
&&&& 阅读:245
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&MFC:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class
libraries),以C++类的形式封装了Windows
API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组
件的封装类。----名词解释开始OD调试 & & 目的是去除软件的使用次数限制载入程序后F8走走看发现了弹窗 不是进入程序的窗口 & 那我们F2设置断点之后,重新载入程序跟进去看看(记得把之前的断点去掉,为了方便)跟进了两个call之后F8单步走,发现跳出弹窗根据程序发现进入了动态链接库的领空,然后发现又一次出现了弹窗,那我们要在这里设置断点,但是不能够是普通的软件断点了(也就是草率的按F2),我们可以右键--&断点--&硬件执行 & 设下硬件断点重载程序,运行到断点处,删除之前的断点会发现又进入了普通的程序领空,然后我们ctrl+F8 &让它自己运行会发发现又出现了一个弹窗,那我又跟进去看了下发现它在动态链接库的领空死循环,说明这已经是我们的要的了。点击进入程序 & 发现成功进入了那么这个call函数就是我们要找的一个算法,它的功能是计算如果为1的话 &就return 1 & &那我们把它汇编为 mov eax,1保存程序 & 重新载入新程序 &点击运行 &发现直接可以进入了但是关掉之后会出现小广告,很讨厌先解释一下 OD中K的作用就是通过调用堆栈来看出哪些函数被调用过了发现调用了一个程序领空的函数,我们双击开来看看下个断点重新载入下,我们把这个函数nop掉,然后保存文件重新载入下运行 & &点击关闭后,广告不见了 & &真棒!那么,还有另一种方法,也就是一种对比的方法,在程序的领空里面把所有的跳转都备注下有没有跳转,然后人为的把程序的计数变为0,然后对比之前的注释,会发现有些奇怪,有些原本不跳的跳转确跳了,那我们可以想办法反其道而行,应该就可以得到一些成果。标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:http://www.cnblogs.com/terryue/p/4894533.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!Ollydbg F2下断点游戏就暂停了..跑不起来.必须取消断点才可以_百度知道
Ollydbg F2下断点游戏就暂停了..跑不起来.必须取消断点才可以
OllydbgF2下断点游戏就暂停了..跑不起来.必须取消断点才可以这个是驱动保护么?SSDT已经饶过了...
F2下断点游戏就暂停了..跑不起来.必须取消断点才可以这个是驱动保护么?SSDT已经饶过了
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
匿名用户知道合伙人
断点就是暂停的 这不很正常么?
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。我要游戏信息
查看: 50174|回复: 10
请问下为什么我用OD调试游戏,会让游戏无法响应呢 ??
阅读权限30
在线时间 小时
本帖最后由 lanluosi 于
20:40 编辑
我下了论坛置顶提供的吾爱破解,还有最终版两个
游戏是暗黑2,还有论坛上发的一个奥瑞恩和女孩子怪,这两个游戏。
用CE可以正常搜索,自动汇编也没有问题
但是用OD就出现问题,下载的版本,我也没有做任何改动和设置,运行游戏之后,点附加游戏,这时游戏暂停了,点开始,可以正常切换到游戏。用过CE找到代码地址,然后在OD中按F2下断,这时游戏会暂停下来,
之后,问题就出现了,按照正常来说,点继续运行的话,游戏应该会恢复,但是我这里,游戏虽然恢复了(通过听到它的背景音乐判断),却无法切换过去,游戏画面处于卡死状态。我点OD退出的话,只能强制退出,然后游戏就一直处于卡死状态了,用任务管理器直接关闭都不行,只能重启计算机。
我也尝试关闭了360这些东西,但问题依旧。请问是我的OD没设置好,还是其他地方出现问题??
不知道我描述的是否清楚,请高手指点下,谢谢
阅读权限70
在线时间 小时
大概是因为 要取消断点吧,这我也不是很清楚……
阅读权限90
在线时间 小时
神马都不知道
阅读权限60
在线时间 小时
我不知道不知道..........
阅读权限55
在线时间 小时
F9再次可以运行
阅读权限30
在线时间 小时
我是取消断点之后,再点开始,游戏声音证明了游戏正在运行...但是切换过去,游戏画面是卡死的,而且我退出OD的话,游戏进程就不能关闭了
阅读权限30
在线时间 小时
呃,辛苦各位了,我自己找到了一个初步的原因
我刚才在另外一个机器上试了一下OD软件和游戏,可以正常使用,我怀疑是系统的问题
不过两个系统都是xpsp3,都是精简版的,也都是浩海的,所以我初步判断如下两个原因:
1、这台机器上装了vs2010,还有更多的乱七八糟的东西,影响到了OD
2、这台机器是4G内存,为了让内存最大化利用,我装了一个VSuite Ramdisk (Free Edition),让多余的内存变成缓存来使用,最大化利用,这里可能也是该问题产生的原因
待会测试下第二点
阅读权限30
在线时间 小时
刚才卸载了VSuite Ramdisk (Free Edition),再运行OD调试游戏,就没有问题了,看来果然是这个程序在作怪,差点因为它,去重装了一下系统....
看来得搞个双系统,装了WIN7 64,让4G内存全部出来了...
多谢各种帮顶的兄弟啦!!
在线时间 小时
头像被屏蔽
提示: 作者被禁止或删除 内容自动屏蔽
阅读权限55
在线时间 小时
阅读权限55
在线时间 小时
Powered byOD消息断点的设置方法
一、条件断点:
使用方法(如):
在当前行按[Shift+F2]键-&条件断点(这个不太好用,因为程序BUG偶尔失效)。
在当前行按[Shift+F4]键-&条件记录断点(只要设置上条件语句和按什么条件生效就可以了)。
条件语句(如):
当EAX的值为时。
比如EAX的值为,而地址处所指向的值等于5201314时,即EAX的值表示为指针。
[[EAX]] ==
比如EAX的值为,地址处所指向的值为,而地址处所指向的值等于5201314时,即EAX的值表示为指针的指针。
&& EBX == 0x ; 当EAX的值等于5201314(十进制),并且EBX的值等于5201314(十六进制)时。
[EBP+8] == WM_COMMAND
[[EBP+8]] ==
byte ptr[EAX] == 'y'
[EAX] == "coderui" 比如EAX的值为,而地址处所指向的字符串为“coderui”时,即EAX的值表示为指针。
[[EAX+4]+4] == WM_LBUTTONUP
二、消息断点:
原理:就是在消息函数上设置条件断点。
1、使用[Ctrl+G]呼出“表达式跟随窗口”,输入“TranslateMessage”,然后回车。
2、在“转到”的位置上使用[Shift+F4]呼出“条件记录断点设置窗口”。
3、在“条件”中输入如下语句“[[ESP+4]]==当前按钮句柄&&[[ESP+4]+4]==WM_LBUTTONUP”。
4、把“暂停程序”设置为“按条件”,其他都为默认,然后确定。
5、点击按钮后,程序会停在“TranslateMessage”函数的系统领空中。
6、查看内存,对代码段下“内存访问断点”,然后经过多次[F9](运行),就会找到关键的处理代码了。
=================================================================================
以下演示如何下消息断点,
OD运行TraceMe.exe,
单击系统菜单View/Windows(查看/窗口)或单击工具栏的W按钮,如无内容,则执行右键菜单"Actualize"刷新命令
现在要对Check按钮下断点,当单击按钮时中断,在Check行上单击鼠标右键,在弹出的右键菜单中,选择"Message breakpoint
on ClassProc"
当单击事件发生时,会发送WM_LBUTTONUP这个消息,所以,选中这个消息,单击OK,设好消息断点:
单击Check按钮,将会中断到windows系统代码中,由于处于系统底层代码里,这时企图使用Alt+F9或Ctrl+F9返回TraceMe程序的领空代码是徒劳的,
所以用Ctrl+M打开内存区,对.text区块下一次性内存访问断点,如图:
按F9运行,立即中断在程序的空间处,这里正是程序的消息循环处:
注意的是,这段代码是一个消息循环,不停的处理TraceMe主界面的各类消息,因此可能不是直接处理按钮事件,
可以重复这个过程(其他过程会走到系统领域中,这时再下内存访问断点),在几次中断后到达处理按钮的事件代码,很快就能发现check按钮事件的代码:
===============================================================================================
标 题:关于《OllyDBG 入门系列(五)-消息断点及
RUN 跟踪》的补充作 者:kisser1时 间: 09:52 链 接:
作 者: hklzt
时 间: ,16:50
联 系: QQ:
看完了《OllyDBG 入门系统(五)-消息断点及 RUN 跟踪》之后感觉如何?会否有如下问题:
是否觉得不知道在哪下断?
为什么要这样子下断?
如何确定断下来后的位置就是正确的?
好,就本着这几个问题来分析一遍。
首先,先回顾下Windows的消息机制。要点:所有要处理的消息必然会由程序自己处理,不处理的消息都交由Windows处理。Windows的消息处理函数的格式,如下:
LRESULT CALLBACK WindowProc(
HWND hwnd,
// handle of window
UINT uMsg,
// message identifier
WPARAM wParam,
// first message parameter
LPARAM lParam
// second message parameter
其中uMsg就是关键,它代表消息的类型,如:WM_COMMAND,WM_GETTEXT等。记好哦。
下面,我们来用实例讲解。
这个CrackMe是用对话框做的(你是怎么知道的?)。
用OllyDbg加载,Crtl + N,找到函数:USER32.DialogBoxParamA,右击-&“在每个参考上设置断点”。
F9,运行。看,被拦了下来,如图:
其中DlgProc的内容,就是我们需要找的东东。这个地址是消息处理函数的入口点。现在来解释为什么要在窗口那才有消息断点,看图,
要下消息断点,首先得找到具有Windows消息处理函数格式的函数,然后,再根据栈的数据来判断消息,如果符合下断的消息,那么,OllyDbg就会拦下来(还会觉得不知道在哪下消息断点了吗?知道该如何下消息断点了吧?)。很明显有一点,这个消息断点的功能是有限的,比如,要拦主窗口中的菜单消息呢?所以,消息断点的功能还是有限的。如何扩展?扯远了,下面再讲。
Ctrl + G来到cyle.0041029,我们来到了消息处理函数了,但是,OllyDbg并未识别出这个函数是消息处理函数。所以,在cyle.0041029处,右击-&“分析”-&“假定参数”,如图:
弹出一个对话框,选择“WinProc(hWnd,msg,wParam,lParam)”。
点击“应用”后,如图。
5、在cyle.0041029处,右击-&“断点”-&“在WinProc上的消息断点”(平时是不是没见过这个菜单呀?呵呵)。
在“消息”列表框中,选择你要下断的消息(Alt+B,删除以前的断点,以免影响心情)。
F9,运行,程序运行起来了。这时没什么事情发生,当你在里面点了一个文本框之后(点它,是想让它获得Focus(焦点),以便能够输入数据),事情就发生了。现在没办法在文本框里输入注册码,也没办法点击按钮。这是怎么回事呢?仔细看一下Stack(栈)的那个窗口,噢!原来被文本框的通知EN_SETFOUCE搞坏了!停留在EN_SETFOCUS和EN_KILLFOCUS两个消息之间了。
好,现在来扩展消息断点(消息断点是否是条件断点的特殊例子?),即使用条件断点(卖弄了一下,呵呵)。
看你需求,条件和条件记录,在这里是没什么区别的,因为不需要记录的内容。
按Shitf+F2,输入 MSG ==WM_COMMAND && [ESP+C]==66(这个66是怎么来的?这个就是那个Check按钮的ID,意思就是“当收到WM_COMMAND,且是由ID为0x66发出的时候中断”),确定,F9,运行。
10、现在,输入Name和Serial之后,点”Check”按钮。
11、这次中断,位置上似乎没有变化,但是,明白了消息处理机制,应该知道这次中断的不同吧?(这次会流程会流到注册算法那哦)
解码为 &WinProc&
[arg.2], 110
short cycle.0040105E
[arg.2], 111
//111=WM_COMMAND
short cycle. //肯定在这里跳(为什么?)
[arg.2], 10
short cycle.
[arg.2], 2
short cycle.
12、来到 cycle.,
[arg.3], 67
short cycle.0040108D
//这里肯定会跳
[arg.3], 66
short cycle.
//这里肯定不会跳(又是为什么呢?)
cycle.0040109C
13、蓝色部分,已经在CCDebuger那篇文章分析过了,这里就不分析了,我用红色字体来标明重点。
dword ptr ds:[402182], FEDCBA98
/Count = 11 (17.)
cycle. |Buffer = cycle.
|ControlID = 3E9 (1001.)
&jmp.&USER32.GetDlgItemTextA& \GetDlgItemTextA(Serial)
short cycle.0040111F
/Count = 11 (17.)
cycle. |Buffer = cycle.
|ControlID = 3E8 (1000.)
&jmp.&USER32.GetDlgItemTextA& \GetDlgItemTextA(name)
short cycle.0040111F
esi, cycle.
movs byte ptr es:[edi], byte ptr&
esi, cycle.
byte ptr ds:[esi]
short cycle.
short cycle.
short cycle.
short cycle.
short cycle.0040111F
//判断长度是否为16个有效字符,即16个字节,不是则跳
ecx, 0FF01
short cycle. //需要跳
eax, dword ptr ds:[402168]
ebx, dword ptr ds:[40216C]
eax, dword ptr ds:[402182]
eax, dword ptr ds:[402179]
eax, dword ptr ds:[40217D]
short cycle.0040111A
//不可以跳
cycle.0040117B
//提示注册成功!
终于写完了,现在来回顾下刚开始的问题:
是否觉得不知道在哪下断?
答:在Windows消息处理函数的入口处下消息断点。
为什么要这样子下断?
答:可能OllyDbg是根据栈的数据和函数原型来匹配,所以,一般来说,匹配条件都会是[Esp + XX] ==XXXXX
如何确定断下来后的位置就是正确的?
答:这里是根据编程的思路以及Windows的消息处理机制来定位的,理论与实战相结合。
最后,总结下,由于windows是消息驱动的,很大一部分都是通过消息来完成的,所以,有很大一部分可以通过对消息下断来达到目的,但是,如何下消息断点?从大体上讲,是这样子的:1、找出消息循环处理的函数 2、在消息循环处理函数的入口处设断
写到这里,废话一下。赞扬CCDebuger的太多了,但是,在赞扬的同时,不知道大家有没仔细消化人家的成果?呵呵,其实,我也没有,因为我看不太懂,所以,还是照着自己的思路走。写这篇文章的目的是为了帮一位朋友,他想下消息断点,但是,不知道如何下,我就把CCDebuger的这那篇消息断点给他,可是,还是没解决,后来,自己也动了一下手,确实,对于WM_COMMAND消息来说,OD肯定会不停的拦下来的,所以,单纯的消息断点就行不通了,所以,再结合Run跟踪来记录下,刚好能解决问题,也就产生了CCDebuger的那篇文章(猜的,呵呵)。
最后,帮忙纠正下错误:
写到这准备跟踪算法时,才发现这个 crackme 还是挺复杂的,具体算法我就不写了,实在没那么多时间详细跟踪。有兴趣的可以跟一下,注册码是17位,用户名采用复制的方式扩展到 16 位,如我输入“CCDebuger”,扩展后就是“CCDebugerCCDebug”。大致是先取扩展后用户名的前 8 位和注册码的前 8 位,把用户名的前四位和后四位分别与注册码的前四位和后四位进行运算,算完后再把扩展后用户名的后 8 位和注册码的后 8 位分两部分,再与前面用户名和注册码的前 8 位计算后的值进行异或计算,最后结果等于 0 就成功。注册码的第 17 位我尚未发现有何用处。对于新手来说,可能这个 crackme 的难度大了一点。没关系,我们主要是学习 OllyDBG 的使用,方法掌握就可以了。
关于“位”的概念,“位”,是指二进制位,在这里,一个字节等于8位,一个字符等于一个字节。“注册码是17位”,应改成“注册码是17个字节”,如果你跟踪分析过,你可以发现,这样子还是不对的,最后应该是“注册码是16个字节”,
ecx, 11,这里的11是16进制,即十进制数:17。从代码中可以看出这个十进制数17,还得减1才是字符串的真实长度,所以,应该改成“注册码是16个字节”,后面的“位”,需要改成“字节”。第一次看的时候,没注意看,都给蒙了。
================================================================================================================
ollydbg学习之断点篇
OD按钮单击事件下断点脚本
OD中条件断点的设置方法
OD调试常见断点及原理
5种语言的按钮事件 断点
od拦截对话框的另类方法
OD条件与消息断点的设置方法
4.OD-调试实例续(消息断点)
experiment : 用OD下消息断点, 捕获按钮操作.
OD2.01消息断点使用方法
没有更多推荐了,}

我要回帖

更多关于 od调试原理 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信