首页
论坛
课程
招聘
[翻译]WinXP 关于POINT-H万能断点 的教程
2008-4-1 17:26 18569

[翻译]WinXP 关于POINT-H万能断点 的教程

2008-4-1 17:26
18569
WinXP 关于POINT-H万能断点 的教程
【文章标题】: WinXP 关于POINT-H万能断点 的教程
【文章译者】: NBA2005
【作者邮箱】: [email]stockfox1699@126.com[/email]
【作者QQ号】: 382309369

创作《算法分析实战篇和应用篇之提高(一)我的常用断点系统 》,顺手对该文
进行了翻译,前后共三个小时。

原E文地址:
by Ricardo Narvaja

http://www.redrival.com/immlep/doc/Punto_H_english.rar

作者 Ricardo Narvaja | 邮箱 [email]ricnar22@millic.com.ar[/email]
时间 :22.Dec.2oo2

内容:
在Windows XP里用OllyDbg 学习使用与WIN98功效相似的万能断点法POINT H。

附件:
Crackme v1.0 de Cruehead http://www.darmozjad.host.sk/import.php3

工具:
OllyDbg 1.08b

教程正文

摘要
WIN98的万能断点BPX Hmemcpy众所周知。在WinXP系统中,有没有方法在OllyDbg中
再现破解巨星“BPX Hmemcpy”的独特魅力呢?通俗地说,就是:如何在被破解程序读取
你输入的用户名或注册码时断下的方法。本文就是教你如何将上述梦想变成现实。

XP万能断点(俗称point-h)对每台机器的系统是唯一的,可以在USER32.DLL里找到。
这种断点法适用于C++, VB, Delphi, ASM,或其他语言编写的程序。

在我的机器上如何找到这个神奇的point-h?

为了方便解说,我选了一个可以跨系统正常运行且十分简单的CRACK ME 做讲解的例子。
上面的附件里有下载。详细介绍如下:

1.在OD中打开附件下载的CRACK ME。
2.一般的方法:右键--〉查看模块--〉点USER32.DLL,右键--〉查找当前模块中的名称,相当于CTRL+N。
3.寻找Translatemessage,右键--〉条件记录断点。相当于SHIFT+F4。

译者注释:因文中工具OllyDbg 1.08b版本较老,我根据自己的理解和破解体会、试验,
               采取了意译。(示范图1)。具体的2.和3.步骤与原文有出入,但易于操作和理解。

示范图2

注释1:在一些系统中,在条件记录断点设置界面,条件项中填:MSG==201;
  201这个值有时会失效,到不了XP万能断点。这时我就填入:MSG==202。
表达式填:MSG,
解码表达式的值为:通过表达式假定。
暂停程序选:按条件。
记录表达数值和记录函数参数:都选从不(NEVER)。条件满足次数没提,取默认值零。

4.运行程序。
5.分别输入用户名和注册码:
Name : narvaja
Serial: 1A2B3C4D5E

示范图3

注释2.当然你可以输入别的用户名和注册码,但 1A2B3C4D5E几乎是唯一的,便于找到确定。

6.按OK按钮。
7.OD会停在条件记录断点处(示范图4)。

  示范图4

8.ALT+M打开内存镜像,在内存镜像内右键查找-->在二进制查找中填序列号1A2B3C4D5E(示范图5)。

示范图5

9.点确定开始在内存中搜索1A2B3C4D5E。断下,在找到的字符串上右键选内存访问断点。

示范图6

10.运行(F9),哈哈,OD居然恰恰断在了POINT H处(示范图7)。

示范图7

77D29303 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>

这个地方正是我机器上的POINT H。这个CRACK ME 仅仅用来介绍如何找到POINT H。
在以下的例子中,我们将在XP系统中介绍POINT H的具体断法,再现WIN98下万能断点的神奇。

POINT H的具体断法例子:

例1.下面我先用CRACK ME 2举例。步骤如下:

1.在OD中打开CRACK ME 2,输入用户名和序列号,如示范图11:

示范图11

2.在WIN98中,我们会BPX HMEMCPY来设断。然而,在现在的XP中,我们设断:BPX POINT H的值。
  由于POINT H实际上位于USER32.DLL里,我们右键查看执行模块-->选USER32(来到USER32区域),
  CTRL+G 填77D29303 (我的系统的POINT H) ,设内存访问断点(示范图12)。

