【原创】OllyDBG 入门系列(四)-内存断点

http://bbs.pediy.com/showthread.php?t=21378

还是上次那个cm,不过这次的要求是写出注册机

那么就要先研究注册码是怎么来的,上次我们最开始找到的关键位置

00401306  |. /75 6B         jnz     short 00401373
00401308  |. |C1E8 10       shr     eax,0x10
0040130B  |. |66:0BC0       or      ax,ax
0040130E  |. |75 63         jnz     short 00401373
00401310  |. |8B35 9C334000 mov     esi,dword ptr ds:[0x40339C]      ;  这里就是我们函数中esi的初始值
00401316  |. |6A 28         push    0x28                             ; /Count = 28 (40.)
00401318  |. |68 C4334000   push    004033C4                         ; |Buffer = CrackHea.004033C4
0040131D  |. |FF35 90314000 push    dword ptr ds:[0x403190]          ; |hWnd = 00FF01AE (class='Edit',parent=000C0126)
00401323  |. |E8 4C010000   call    <jmp.&USER32.GetWindowTextA>     ; \GetWindowTextA
00401328  |. |E8 A5000000   call    004013D2                         ;  关键函数
0040132D  |. |3BC6          cmp     eax,esi                          ;  eax要和esi相等
0040132F  |. |75 42         jnz     short 00401373                   ;  不能跳
00401331  |. |EB 2C         jmp     short 0040135F
00401333  |. |4E 6F 77 20 7>ascii   "Now write a keyg"
00401343  |. |65 6E 20 61 6>ascii   "en and tut and y"
00401353  |. |6F 75 27 72 6>ascii   "ou're done.",0
0040135F  |> |6A 00         push    0x0                              ; /Style = MB_OK|MB_APPLMODAL
00401361  |. |68 0F304000   push    0040300F                         ; |Title = "Crudd's Crack Head"
00401366  |. |68 33134000   push    00401333                         ; |Text = "Now write a keygen and tut and you're done."
0040136B  |. |FF75 08       push    [arg.1]                          ; |hOwner
0040136E  |. |E8 19010000   call    <jmp.&USER32.MessageBoxA>        ; \MessageBoxA


具体位置如下
00401310 |. 8B35 9C334000 mov esi,dword ptr ds:[0x40339C] ; 这里就是我们函数中esi的初始值
这里的esi的初始值参与到了我们注册码的生成中,

所以这里我们确定位置,0x40339c ,然后下内存断点,找到初始化的代码位置。
这里有一个要注意的地方,内存断点只能设置一个并且在重启程序后会自动消失。
在数据窗口 右键–>转到–>表达式 或者用快捷键ctrl+g

这里写图片描述

下内存写入断点

这里写图片描述

运行起程序,发现断在了ntdll领空 alt+f9 回到用户领空

找到了关键函数

0040140C  /$  60            pushad
0040140D  |.  6A 00         push    0x0                              ; /RootPathName = NULL
0040140F  |.  E8 B4000000   call    <jmp.&KERNEL32.GetDriveTypeA>    ; \GetDriveTypeA
00401414  |.  A2 EC334000   mov     byte ptr ds:[0x4033EC],al        ;  得到磁盘类型 al=3
00401419  |.  6A 00         push    0x0                              ; /pFileSystemNameSize = NULL
0040141B  |.  6A 00         push    0x0                              ; |pFileSystemNameBuffer = NULL
0040141D  |.  6A 00         push    0x0                              ; |pFileSystemFlags = NULL
0040141F  |.  6A 00         push    0x0                              ; |pMaxFilenameLength = NULL
00401421  |.  6A 00         push    0x0                              ; |pVolumeSerialNumber = NULL
00401423  |.  6A 0B         push    0xB                              ; |MaxVolumeNameSize = B (11.)
00401425  |.  68 9C334000   push    0040339C                         ; |VolumeNameBuffer = CrackHea.0040339C
0040142A  |.  6A 00         push    0x0                              ; |RootPathName = NULL
0040142C  |.  E8 A3000000   call    <jmp.&KERNEL32.GetVolumeInformat>; \GetVolumeInformationA
00401431  |.  8D35 9C334000 lea     esi,dword ptr ds:[0x40339C]      ;  得到磁盘信息 VolumenameBuffer
00401437  |.  0FB60D EC3340>movzx   ecx,byte ptr ds:[0x4033EC]       ;  存放的是磁盘类型
0040143E  |.  33FF          xor     edi,edi                          ;  edi清零
00401440  |>  8BC1          mov     eax,ecx
00401442  |.  8B1E          mov     ebx,dword ptr ds:[esi]           ;  卷标的名称作为数值送入ebx
00401444  |.  F7E3          mul     ebx                              ;  相乘
00401446  |.  03F8          add     edi,eax                          ;  把值累加在edi中
00401448  |.  49            dec     ecx
00401449  |.  83F9 00       cmp     ecx,0x0
0040144C  |.^ 75 F2         jnz     short 00401440
0040144E  |.  893D 9C334000 mov     dword ptr ds:[0x40339C],edi
00401454  |.  61            popad
00401455  \.  C3            retn

