首页
社区
课程
招聘
[翻译]在xp+olly下实现和98+SICE的断点HMEMCPY
发表于: 2005-1-4 10:31 31630

[翻译]在xp+olly下实现和98+SICE的断点HMEMCPY

4nil 活跃值
13
2005-1-4 10:31
31630

昨天晚上翻译的。大家看看,什么错误请指正,谢谢。
如下为无插图版。
要看插图版的请下载附件:point-h.part1.rar  附件:point-h.part2.rar
并且是中英对照的,有什么不明确的可以看原版。。。赫赫
这个是完全原版:http://www.redrival.com/immlep/doc/Punto_H_english.rar

Point-h in WinXP tutorial
by Ricardo Narvaja | email [email]ricnar22@millic.com.ar[/email]
22.Dec.2oo2

[译者]4nil
[date]3-Jan-05

描述
如何在OllyDbg +Windows XP环境下下Hmemcpy断点
目标文件
Crackme v1.0 de Cruehead http://www.darmozjad.host.sk/import.php3
工具
OllyDbg 1.08b 汉化版

教程
前言
本教程的目的是教你如何在OllyDbg+WinXP情况下下API Hmemcpy断点,就像在Windows 98里一样。Hmemcpy就是那个显示哪里存放了你的用户名和序列号数据的函数的断点。

那个断点(暂称point-h)在每台机器里都是唯一的,在USER32.DLL.可以找到。一旦找到我们就可以用于C++, VB, Delphi, ASM,或者其他编程语言,只要简单的下一个断点在内存的存取上。

如何在我的电脑上找到point-h
首先我们需要定位point-h,这样我们Cruehead的crackme因为crackme不会产生其他信息而且非常简单(当然你也可以用其他程序)。接下来给你一步一步讲述过程。。。。
1)用Olly打开crackme
2)在当前模块搜索名称(标签),选择API 翻译信息。(图1)
译者注:对于中文版,你可以这样做,查看==》执行模式,名字列中选中当前模块USER32,按CTRL+N。
图 1
3)打开后,右击TranslateMessage函数,选择“在导入中条件记录断点,设置如下图的信息。

图 2
提示1。在某些系统里MSG==201对于point-h.没有作用,你可以尝试用MSG==202
4)RUN(F9)
5)输入信息(图3)

Name : narvaja
Serial: 1A2B3C4D5E

图 3
提示2。当然你可以输入任意值作为姓名和序列号,但是1A2B3C4D5E作为序列号更便于在内存中查找,而且不容易有重复。
6)按下OK。
7)Olly在条件断点断下程序。(图4)

图4
8)打开查看==》内存(ALT+M),右击内存列表,选择“搜索”,在ASCII区域填写1A2B3C4D5E(你的注册码)。(图5)

图 5
9)Olly找到符合的字串后会停下来(图6),然后我们标记信息,下BP MEMORY ON ACCESS.

图 6
10)运行(F9)Olly会在point-h断下。(图7)

图 7
77D29303 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
这个就是我系统的point-h。我们用的Cruehead 的crackme仅仅是为了找到point-h。在接下来的例子里面我们就可以在point-h下断,相当于在Win98里下hmemcpy断点。

关于如何使用POINT-H的几个例子

例1。我们用Cosh´s crackme2作为第一个例子,过程如下。

1)用Olly打开crackme2,输入用户名和序列号。(图11)

图 11

2)接下来,假如我们用Windows 98我们就要下HMEMCPY,而现在,我们在point-h下BPX。因为point-h是在USER32.DLL里的,我们必须打开菜单==》查看==》执行模式,双击USER32,GO TO (Ctrl+G) 77D29303 (我系统的point-h),设置内存存断点(图12)。

图 12

3)回到crackme2的窗口,按下CHECK。
提示3。你可以按“暂停”然后在point-h下BPX,然后运行(F9),按CHECK。
4)Olly在point-h断下。(图13)

图 13
这个断点和Windows 98里的HMERMCPY完全一样。第一次在point-h被断下和用户名有关(从ESI寄存器获得名字"narjava")我们再一次按下“运行”(F9),程序又一次被断下,这次和序列号有关(ESI = ASCII "989898" , 图14).

图 14
这个断点让我们有机会输入用户名:指令REP MOV [EDI],ESI告诉我们序列号存在EDI里面,所以我们让寄存器EDI“在转存中标记数值”(注:右击寄存器,然后选择),继续按F8知直到序列号被载入,(相当于直到call USER32.77D28C15(你机器上的相同的数值),如图15所示)。然后打开转存,标记伪序列号(393839383938),设内存读取断点,“运行”(F9)。

图 15
Olly会在kernel32断掉,按“运行”(F9)直到回到crackme2模块。现在我们看到的是Olly准确的停在crackme的验证点。

图 16
例2

Idesk是加 了UPX壳的delphi程序,程序很容易脱壳(e.g.用Generic Unpacker W32),再dede里脱壳后的文件基本没有什么信息。我们可以应用point-h快速找到正确的注册码。

1)用Olly打开Idesk (脱壳后的)
2)运行(F9)
3)选择OK,打开主窗口(展开右边下拉箭头,图17)

图17
4)点开(图18),ACERCA DE IDESK,选择REGISTRAR按钮。跳出注册界面。第一个文本框是用来输序列号的(NÚMERO DE VALIDACIÓN)。(图19)

图 18

图 19
5)输入NÚMERO DE VALIDACIÓN(序列号)和USUÁRIO(用户名),得到NÚMERO CLAVE 55157265是机器码。
6)下point-h断点(见例子1)
7)运行(F9)程序停在point-h (注册框)
8)接着,运行(F9)输入用户名,再(F9)输入序列号。
9)对寄存器EDI 使用“在转存中标记数值”,跟踪直到call USER32.77D28C15如图20。
10)标记转存中的序列号(这里我们用的是989898),下内存读取断点。