示范图12

3.回到CRACK ME 2注册界面,按CHECK。

4.OD在POINT H处断下。(示范图13)。

这种断法的原理和WIN98下的HMEMCPY是一样的。第一次的断下动作与用户名有
关(观察寄存器窗口,我们注意到ESI=narjava,正是我们的用户名)。再接着运行(F9),
这次的断下动作与序列号有关(寄存器窗口中,ESI=989898,正是我们的序列号,示范图14)。

示范图14

第一次断下时,很可能程序正在读取用户名;指令反汇编代码  REP MOV [EDI],ESI 说明序列号在
第二次断下时正赋值给EDI。因此,我们在EDI寄存器上右键,选数据窗口中跟随,随后一直按F8直到
序列号载入内存{换句话说,一直按F8直到 call USER32.77D28C15(或你机器上的POINT H值),
图例见示范图15}。在内存窗口中,在假序列号(393839383938)设内存访问断点,最后运行(F9)。

示范图15

OD将断在kernel32.继续运行(F9),直到程序返回crackme2的领空。终于我们发现,我们正好断在
程序对crackme2的注册信息进行判断的过程中。

示范图16

例子2.

Idesk是一个UPX加壳的delphi程序。这个壳很容易脱
掉(例如,用基本的脱壳工具Unpacker W32来脱)。试
运行脱壳后的delphi程序,发现无提示。然而,应用
POINT H万能断点法,我们能在程序读取假序列号时迅速
断下:

1.在OD打开脱壳后的Idesk 程序。
2.运行(F9)程序。
3.按OK,打开主程序界面(右下角有一个三角形,示范图17)

示范图17

4.点三角(示范图18),再点ACERCA DE IDESK,随后按出
  现的注册按钮。注册界面打开了。咦,序列号在第一个
  编辑框,用户名反而在下面的编辑框(示范图19)。

示范图18

示范图19

5.输入序列号和用户名。要注意机器码55157265是唯一的。
6.在POINT H处设断点。
7.运行(F9),程序在POINT H处断下(序列号编辑框)。
8.现在,再运行(F9),断在用户名处,又一次运行(F9),
  断在序列号处。
9.在寄存器窗口EDI,右键EDI,选数据窗口中跟随跟踪,
  直到 call USER32.77D28C15(或你机器上的POINT H值),
  见示范图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) ?

如果你有OD命令行插件,你可以直接对POINT H设断:
BPX 77D28C15(或你机器上的POINT H值)。
换句话说,不需要每次都在USER32中找POINT H。

Ricardo Narvaja

最后提示:
如有疑问,可和我联系解决,或通过我们的破解网站讨论:
ricnar?????
dalnet #crackslatinos

感谢Crackslatinos List的所有成员。

【公告】 讲师招募 | 全新“预付费”模式,不想来试试吗?

收藏
点赞0
打赏
分享
最新回复 (15)
雪    币: 367
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
nba2005 活跃值 5 2008-4-1 17:45
2
0
具体的例子看我的文章:

算法分析实战篇和应用篇之提高(一)我的常用断点系统:

http://bbs.pediy.com/showthread.php?t=62305
雪    币: 1834
活跃值: 活跃值 (20)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yingyue 活跃值 2008-4-1 18:57
3
0
太详细了,看不完
雪    币: 367
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
nba2005 活跃值 5 2008-4-2 09:02
4
0
结合我最近详细看的几篇外文,试验总结了一套便捷的
神奇操作。相信会引发许多人对XP 万能断点的思考。
具体如下:

1。关闭XP系统所有的前台程序。
2。打开OD,注意看一下窗口选项的“总在最前选项”,一定要使它没有打勾。
3。载入小蜜蜂,运行。小蜜蜂浮在OD前,输入用户名和注册码(9A9B7C6D5E),
    将9A9B7C6D5E复制后,点OD任意位置,回到OD界面。
4。右键查看-->选USER32模块-->再右键查找当前模块中的名称(标签)-->寻找Translatemessage。
5。右键Translatemessage-->选条件记录断点-->
6。在条件记录断点设置界面,填好下面的内容点确定:
  条件项中填:MSG==201;
  201这个值有时会失效,到不了XP万能断点。这时我就填入:MSG==202。
  表达式填:MSG,
  解码表达式的值为:通过表达式假定。
  暂停程序选:按条件。
  记录表达数值和记录函数参数:都选从不(NEVER)。条件满足次数没提,取默认值零。
