CCDebuger版主您好:
首先非常感谢您的帮助!
我是一个破解初学者,现在正在学习使用“OLLyDBG"这个软件,在网上下载了您写的教程:
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
标 题: 【原创】OllyDBG 入门系列(一)-认识OllyDBG
作 者: CCDebuger
时 间: 2006-02-13,17:23
链 接: http://bbs.pediy.com/showthread.php?t=21284
OllyDBG 入门系列(一)-认识OllyDBG
作者:CCDebuger
一、OllyDBG 的安装与配置
OllyDBG 1.10 版的发布版本是个 ZIP 压缩包,只要解压到一个目录下,运行 OllyDBG.exe 就可以了。汉化版的发布版本是个 RAR 压缩包,同样只需解压到一个目录下运行 OllyDBG.exe 即可:
... ... ... ...(这里省略了)
启动后我们要把插件及 UDD 的目录配置为绝对路径,点击菜单上的 选项->界面,将会出来一个界面选项的对话框,我们点击其中的目录标签:
http://bbs.pediy.com/upload/2006/4/image/od_dir.gif
因为我这里是把 OllyDBG 解压在 F:\OllyDBG 目录下,所以相应的 UDD 目录及插件目录按图上配置。还有一个常用到的标签就是上图后面那个字体,在这里你可以更改 OllyDBG 中显示的字体。上图中其它的选项可以保留为默认,若有需要也可以自己修改。修改完以后点击确定,弹出一个对话框,说我们更改了插件路径,要重新启动 OllyDBG。在这个对话框上点确定,重新启动一下 OllyDBG,我们再到界面选项中看一下,会发现我们原先设置好的路径都已保存了。有人可能知道插件的作用,但对那个 UDD 目录不清楚。我这简单解释一下:这个 UDD 目录的作用是保存你调试的工作。比如你调试一个软件,设置了断点,添加了注释,一次没做完,这时 OllyDBG 就会把你
-------------------------------------------------------------------
所做的工作保存到这个 UDD 目录,以便你下次调试时可以继续以前的工作。如果不设置这个 UDD 目录,OllyDBG 默认是在其安装目录下保存这些后缀名为 udd 的文件,
---------------------------------------------------------------------------
时间长了就会显的很乱,所以还是建议专门设置一个目录来保存这些文件。
---------------------------------
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
以上带下划线的部分请您仔细地给讲解一下,在我再次打开OllyDBG来继续上次没做完的工作时,我怎样利用这个UDD 文件来接着上次的工作继续进行?麻烦您能一步一步的说明操作步骤吗,谢谢您了!
还有以下是您的第二个教程:
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
OllyDBG 入门系列(二)-字串参考
作者:CCDebuger
上一篇是使用入门,现在我们开始正式进入破解。今天的目标程序是看雪兄《加密与解密》第一版附带光盘中的 crackmes.cjb.net 镜像打包中的 CFF Crackme #3,采用用户名/序列号保护方式。原版加了个 UPX 的壳。刚开始学破解先不涉及壳的问题,我们主要是熟悉用 OllyDBG 来破解的一般方法。我这里把壳脱掉来分析,附件是脱壳后的文件,直接就可以拿来用。先说一下一般软件破解的流程:拿到一个软件先别接着马上用 OllyDBG 调试,先运行一下,有帮助文档的最好先看一下帮助,熟悉一下软件
... ... ... ... (这里省略了)
分别双击上面标出的两个地址,我们会来到对应的位置:
00440F79 |. BA 8C104400 MOV EDX,CrackMe3.0044108C ; ASCII "Wrong Serial,try again!"
00440F7E |. A1 442C4400 MOV EAX,DWORD PTR DS:[442C44]
... ... ... ... (这里省略了)
我们在反汇编窗口中向上滚动一下再看看:
00440F2C |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
-------------------------------
00440F2F |. BA 14104400 MOV EDX,CrackMe3.00441014 ; ASCII "Registered User"
00440F34 |. E8 F32BFCFF CALL CrackMe3.00403B2C ; 关键,要用F7跟进去
00440F39 |. 75 51 JNZ SHORT CrackMe3.00440F8C ; 这里跳走就完蛋
00440F3B |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]
... ... ... ...(这里省略了)
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
请问为什么要在这个00440F2C |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 地址下断点? 望您指教!
还有一处不明白的地方:
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
... ... ... ...(这里省略了)
我们所看到的那些 PUSH EBX、 PUSH ESI 等都是调用子程序保存堆栈时用的指令,不用管它,按 F8 键一步步过来,我们只关心关键部分:
00403B2C /$ 53 PUSH EBX
00403B2D |. 56 PUSH ESI
00403B2E |. 57 PUSH EDI
00403B2F |. 89C6 MOV ESI,EAX ; 把EAX内我们输入的用户名送到 ESI
00403B31 |. 89D7 MOV EDI,EDX ; 把EDX内的数据“Registered User”送到EDI
00403B33 |. 39D0 CMP EAX,EDX ; 用“Registered User”和我们输入的用户名作比较
--------------------------------------------------------------
00403B35 |. 0F84 8F000000 JE CrackMe3.00403BCA ; 相同则跳
00403B3B |. 85F6 TEST ESI,ESI ; 看看ESI中是否有数据,主要是看看我们有没有输入用户名
00403B3D |. 74 68 JE SHORT CrackMe3.00403BA7 ; 用户名为空则跳
00403B3F |. 85FF TEST EDI,EDI
00403B41 |. 74 6B JE SHORT CrackMe3.00403BAE
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
我的理解是:EAX,EDX 两个寄存器里的内容是存放用户名的内存地址吧?(不是“Registered User”和“CCDebuger”两个字符串吧?)
两个地址相比较怎能判断用户名的正确与否呢?我是一个初学者,如果说错了,还请您指教!
[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!