可以直接分析,也可以代入到IDA里面分析

大体的流程就是 获得驱动类型和磁盘的卷标,然后把驱动类型的数值和磁盘卷标的名字转换为数值按4字节为单位,相乘并累加,最后存储到0x40339c中。

这样大体流程清楚了就容易写注册机了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序名称:OllyDBG版 本:1.10汉 化 人:cao_cong联系方式:[email protected]汉化日期:2005.11.28汉化说明: 本来是想等 OllyDBG 2.0 出来再汉化的,可看到dyk158兄弟的修改版说明中对我原来汉化版本的汉化质量提了一点小小的意见,想想也是,我原来的汉化版是OllyDBG 1.10 的最终版本刚出来时汉化的,距今已经一年多了也没有更新过,当时只顾不出因汉化造成的Bug,汉化嘛确实不咋的。看到BoOMBoX/TSRh2004他们制作的美化界面,确实也觉得漂亮,最后决定再出个汉化版本。这个版本的汉化加测试、修改花了我整整两个星期的业余时间,其中的非标字符对照文本有4000多行,看一遍都半天。这个版本中的所有翻译我都重新过了几遍,绝大部分都重新翻译过,力求做到准确,希望能给大家一个比较完美的汉化版本。在制作过程中参考了TT小组翻译的OllyDBG帮助及dyk158修改、聆风听雨汉化的ODbyDYK修改版,主要是想让翻译更准确一点,能让新手把汉化版和TT小组汉化的帮助文档对照起来学习。在此对以上提到的各位表示衷心的感谢! 这个软件汉化起来确实是个苦差事,不光是要翻译的资源多,还有一个重要的方面就是稍不留神就会出现汉化引起的Bug。经常是用原版来调试汉化版找问题,象原来菜单上的“&Window”汉化后会出错,还是调试后才知道原来它内部加载菜单时还有个这个“&Window”,只有两个都汉化才不会出错。另外其它的许多问题都只好靠调试来解决。原来汉化时又没有把要注意的地方写下来,这次光测试就花了好几天。 这个汉化版本除因汉化必要而打补丁外,我不准备再对它打任何补丁。一是我怕打补丁影响 OllyDBG 的兼容性;二是已经有Fly和dyk158他们做了,我想我自己再做的话也不会比他们做的更好;三是我实在是感到太累了!如果大家要想要修改的版本的话,推荐使用freecat兄弟制作的AutoPath,我把这个插件放在 FixOD 目录下,我把freecat兄弟发布时所用的说明也放在同一目录下,大家可以根据说明来使用这个插件改造你的OllyDBG。 在这里我要感谢看雪论坛上的看雪老大和论坛上各位兄弟的支持,正是有了他们的测试和建议,经过多次修正后,才有了今天的这个最终版本,由衷的感谢看雪论坛上的各位兄弟!汉化第二版主要更新:1、界面采用 BoOMBoX/TSRh2004 制作的美化界面,主要为了好看一点。2、绝大部分句子都重新翻译过,力求做到准确。3、配置文件中除字体、语法高亮、颜色这几个部分保留为中文外,其它的都恢复为英文。保留字体、语法高亮、颜色这几个部分为中文的目的是因为我发现若先运行过英文版配置好后,汉化版中对应这几个部分的一些菜单也会取原英文版配置中的英文字串,而不是汉化过的字串。我觉得翻译后既能保持与英文版的兼容性,又能让英文版与中文版的界面等互不干扰。4、dyk158 建议我把配置文件中的字体、语法高亮、颜色这几个部分恢复为英文,我专门做了个恢复为英文配置的补丁(如果你以前运行过英文版进行了相应配置,则补丁后的汉化版本对应这几个部分的相应菜单将会显示英文,若你是用打过这个补丁的汉化版本生成配置文件,则相应菜单将会显示中文)放在英文配置补丁目录下,需要字体、语法高亮、颜色这部分也用英文配置的朋友可以把这个补丁放到我做的汉化版的安装目录,选择 Ollydbg.exe 补丁就可以了。这个补丁同样适用于原版界面的汉化版本。5、上一版中部分未汉化的内容这次除了不能汉化的外,基本上都已汉化。6、另有一个界面未作美化的汉化版放在原版界面目录,可以按自己的喜好选择使用哪一个。7、FixOD 目录下放的是用 freecat 的 AutoPath.dll 打过补丁的 OllyDBG,使用前请先备份好你原来的Ollydbg.exe文件,再把这个目录下的Ollydbg.exe、AutoPath.dll、AutoPath.ini复制到你的OllyDBG安装目录下就可以了。在上一版的基础上,插件做了如下更新:1、脚本插件 ODbgScript.dll (v1.23 汉化版)2、快捷命令插件 CmdBar.dll (v3.10.109c 汉化版,这个版本有支持运行 OllyScript 脚本的命令:OSC)3、标签插件 Labeler.dll (v1.33.108 汉化版)4、图表插件 OllyFlow.dll (v0.71 汉化版,我从IDA中提取了个wingraph32.exe放在插件目录下,用于配合这个插件)5、断点管理 olly_bp_man.dll (汉化版,在我机器上不能用,放在备用目录)6、字串参考修改版本 ustrrefadd.dll (汉化版)另外还添加了dyk158 汉化的两个插件:1、脱壳插件 OllyDump.dll (V3.00.110 dyk158 汉化版)2、脱壳插件 pedumper.dll (v3.03 dyk158 汉化版) 推荐大家试用一下这两个插件:ApiBreak 插件,用于在对话框、字串、注册表、时间、内存等 API 函数上设置断点,还可设置万能断点,简单易用;GODUP 插件,包含 Map 载入器、资源查看器、进程查看器、IDA 签名载入程序及自带的一个记事本这五个工具。感觉它自带的记事本用来在调试时记一些东西比较方便。 如果你以前没用过OllyDBG的话,我要提醒你使用前先在菜单的 选项->界面->目录 中把插件和 UDD 的路径设置好,以免影响使用! 此汉化版中的插件除了一个 PuntosMagicos.dll 插件没汉化外(我实在是弄不懂是哪国语言),其它的插件都已汉化。目录下的OLLYDBG.HLP帮助文件是由TT小组翻译的中文帮助,在此对TT小组的辛勤劳动表示感谢!(OLLYDBG_EN.HLP为原版英文帮助)声明: 1.本汉化软件包内的所有英文及其他语言的源程序的版权归原作者(公司)所有。 2.本人不对使用本汉化软件造成的任何情况的损失负责。 3.本汉化软件仅供学习研究之用。严禁用于商业用途。本人不对使用本汉化软件造成的任何法律纠纷负责。 4.如果你对本汉化软件有什么建议请联系我。 5.请在转载时保留此汉化版的完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值