昨天晚上翻译的。大家看看,什么错误请指正,谢谢。
如下为无插图版。
要看插图版的请下载
附件:point-h.part1.rar 附件:point-h.part2.rar
并且是中英对照的,有什么不明确的可以看原版。。。赫赫
这个是完全原版:
http://www.redrival.com/immlep/doc/Punto_H_english.rarPoint-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所有成员。。。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课