吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8079|回复: 9
收起左侧

[转贴] 转来给新手-- Olldbg常见问题--转自看雪

  [复制链接]
吾爱-路人甲 发表于 2014-1-8 00:41
本帖最后由 ouyangnuoyan 于 2014-1-8 00:42 编辑

如果大家觉得有用请给我评分加点热心值,您的推荐就是我后续最大的动力。



这些最基本的东西如果反复咀嚼的话会产生很微妙的反应,希望共同进步
Q: OD中如何运行到光标所在处?
A: 将光标移到目标位置,按F4.

Q: 如何用OD修改可执行程序?
A:直接在反汇编代码区更改,这时可以使用汇编代码更改,然后选中修改后的汇编代码,右击-->复制到可执行文件-->保存文件.

Q:OD中的代码乱码,如:
004365E0 >db 68 ; CHAR 'h'
004365E1 >db A4
004365E2 >db 7A ; CHAR 'z'
004365E3 >db E5
004365E4 >db B8
004365E5 >db E8
004365E6 >db BB

A:OD右键,"分析/从模板中删除分析",如不行,按Ctrl+A重新分析


Q:OD为什么删除了断点,重新加载的时候,这些断点都会重新出现
A:设置OllyDbg.ini,将配制文件里改成如下:Backup UDD files=1 (by kanxue)

Q:如何还原到OD到分析前的状态?
A:右键 分析/从模块中删除扫描

Q:什么是UDD?
A:OllyDbg 把所有程序或模块相关的信息保存至单独的文件中,并在模块重新加载时继续使用。这些信息包括了标签、注释、断点、监视、分析数据、条件等等

Q:OD的数据窗口显示一个下划线,是什么意思?
A:重定位加下划线[Underline fixups],几乎所有的DLL和一部分程序都包含重定位,这样就可以在内存中的不同基地址加载模块了。当该项开启时,CPU反汇编窗口或CPU数据窗口中的重定位地址都将添加下划线。(xing_xsz)

Q:如果已经知道某一CALL的具体作用,能否把后面所有相同的CALL都改成函数名形式?
[hide]A:比如 CALL 110000 此中已经知道110000是一个核心计算
则如下操作,让光标停在CALL 110000 这个语句上,按回车键
会跳到110000的地址上去显示,之后让光标停在110000上,按
shift 和; (分号) 其实就是完成一个:(冒号)的动作,输入
名称,这回所有的调用110000处,都会显示CALL 你刚才输入的
名称了.(nig回答)

Q:用OD调试一些加壳程序,如ThemIDA等,可能你会发现下断后(包括硬件断点),程序跑到断点时,OD会出现假死现像。
A:打开OD配置文件ollydbg.ini,你会发现:Restore windows= 123346 //这个Restore windows可能会是一个很大的值
现在只需要将Restore windows=0,重新用OD调试程序,假死问题就消失了。 (kanxue)

Q:ollydbg中如何调用pdb文件?
A:
pdb文件是VC++调试编译生成的文件。由编译器直接生成。
pdb文件要配合源文件使用。不同的源文件pdb文件不同。
用OD装入可执行文件后,点击CPU窗口中的注释段可出现源码。
不过不是所有的源码都可以显示的。VC++6.0以下都可以显示。
还有一种不显示的原因是缺少路径。点击OD主菜单的[查看]->[源文件]
如果[源码]段出现(缺少)字样的话,说明此路径的源码是看不了的。设置正确的路径就可以了。
(nantz回答)

Q:运行A.exe,其会调用B.exe,如果用OD再附加B.exe,OD会死掉
A:
1.OD菜单,设置OD为即时调试器;
2.将B.exe的入口改成CC,即INT 3指令,同时记下原指令
3.运行A.exe,其调用B.exe,会导致异常,OD会自动启动加载B.exe,此时你将INT 3指令恢复原指令。
4.到这步,你己可以任意调试B.exe了(kanxue)

Q:用ollydbg调试的时候,断住kernel32.dll系统函数,然后”执行到用户代码“,就可以回到被调程序的代码。但有时候却回不来,不知道这又是为什么?
A:
多半是杀毒软件(如卡巴对LoadLibraryA)Hook API入口代码进入ring 0了,OllyDbg不能单步跟踪,这种情况下只要看堆栈返回地址,在返回地址上下端点,F9执行就可以了。(cyclotron回答)

Q:OD的“复制可执行文件”后面没有 “所有修改”的菜单
A:OD识别代码段范围失败后, 没有复制all modifications的选项, 因为这个是复制代码段内的修改的。(曾半仙回答)

Q:OD里的patch窗口怎么用?
A:patch窗口用来保存你在调试的程序中修改过的代码的。比如你前面调试了一个程序,在OD中把某处的JE改成了JMP,OD会在patch中记录这个修改,你下次再重新载入程序时,就能在OD的patch窗口中看到你原来改动的代码。按空格键就可以激活patch,就是在OD中还把原来位置的JE改成JMP。这个只是在OD中作更改,并没有实际保存到文件,主要是比较方便在OD中修改程序时测试。(CCDebuger回答)

以下是新发现,很有用哦



OD实用技巧六则
                              dOSKEY lEE
关键词: OllyDbg、OD、技巧

1、让跳转路径显示出来
    打开Options\Debugging Option。弹出Debugging Option对话框,选择CPU页,选定