7。ALT+TAB键切换到小蜜蜂注册界面,点注册。我的XP机器停在:
  77D18BF6 >  8BFF            mov     edi, edi                         ; krnln.100EDB40
  77D18BF8    55              push    ebp
  77D18BF9    8BEC            mov     ebp, esp

8。ALT+M,在出现的内存镜像中,CTAL+B,粘贴入注册码:9A9B7C6D5E,搜索:
0014C5B0  39 41 38 42 37 43 36 44 35 45 00 00 00           9A8B7C6D5E...

9。在上述内存中的注册码设内存访问断点。运行程序,断在:
77D3352D    F3:A5           rep     movs dword ptr es:[edi], dword p>
77D3352F    8BC8            mov     ecx, eax
77D33531    83E1 03         and     ecx, 3
77D33534    F3:A4           rep     movs byte ptr es:[edi], byte ptr>
77D33536    E8 E3FBFFFF     call    77D3311E

10。似真亦幻疑梦中,故国神游添情趣。真神奇啊!!!
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
duenyu 活跃值 1 2008-4-10 14:38
5
0
这个早有人翻译了
雪    币: 367
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
nba2005 活跃值 5 2008-4-18 12:02
6
0
是吗?
发表前,我在论坛和网上没搜到啊?
何况我加了自己的理解和详细的操作步骤。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bwin 活跃值 2008-4-26 14:50
7
0
是谁翻译的或者重复翻译
这些东西根本就没关系,自己能学到东西才是.....
很不错
把这些东西都收集在一起
支持一个 方便查看
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yalansi 活跃值 2008-5-3 20:56
8
0
http://www.darmozjad.host.sk/import.php3这个地址的附件下不了,是不是被伟大光荣正确的防火墙屏蔽了啊?
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
longpiao 活跃值 2008-5-4 13:19
9
0
很详细,谢谢.
雪    币: 367
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
nba2005 活跃值 5 2008-5-12 16:30
10
0
Sorry,是不能下载。我看的时候能下呢,可能朋友的机子比较特殊。

你可以参看我的拙作,里有详细的例子和相关的具体阐述:

算法分析实战篇和应用篇之提高(一)我的常用断点系统:

http://bbs.pediy.com/showthread.php?t=62305
雪    币: 256
活跃值: 活跃值 (120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuchun 活跃值 2008-5-12 17:10
11
0
我怎么看不到图片呢?
雪    币: 367
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
nba2005 活跃值 5 2008-5-14 10:52
12
0
英文原文里有图片,下有英文原文下载地址:
http://www.redrival.com/immlep/doc/Punto_H_english.rar

上传图片较麻烦,抱歉。

其实文章开头有,这里强调一下。
雪    币: 114
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cracktv 活跃值 2008-6-17 22:37
13
0
示范图15

OD将断在kernel32.继续运行(F9),直到程序返回crackme2的领空。终于我们发现,我们正好断在
程序对crackme2的注册信息进行判断的过程中。

示范图16
======================

我为何不能从kernel32回到crackme2的领空呀,一直按F9最后到LPK模块去了,请指导一下,谢谢!
雪    币: 367
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
nba2005 活跃值 5 2008-6-21 09:31
14
0
你的问题描述不清。

如何返回程序领空是破解的基本功,下文有详细的阐述:

{

【原创】 算法分析入门教程实战篇及应用篇---NBA2005新春大奉送      

--------------------------------------------------------------------------------
标 题: 【原创】 算法分析入门教程实战篇及应用篇---NBA2005新春大奉送
作 者: nba2005
时 间: 2008-02-12,00:21
链 接: http://bbs.pediy.com/showthread.php?t=59537

摘取主要的结论:
返回主程序领空的一般方法:
  1.CTAL+F9。
  2.ALT+F9。
  3.内存代码段设断法。

}
雪    币: 101
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pubhobo 活跃值 2009-6-30 19:18
15
0
很强大啊,但Hmemcpy在XP还担负和NT一样的使命吗??
雪    币: 882
活跃值: 活跃值 (81)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zzcl558 活跃值 2019-12-20 11:08
16
0
图片怎么都看不见?
游客
登录 | 注册 方可回帖
返回