图 20

11)程序停在Idesk模块
00402E0F 8A1E MOV BL,BYTE PTR DS:[ESI]
12)用F8跟踪跳出这个RETN,程序来到序列号对比核心。
004C9DB6 A3 04B55200 MOV DWORD PTR DS:[52B504],EAX
004C9DBB A1 00B55200 MOV EAX,DWORD PTR DS:[52B500]
004C9DC0 3B05 04B55200 CMP EAX,DWORD PTR DS:[52B504]
在004C9DC0程序比较F1ACA (=989898d) 和 7CE55,所以正确的注册码是511573 (=7CE55h)。

假如你有olly命令行插件,你可以直接在point-h下断(换句话说,没必要在USER32找了)。
Ricardo Narvaja

终了。。。
如有疑问,联系作者或者CracksLatinos:
ricnar?????
dalnet #crackslatinos
题献Crackslatinos所有成员。。。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (36)
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
2
自己顶下先。。。
2005-1-4 10:34
0
雪    币: 97697
活跃值: (200824)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3
辛苦了!!!
2005-1-4 19:26
0
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
楼主辛苦了!俺收藏下来学习!
2005-1-5 01:28
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
5
多谢!
我那次在2k下不太好用,不过人家说的是xp,有机会我用xp看看
2005-1-5 10:34
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
6
谢谢支持阿,大家看着有什么不对的帮小弟改一下怎么样啊,呵呵
2005-1-5 16:01
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
7
感谢斑竹阿。这可是小弟处男精华贴阿。。。。
阿里呷都。。。。
2005-1-8 15:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
只有kernel32,ntdll,crackme#这3个项啊?
2005-1-8 22:14
0
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
楼主:你能否将你这篇文章所提到的三个crackme发送到论坛上?谢谢!
2005-1-8 23:09
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
10
最初由 ljy3282393 发布
楼主:你能否将你这篇文章所提到的三个crackme发送到论坛上?谢谢!

呵呵,我只是翻译了下。。。。。也不知道CRACKME在哪里下。。。
2005-1-9 13:27
0
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
最初由 4nil 发布

呵呵,我只是翻译了下。。。。。也不知道CRACKME在哪里下。。。

我按楼主所翻译的这篇文章所说的步骤随便找了一个crackme试了一下,当进行完第四步后(即设完条件记录断点,按F9运行后),crackme(在任务栏中)无法激活!!因而也就没有办法输入姓名和序列号,这样第五步(输入信息)也就无法进行下去!不知楼主有没有试过?
2005-1-9 14:25
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
12
我不能用COMMAND LINE的,所以不好用啊,下断点比较麻烦那
2005-1-9 22:52
0
雪    币: 244
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
试试看,学习!
能用不能试完了现说。
顶顶顶!!!
2005-1-15 13:11
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
14
不错,辛苦了。
不过小弟以为语法方面可以再润色一下,如:
原文:如何在OllyDbg +Windows XP情况下下Hmemcpy断点
润色:如何在OllyDbg +Windows XP环境下下Hmemcpy断点

原文:只要简单的下一个断点在内存的存取上
润色:只要简单的在内存的存取上下一个断点

如有得罪,不好意思了。
;)
2005-1-15 16:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
辛苦了!!!
2005-1-15 23:32
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
16
最初由 springkang[DFCG 发布
不错,辛苦了。
不过小弟以为语法方面可以再润色一下,如:
原文:如何在OllyDbg +Windows XP情况下下Hmemcpy断点
润色:如何在OllyDbg +Windows XP环境下下Hmemcpy断点

........

哈,没什么,小弟语文比较差阿,多谢提点。。。
2005-1-16 13:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
我用的就是XP,不知可以用吗?
2005-1-17 18:30
0
雪    币: 97697
活跃值: (200824)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
18
最初由 其它类 发布
我用的就是XP,不知可以用吗?


ok!!!
2005-1-17 22:58
0
雪    币: 257
活跃值: (369)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
19
试了一下,这种方法在OD1.1中好像不适用。MSG=201就是下鼠标左键点击的消息断点,MSG=202就是下鼠标左键放开的消息断点。在输入时,不能按鼠标左键,只能先输入,TAB键切换,再点鼠标左键。
这种方法的意义不大,和万能断点插件的中断地方还不一样,不知道是不是版本的问题?
2005-2-5 00:11
0
雪    币: 222
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
辛苦了!!!
2005-2-13 15:24
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
这东西在2K下也可以用不过断是断它所说的正确地方了,但其实真正有意义的动作早已经过去,跟HMEMCPY根本有天壤之别。
2005-2-14 15:30
0
雪    币: 440
活跃值: (29)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
22
好文,我试了一下,果然很快能断下,并找到我机子上的那个H点,哈哈.谢谢楼主!!!!!!!!!!!!
2005-2-14 15:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
2005-2-17 13:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
请教楼主,我不明白的是在得到h点的时候.如下操作:
9)对寄存器EDI 使用“在转存中标记数值”,跟踪直到call USER32.77D28C15如图20。
“在转存中标记数值”是?

10)标记转存中的序列号(这里我们用的是989898),下内存读取断点。
“标记转存中的序列号”我怎么找不到该序列号,这个转存是指的寄存器窗口吗?
2005-4-22 10:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
(10)Olly会在kernel32断掉,按“运行”(F9)直到回到crackme2模块。现在我们看到的是Olly准确的停在crackme的验证点。
这里我用ctrl+F9运行总是不能返回到kernel32的领空。
2005-4-22 17:25
0
游客
登录 | 注册 方可回帖
返回
//