“Show direction to jumps”、“Show jump path”和“Show grayed path if jump is
not taken”。如此以来在Disassembler窗口就会显示跳转的路径了。

2、让OD显示MFC42.DLL中的函数
    如果程序是用MFC进行的动态编译,那么在OD中将只能显示MFC42.DLL中的函数为:
00410E40  |.  E8 43000000  CALL    <JMP.&MFC42.#1576>
1576是函数在MFC42.DLL中的序号。打开Debug\Select import libraries,单击弹出的对话
框中“Add”,在弹出的打开文件对话框中选择“MFC42.LIB”并打开,重新载入MFC程序,
你就可以看见函数名称变为:
00410E40  |.  E8 43000000  CALL    <JMP.&MFC42.#1576_?AfxWinMain@@Y>
[hide]IDA中分析出了来的东西一样了!呵呵,以后不用等待IDA的“细嚼慢咽”也可以轻松搞定
MFC程序了。其他的DLL类似,如果有序号,可以在VC的LIB目录中找到相关的.LIB文件,加
到OD中便可。如果你没有“MFC42.DLL”,你可以的到新论坛的下载区找,我已经上传到那
里了。

3、让OD轻松躲过“ANTI-DEBUG”
    很多“ANTI-DEBUG”的程序都是在程序开始时来检查是否安装调试器的。用这种特性我
们可以轻松的用OD的“Attach”绕过检查部分。如“X语言”,如果你哟内TRW2K/S-ICE/OD
直接加载它的话,程序回警告你安装了调试器并结束。但是我们在“X语言”开启后再运行
OD,并用“Attach”系上它就就可以了,轻松通过检查。而且在OD系上它后仍然可以用
CTRL+A进行分析。如此一来,快哉!:)

4、轻松对付调用“MessageBoxA”以及类似的模态对话框的程序
    很多人都认为OD不好拦截“MessageBoxA”这类API函数。其实我们有个很简单的办法将
API拦截下来,并且快速找到比较地点/主算法地点。首先用OD加载目标程序,如果不能加载,
用上面的方法“Attach”目标程序。然后,F9运行目标程序,并且有意让目标程序显示“
MessageBox”,然后切换到OD中,F12暂停,如
0041201F  |>  53            PUSH    EBX                    ; /Style
00412020  |.  57            PUSH    EDI                    ; |Title
00412021  |.  FF75 08      PUSH    [ARG.1]                ; |Text
00412024  |.  FF75 F4      PUSH    [LOCAL.3]              ; |hOwner
00412027  |.  FF15 A8534100 CALL    DWORD PTR DS:[4153A8]  ; \MessageBoxA
0041202D  |.  85F6          TEST    ESI, ESI              ; 停在此处
0041202F  |.  8BF8          MOV    EDI, EAX
00412031  |.  74 05        JE      SHORT 1551-CRA.00412038
F8单步一下,切换到“MessageBox”中,确认,被OD中断。我们可以看见上面的代码41201F
处有一个“〉”,说明可以从某段代码跳转到此处,我们选择41201F这一行,在
“Information”栏看见一句“JUMP FROM 412003”,右键单击,选择“GO TO JUMP FROM
412003”。回到412003,一般都是条件跳转,上面的内容就是比较的地方啦。:)

5、使用OD的TRACK功能
    OD拥有强大的TRACK功能,在分析算法时十分有用。首先我们要设定OD的TRACK缓冲区大
小,选择Option\Debugging Option,在弹出的对话框中选择TRACK页,
“Size of run track buffer(byte/record)”,缓冲区大小,当然约大约好。其他的设置
在我以前的OLLYDBG.INI中都已经设置好了。然后,开启目标程序,在DEBUG中选择“Open
or clear run track”。然后我们就可以用CTRL+F11或CTRL+F12开启“Track into”和“
Track over”了。当我们暂停程序的时候,可以用小键盘上的“+”,“-”,“*”来控制
TRACK功能了。
“Track into”和运行类似,但是记录所有指令以及寄存器变化。并且会自动进入所有的
CALL中。
“Track over”和“Track into”类似,但是不进入CALL
“+”用来显示TRACK缓冲区中的下一条指令
“-”用来显示TRACK缓冲区中的上一条指令
“*”用来发返回当前指令

6、不是技巧的技巧
    当你遇到花指令的时候一定会很头痛。但是如果你用OD进行分析的时候就会轻松得多。
OD会自动标识出无效指令,即花指令。如果OD没有正确识别,你还可以用CTRL+↑/↓来单个
字节的移动。可以很有效的识别出花指令的所在。

免费评分

参与人数 2热心值 +2 收起 理由
125733578 + 1 用心讨论,共获提升!
1755126443 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ieiqp 发表于 2014-1-8 02:15
很实用的技巧,表示支持下!
zzzzyy 发表于 2014-1-8 09:28 来自手机
ProGaz 发表于 2014-1-8 10:50
bzchf 发表于 2014-1-8 11:32
谢谢楼主的分享
1354669803 发表于 2014-1-8 20:05
一大堆花指令 好烦啊
至尊丶 发表于 2014-1-9 17:48
谢谢楼主的分享
boyljx 发表于 2014-1-10 11:32
好吧,表示都没看过,学习了.
孤独妖 发表于 2014-3-14 22:01
感谢楼主分享
hht0391 发表于 2016-3-4 22:50
很好的文章,只是od还不会用


您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 15:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表