首页
社区
课程
招聘
[原创]算法分析实战篇和应用篇之提高(一)我的常用断点系统
发表于: 2008-4-1 08:19 25537

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

2008-4-1 08:19
25537

【文章标题】: 算法分析实战篇和应用篇之提高(一)我的常用断点系统
【文章作者】: NBA2005
【作者邮箱】: [email]stockfox1699@126.com[/email]
【作者QQ号】: 382309369
【软件名称】: 小蜜蜂和check 求解没有任何提示的crackme算法
【下载地址】: http://bbs.pediy.com/showthread.php?t=56420  小蜜蜂
              http://bbs.pediy.com/showthread.php?t=61079  
                 求解没有任何提示的crackme算法
【使用工具】: OD
【作者声明】: 试图对算法分析实战中的破解难点进行尽可能全面的阐述,
              浅薄之处请诸位大侠海涵并赐教!
--------------------------------------------------------------------------------
【详细过程】
     算法分析实战篇和应用篇之提高(一)我的常用断点系统   
  
     首先,我要说明的是:这不是一篇破文,也不是教学。我只是试图对算法分析的破解
  理论进行尽可能全面的阐述。所谓提高只是相对于我的入门篇而言,高手请黑眼睛飘一边。
  汇编基础差的朋友,推荐看大菜一号的破文,对汇编的解释很详细,实在是业余破解者学
  汇编的好文啊。
  
     今日感冒涕流,只好看《神探狄仁杰III》消遣。第一集就让我看到了破绽:朝廷已经准
  确预测到了地震的方位和时间。既然老百性都接到了通知开始疏散,身为押运军垧的房
  将军肯定也接到了通知。如此恶劣的天气,仅需一天就能通过的大漠,又没有兵变和重
  大战事发生,房将军为何冒兵家大忌急于押送呢?更不用提遇险时正规部队的队形毫无
  章法、没有先锋和远哨。只好以一句剧情需要艺术处理来理解了。
  
     学破解就是要善于发现问题,这样才能学得快、学得精。学习破解最好的方法就是批判
  的接受,而不是照单全收。要批判地接受就必须自己先尝试破解,这样才能发现自己的
  不足和弱点,才能扎实地成长。我很欣赏riijj Crackme (1) 的详解里对楼主的注释说不的人:
  
{
  thebutterfly
  
  
  
  中级会员
  
  资 料:
  注册日期: Jul 2004
  帖子: 422
  精华: 5
  声望: 10   63  2005-04-25, 20:25     
  
  --------------------------------------------------------------------------------
  楼主提供的破文有一处地方有问题:
  假如a是一个32位的有符号整数,以下的四句(A,B句在破文中出现)
  mov  eax,a
  cdq            //A
  xor  eax,edx   //B
  mov  a,eax
  不是求a的绝对值
  如果是正数,最后结果还是这个数
  如果是负数,结果是这个数取反的结果,例如原来a是-5,执行后a是4
  不过这不影响破解的结果,感谢楼主提供CrackMe和破文!
  
}

    我在入门篇中对易语言的断点详细阐述。对此,朋友颇有微词。易语言是要扶持,
  我坚持批判地扶持的观点。对红旗UNIX同样如此。
  关注1:对红旗UNIX系统的破解讨论在看雪论坛上很难见到。遗憾啊。
  
     我在入门篇里罗列了一大堆常用的断点方法。但在实际破解中,我最常用的断点方
  法有四种:
  
  1.有提示的用字符串查找。
  2.有提示且字符串查找无效的用F12暂停法。这方法常常用于加密字符串的位置判断上。
  3.无提示的用消息断点法。
  4.无提示且用消息断点无效的用XP万能断点法。
  
  第一种方法最普通了。大家都会。
  
  第二种方法在看雪上很早就流行了。分为快捷版和老实版两个具体形式。对于老实版,
  我就推荐看雪上的文章:出现错误对话框的杀手锏--暂停--初学者适用 BY liyangsj。
  
  快捷版其实在入门篇中已经提过了。我在“第二题是找到硬件序列号。这是一个明码比较
  的题目。”中已经进行了叙述:F12暂停,然后CTRL+F9或ALT+F9,直到错误提示的确定
  之类的按钮有效,点它,继续回到OD CTAL+F9数次,回到主程序里出现提示的CALL下。
  这方法常常用于加密字符串的位置判断上,在汉化中应用很广泛。
  
  我就以Petnt大侠的以彼之道还施彼身的小蜜蜂为例子。
  步骤一:运行小蜜蜂-->填入用户名和假注册码-->确定-->出现错误提示框(或者正确提示框)。
  步骤二:运行OD-->附加小蜜蜂。
  步骤三:F12暂停-->CTRL+F9或ALT+F9,直到错误提示的确定之类的按钮有效,点它。
  步骤四:继续回到OD CTAL+F9数次,回到主程序里出现提示的CALL下。
  步骤五:向上追源到CALL所在函数段的段首(或重要跳转处),设断点。
  
  老实版的我就引用liyangsj的文章,写得很好:

{
  标 题: 出现错误对话框的杀手锏--暂停--初学者适用
  发帖人:liyangsj
  时 间: 2005-08-13 15:54
  原文链接:http://bbs.pediy.com/showthread.php?threadid=16147
  
  引用精彩的一段:
  我们再来说一下CALL的调用,调用一个子程序的时候:1、向堆栈中压入下一行程序的
  地址;2.JMP到call的子程序地址处关键是1、在堆栈中压入了下一行程序的地址,其目的
  是为了调用子程序结束后返回用的,如果走到一个CALL的时候我们F7一次跟进后会停在
  所调用的子程序的开头第一个代码处,这时看堆栈的第一行压入了调用时的下一行地址。
  这个也是我们要利用的:我们只要在程序某段的开头第一行代码下断(下面也行,这样
  可以避免不必要的干扰)中断后在堆栈中的第一行“选反汇编中跟踪”就可以返回到上一层
  的调用这里的地方了,回到上一层后,如果发现关键段不是这段,再在此段的开头第一行
  下断,向上找。这样可以一层一层向上找,直到找到最初的调用的CALL,这里就是关键段了!
  当然暂停后用AIT+K也可以看的到(但觉得有时不能准确定位)。
  注释:AIT+K是调用堆栈。
  
}

  有更高要求的朋友可以看看《OD里SHIFT+F4条件断点用法篇》BY pjb:
  
{

  标 题: 【分享】致菜鸟: OD里SHIFT+F4条件断点用法篇
  发帖人:pjb
  时 间: 2005-08-24 20:25
  原文链接:http://bbs.pediy.com/showthread.php?threadid=16494
  详细信息:
  
}
  
       WIN98时代的万能断点法bpx hmemcpy让人怀念。再难断的程序,只要能在WIN98下运行,就可以用万能断点法bpx hmemcpy来设断。我以前每当遇到难断的程序,就产生猜想:能不能在程序读取注册码或用户名的时候断下呢?那就是POINT H,XP下所谓的万能断点。虽然许多文章说它支持WIN2K系统,但我的实践证明对WIN2K的支持率很低。首先,介绍newsearch翻译的好文:
  

{

  标 题: POINT H收集翻译
  发帖人:newsearch
  时 间: 2005-02-05 01:44
  原文链接:http://bbs.pediy.com/showthread.php?threadid=10833
  详细信息:
  
  引用:
    1.  什么是POINT H?
    它是在XP/2K机子上的老的已知的hmemcpy,搜索user32中:F3 A5 8B C8 83 E1 03 F3 A4 E8,
       就是POINT H。 或者搜索8B C1 C1 E9 02 F3 A5 8B C8 83 E1 03 F3 A4 E8。一旦找到,它返回位置地址,也就是说在内存拷贝之前。(实际的操作:F9,在内存中搜索上述字符串)
  
     该模式应该发生在USER32的第一个OX3FFFF。比如:
  
  77D46706 mov eax, ecx
  77D46708 shr ecx, 2
  77D4670B repe movsd ; <-- 在该指令上中断
  77D4670D mov ecx, eax
  77D4670F and ecx, 3
  77D46712 repe movsb
  77D46714 call sub_77D46722
     该段代码显示了内存是在哪里从gui-项被拷贝到提供给用户的缓冲器中。追踪一小段,出现SendMessage和Getwindow×××代码段。
  
  2、在OD或SICE中输入:
    BP “POINT-H的值”或在SICE中用BPX。它类似Win98中的hmemcpy,但工作在XP的80%的程序中(不用于VC++)。但我们可以用一些技巧使它用于所有的程序(也可用于VC++)。当   在程
      序编辑框中输入假的序列号时,程序中断。
  
  3、实际上,输入bpx user32!EcGetText+51可以做到"d edi-ebx"。
  
  4、还有寻找POINT H的另外一个方法:如果有USER32.DLL的符号文件(USER32.PDB或USER32.DBG),
       可以在IDA中打开USER32.DLL,适用PDB插件加载上面的符号,然后可以搜索函数ECGetText。它就是POINT H。该函数是USER32.DLL的内部函数,调用来自EditWndProc(也是一个内部函数)。它实际上是对键盘输入和鼠标按键的一个中断,但是和万能断点插件中POINT H的地方不一致。万能断点插件中的POINT H好像常常不能中断,只有VB5和VB6的能中断。请教大虾们指导一下。
  
     搜索方法:
    菜单:查看->执行模块->点USER32.DLL,在USER32模块窗口中:右键->搜索->二进制字符,在HEX里输入F3 A5 8B C8 83 E1 03 F3 A4 E8,就可以找到Point-H的位置了。我这XP+SP2 完全可以啊。
  
}

    我就以CRACK ME 论坛上"check 求解没有任何提示的crackme算法"来举例子:
   
  1.用OD运行"check 求解没有任何提示的crackme算法"里的Project1.exe,输入用户名和注册码.
  2.右键选查看->执行模块->点模块'USER32.DLL',来到USER32模块窗口中:右键->搜索->
     二进制字符(CTRL+B),
  3.将"F3 A5 8B C8 83 E1 03 F3 A4 E8"复制到二进制字符里的HEX项.
  4.开始搜索,我的机子是7738352D.记住:这个地址与你的XP系统是一一对应的,是一个恒定值.以
    后你记住就行了.
  5.在77D33528设断,然后再回到注册界面,点check,F9直到断下时寄存器里出现注册码:
     EAX 001487C0 ASCII "1234567879012"
     ECX 0000000D
     EDX 00140608
     EBX 0000000D
     ESP 0012F2D4
     EBP 0012F2E4
     ESI 001487C0 ASCII "1234567879012"
     EDI 00DC66A0
     EIP 77D33528 user32.77D33528
  
  6.在EAX 001487C0或ESI 001487C0上右击,选数据窗口中跟随.
  7.在下面内存中对注册码设访问内存断点,运行程序:
     001487C0  31 32 33 34 35 36 37 38 37 39 30 31 32 00 00 00  1234567879012...
  8.断下后,取消内存访问断点,然后F8单步,以后CTRL+F9返回,直到主程序领空或关键程序段..
  
    CTRL+F9八次,停在0043D170:
  0043D170  |.  8943 0>mov     dword ptr [ebx+C], eax
  0043D173  |>  8B03   mov     eax, dword ptr [ebx]
  0043D175  |.  83F8 0>cmp     eax, 0C    注册码位数必须是0C,证实了算法关键所在
  0043D178  |.  75 1B  jnz     short 0043D195
  此时,堆栈窗口显示:
  0012F5DC  |00DC66B4  ASCII "1234567879012"
  0012F5E0  |00000000
  0012F5E4  ]0012F624
  0012F5E8  |00438C93  返回到 Project1.00438C93 来自 Project1.00439EE8
  0012F5EC  |00DC66B4  ASCII "1234567879012"
  0012F5F0  |00438D2F  返回到 Project1.00438D2F 来自 Project1.00438C88
  0012F5F4  |0012F7A8
  0012F5F8  |0042DC88  Project1.0042DC88
  
  哈哈,直接到了算法关键的程序段。
  
  XP万能断点法同样适用于小蜜蜂。简略步骤:
  1.OD运行小蜜蜂,输入用户名和注册码。
  2.右键转到:77D33528(我机器上的POINT H),设断F2。
  3.回到注册界面,点确定。
  4.F9直到断下时寄存器里出现注册码:
  EAX 0014C5B0 ASCII "123456"
  ECX 00000006
  EDX 00140608
  EBX 00000006
  ESP 0012F4EC
  EBP 0012F4FC
  ESI 0014C5B0 ASCII "123456"
  EDI 00AB3E20
  EIP 77D33528 USER32.77D33528
  
  5.内存设访问断点:
  0014C5B0  31 32 33 34 35 36                                123456
  6.取消访问断点,F8或CTRL+F9返回主程序领空。
  
  我个人的理解:
  1.一定要先输入用户名和注册码,然后在XP万能断点上设断.次序千万不能错.不信你试试.
  2.在访问内存中注册码时断下后,一定要取消内存断点.如果你怕一次不成功,可以空格键禁
     用断点,以后需要时空格键激活.
  3.CTRL+F9返回,直到主程序领空或关键程序段。
  4.对某个单机而言,XP万能断点的值是恒定的。你只要找到一次,拷入记事本中,存为
     XP万能断点.TXT,放在桌面上,方便随时复制。
  5.如果记不住,又出门在外,可以在看雪的工具里下载找的工具。
    对程序理解深的记牢下面的程序代码,用OD修改出来也行。
     mov eax, ecx
     shr ecx, 2
     repe movsd ; <-- 在该指令上中断
     mov ecx, eax
     and ecx, 3
     repe movsb
     call sub_77D46722
  6.“bpx user32!EcGetText+51”的效率太低,不实用。
  7. XP万能断点不适用于WIN2K/NT。
  
    这里再链接一个详细的例子供朋友参照理解:
  
{

  标 题: 利用万能断点找出关键跳转
  作 者: moodsky
  时 间: 2006-12-17 15:35
  链 接: http://bbs.pediy.com/showthread.php?threadid=36520
  详细信息:
  
}

  ............................
  我说过,要批判地接受。很多人都会用,但又有多少人对其机理穷追不舍?问题来
了:XP万能断点的具体机理是什么?CRACK ME作者怎样对抗?

{
newsearch的POINT H收集翻译:
3、实际上,输入bpx user32!EcGetText+51可以做到"d edi-ebx"。

}

我试了下,并不好用,很麻烦。结合我最近详细看的几篇外文,试验总结了一套便捷的
神奇操作(XP 万能断点之父)。相信会引发许多的CRACK ME 的作者对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。似真亦幻疑梦中,故国神游添情趣。真神奇啊!!!

     我说过,要批判地接受。问题来了:XP万能断点是不是真的万能?
CRACK ME作者怎样对抗?
  
{

  引用:http://www.37moti.com/article/2007/1220/article_635.html
  
  并非万能的万能断点
  2007-12-20 16:22:14  作者:  来源:互联网
    关于万能断点的历史,应该从Windows98下的hMemcpy算起。它主要
  用于大块的内存复制操作。在Windows2000下没有此函数,这是大家都知道
  的,然而是否果然如此呢?hMemcpy究竟是何方神圣,为什么在Windows98
  能用作万能断点?
  
  小知识:hMemcpy是16 bits windows里的一个函数,全名Huge Memory Copy,
  俗称万能断点,它的操作很简单,只是将内存中的一块数据拷贝到另一个地
  方(Memcpy也有此功能),Win9x系统里很频繁地调用它处理数据。在
  Win NT/2K系统上相关的函数是Memcpy,但在Windows NT/2000中很少再
  调用Memcpy来处理数据了,用此函数设断基本上什么也拦不住。 那么
  Windows 2000/Xp下所谓的万能断点又是什么呢?
  
  下面请和我一起来揭开万能断点神秘面纱,在头文件windowsx..h的1333行宏
  定义如下:“#define hMemcpy MoveMemory”看来还要顺藤摸瓜,摸摸MoveMemory
  的底细。MoveMemory在MAPIWIN.H的141行的宏定义如下:
  “#define MoveMemory(pbDst,pbSrc,cb) MemMove((pbDst),(pbSrc),(cb))”
  该函数看来要退出历史舞台了,大概是为了兼容,所以MS提供了上面的宏定义。
  
  下面我们来看看和万能断点仅仅一个字节之差的一段机器码(选自USER32.DLL)
  77D19999 C1E9 02 SHR ECX,2
  77D1999C F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
  77D1999E 8BC8 MOV ECX,EAX
  77D199A0 83E1 03 AND ECX,3
  77D199A3 F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
  77D199A5 8B5D 0C MOV EBX,DWORD PTR SS:[EBP+C]
  
  下面是万能断点的机器码,注意比较机器码的不同。
  77D33538 8BC1 MOV EAX,ECX
  77D3353A C1E9 02 SHR ECX,2
  从这里开始:
  77D3353D F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
  77D3353F 8BC8 MOV ECX,EAX
  77D33541 83E1 03 AND ECX,3
  77D33544 F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
  77D33546 E8 E3FBFFFF CALL USER32.77D3312E
  
  其中F3:A5是Rep Movs的机器码,无论是Rep Movs 还是Rep Movsd,OllyDbg
  已经给出答案了。
  
  其完整形式是:“REP MOVS DWORD PTR ES:[EDI], DWORD PTR ES:[ESI]”
  黑色标识的小差别导致了最后一句汇编代码的巨大差异,所谓失之毫厘,差之
  前里。万能断点的代码看似为某一个函数作准备:CALL USER32.77D3312E,
  似乎该函数才是幕后主脑。但它好像没有公开,大家如果安装了WINDBG不妨
  看看。另外系统调用该函数非常频繁,下断点之后会不断中断。
  
  下面MemMove一段反汇编代码,对比看看,注意标示的部分:
  004010D8 C1 E9 02 shr ecx,2
  004010DB 83 E2 03 and edx,3
  004010DE 83 F9 08 cmp ecx,8
  004010E1 72 29 jb CopyUnwindUp (0040110c)
  004010E3 F3 A5 Rep Movs dword ptr [edi],dword ptr [esi]
  这是巧合吗?我个人有理由相信,所谓的万能断点确实是Windows用于处理内存
  拷贝和内存移动用的一段机器码。
  
  这里简单说点汇编知识:“Rep Movs dword ptr [edi],dword ptr [esi]”是用ecx作
  计数器,控制循环次数,其中[edi]和[esi]均是内存地址。前后跟踪(回溯)一段
  代码发现该段万能断点由EditWndProc调用,代码如下:
  
  77D32FC1 FF75 10 PUSH DWORD PTR SS:[EBP+10]
  77D32FC4 51 PUSH ECX
  77D32FC5 56 PUSH ESI
  77D32FC6 E8 0C000000 CALL USER32.EditWndProc
  77D32FCB 5F POP EDI; 0012EFF4
  77D32FCC 5E POP ESI
  77D32FCD 5B POP EBX
  77D32FCE 5D POP EBP
  在MSDN里查不到该函数的信息,看来是一个内部函数(未文档化)。从名字上看,
  应该是处理窗口Edit框的。不过在OllyDbg中可以直接用该函数名下断点,从现在的
  分析来看,似乎万能断点只能用于窗口过程,换个控制台的程序试试看。
  
  #include <windows.h>
  #include <stdio.h>
  #define SIZE 20
  int main(int argc, char* argv[])
  {
  char regCode[SIZE];
  printf("please in put regCode: ");
  scanf("%s", regCode);
  if (0 == strcmp(regCode, "ngaut"))
  {
  printf("\nright\n");
  }
  else
  {
  printf("wrong\n");
  }
  return 0;
  }
  编译成Release版,用OllyDbg加载,右键单击汇编区域。果然有发现,该程序竟
  然没用USER32.DLL模块,只有Kernel32和ntdll模块。这就验证了我的推
  断(icefire:多么聪明的头脑,值得学习)。我们不妨进一步研究,看
  看Kernel32和ntdll模块是否也有万能断点,用同样的操作方法发现Kernel32和ntdll模
  块也有“万能断点”,但是该万能断点并不能中断,只是虚有其表,无论是控制台程
  序还是GUI程序。现在大家应该明白了吧?所谓的万能断点并非万能,它仅仅能处理
  GUI程序中和EDIT相关的内存移动或者内存复制。 {tag_点击标签样式三}
  
  英文原文如下:
  
  HMEMCPY o POINT H in XP for OLLYDBG
  
  --------------------------------------------------------------------------------
  "Cannot start communications services" error after upgrading to Windows XP
  CESD-C-0013
  Applies To:
  Windows CE 1.0, 1.01
  
  --------------------------------------------------------------------------------
  
  Overview:
  After upgrading your Host PC Operating System to Windows 2000 or XP from
  Windows 95, 98 or Millennium you receive the following error when you attempt
  to synchronise your Windows CE 1.0 based Handheld PC
  
  Cannot start communications services.
  A critical resource file cannot be found (pegdcc.dll). To correct this problem you
   must reinstall H/PC Explorer.
  At which point H/PC Explorer will exit and your device synchronisation will not complete.
  
  
  
  --------------------------------------------------------------------------------
  
  Resolution:
  The use of Windows CE 1.0x devices with Windows XP or Windows 2000 is not advisable.
   Users will be required to follow the HPC:Factor connection guides available in the support
  section to ultimately establish a successful connection between host and device.
  
  The issue with pegdcc.dll exists because of the installation method for H/PC Explorer 1.0 or
   1.1. The application was installed using the Windows 9x install method, rather than the
  Windows NT install method. This results in H/PC Explorer being unable to connect to the
   Windows XP or 2000 serial network driver.
  There are several possible work arounds.
  
  Upgrade to H/PC Explorer 1.1
  If you are still using H/PC Explorer 1.0 please upgrade to H/PC Explorer 1.1 following the
   installation instructions outlined in the Windows 2000 / XP installation guides.
  
  Reregister the DLL
  In Windows 2000 / XP disconnect your device and completely exit H/PC Explorer
  Click Start
  Select Run (If you do not see the Run command in Windows XP please consult XP help)
  Type cmd and click Ok
  Type cd c:\program files\Handheld PC Explorer and press enter
  Type regsvr32 pegdcc.dll
  Click Ok to the message prompt
  Reboot your computer
  Remove H/PC Explorer completely
  Create a backup of your computer and personal data
  Disconnect your Handheld PC and exit H/PC Explorer
  Click Start
  Select Run (If you do not see the Run command in Windows XP please consult XP help)
  Type CD c:\program files\Handheld PC Explorer and press enter
  Type each of the following lines, pressing enter after each one:
  regsvr32 2bp.dll /u
  regsvr32 fnt.dll /u
  regsvr32 hhriched.dll /u
  regsvr32 minshell.dll /u
  regsvr32 mrra.dll /u
  regsvr32 outstore.dll /u
  regsvr32 pegconv.dll /u
  regsvr32 pegdcc.dll /u
  regsvr32 prm.dll /u
  regsvr32 pwdcnv.dll /u
  regsvr32 pwdww6.dll /u
  regsvr32 pxlcnv.dll /u
  regsvr32 replui.dll /u
  regsvr32 scdstore.dll /u
  regsvr32 sserver.dll /u
  regsvr32 stm.dll /u
  From Add or Remove Programs in the Windows control panel remove H/PC Explorer from your computer
  Reboot your computer
  Using Windows Explorer navigate to c:\program files\
  Manually delete the folder named Handheld PC Explorer
  Reinstall H/PC Explorer as per the Windows 2000 / XP H/PC Explorer installation guides
  
  --------------------------------------------------------------------------------
  
  See Also:
  Overview of H/PC Explorer Support - CESD-S-0014
  
}

--------------------------------------------------------------------------------
【经验总结】
  我最常用的断点方法有四种:
  
  1.有提示的用字符串查找。
  2.有提示且字符串查找无效的用F12暂停法。这方法常常用于加密字符串的位置判断上。
  3.无提示的用消息断点法。
  4.无提示且用消息断点无效的用XP万能断点法。
  
  POINT-H的值:
       搜索user32中:F3 A5 8B C8 83 E1 03 F3 A4 E8,
       就是POINT H。 或者搜索8B C1 C1 E9 02 F3 A5 8B C8 83 E1 03 F3 A4 E8。一旦找到,它返回
       位置地址,也就是说在内存拷贝之前。(实际的操作:F9,在内存中搜索上述字符串)
  
  搜索方法:
    菜单:查看->执行模块->点USER32.DLL,在USER32模块窗口中:右键->搜索->二进制字符,
  在HEX里输入F3 A5 8B C8 83 E1 03 F3 A4 E8,就可以找到Point-H的位置了。
  
  记住:这个地址与你的XP系统是一一对应的,是一个恒定值.以
     后你记住就行了.
  对某个单机而言,XP万能断点的值是恒定的。你只要找到一次,拷入记事本中,存为
     XP万能断点.TXT,放在桌面上,方便随时复制。
  
  XP 万能断点之父的神奇操作步骤

  并非万能的万能断点
  所谓的万能断点并非万能,它仅仅能处理
  GUI程序中和EDIT相关的内存移动或者内存复制。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2008年04月01日 上午 08:14:03


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (27)
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
2
ctrl+e user32.dll
ctrl+s rep movsb
       call const
page up
2008-4-1 15:44
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
3
【翻译】WinXP 关于POINT-H万能断点 的教程      

--------------------------------------------------------------------------------
WinXP 关于POINT-H万能断点 的教程
【文章标题】: WinXP 关于POINT-H万能断点 的教程
【翻译链接】http://bbs.pediy.com/showthread.php?p=436025&posted=1#post436025
【文章译者】: NBA2005
【作者邮箱】: stockfox1699@126.com
【作者QQ号】: 382309369

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

原E文地址:
by Ricardo Narvaja

http://www.redrival.com/immlep/doc/Punto_H_english.rar
2008-4-1 17:42
0
雪    币: 2256
活跃值: (941)
能力值: (RANK:2210 )
在线值:
发帖
回帖
粉丝
4
不错不错
学习了
2008-4-1 20:10
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
5
我说过,要批判地接受。很多人都会用,但又有多少人对其机理穷追不舍?问题来
了:XP万能断点的具体机理是什么?CRACK ME作者怎样对抗?

newsearch的POINT H收集翻译:
3、实际上,输入bpx user32!EcGetText+51可以做到"d edi-ebx"。

我试了下,并不好用,很麻烦。结合我最近详细看的几篇外文,试验总结了一套便捷的
神奇操作。相信会引发许多的CRACK ME 的作者对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。似真亦幻疑梦中,故国神游添情趣。真神奇啊!!!
2008-4-2 09:04
0
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
6
ctrl+e user32.dll?
是alt+user32.dll吧
2008-4-2 10:23
0
雪    币: 47147
活跃值: (20450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
7
归纳整理的不错。
对于引用,建议nba2005用引用标签([ QUOTE ])括起来,这样文章结构清晰。
2008-4-2 10:29
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
8
恩,写错了7878787
2008-4-2 10:47
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
9
好意见,就当写C语言吧。

我从不相信权威。

看雪老大就说过:京城的美女都喜欢看雪。

我就不信。

我这里抛砖引玉,希望读者多多提出自己的独特见解,共同提高。

另:
这是一篇探讨性的文章,与入门篇的吸引新手兴趣的写作思想不同。所以
我没有加入类似“京城的美女都喜欢看雪”的笑料。
2008-4-2 11:00
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
10
[quote=nba2005;436075]好意见,就当写C语言吧。

我从不相信权威。

看雪老大就说过:京城的美女都喜欢看雪。

我就不信。

我这里抛砖引玉,希望读者多多提出自己的独特见解,共同提高。

另:
这是一篇探讨性的文章,与入门篇的吸引新手兴趣的写作思想不同。所以
我没有加入类似“京城的美女都喜欢看雪”...[/quote]

有几个人相信啊
2008-4-2 12:53
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
11
好文。京城的美女都喜欢看雪,南方的姑娘都喜欢赏雨。。。
2008-4-2 14:06
0
雪    币: 479
活跃值: (25)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
总结的很好,支持
2008-4-4 15:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢.再一次看到了提高遍.认真看了一遍.不太明白.不过收藏.留下以后慢慢体会.
2008-4-11 17:16
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
分析的不错,学习了
2008-6-5 22:19
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
15
附加另一具体的例子:

{

BennyBoy

初级会员

资 料:
注册日期: Mar 2008
帖子: 39
精华: 0
声望: 10   1  2008-06-07, 21:44  【求助】一个易语言cm(转pyg的)      

--------------------------------------------------------------------------------
我只能用硬件断点断下来,
其实实际上应该怎么断?

上传的附件 CM0001[1].rar (2008-06-07 21:42, 513.5 KB, 26 次下载)

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

}

我的答复:

简单看了下,很好断。我的算法分析入门篇里有动态查找字符串的叙述。

0040DD0A    6A 00           push    0
0040DD0C    E8 0E000000     call    0040DD1F     ; (initial cpu selection)
0040DD11    E8 03000000     call    0040DD19

0040DD0C     call    0040DD1F   入口处动态查找字符串:

Ultra String Reference
Address    Disassembly                               Text String
0040DAC9   mov     eax, 0040C0D4                     注册码不对哦.?再努力下,!#注册成功了.,厉害,,#注册码不对哦.?再努力下,!#注册码不对哦.?再努力下,!#注册码不对哦.?再努力下,!#注册码不对哦.?再努力下,!#注册码不对哦.?再努力下,!#注册码不对哦.?再努力下,!#注册码不对哦.?再努力下,!#注册码不对哦.?再努力下,!#注册码不 ...
0040DAE3   mov     eax, 0040C78C                     这么长,眼花了没?  这句在程序中没用得,by:mery
0040DB0A   push    0040C7B9                          #

断法一(易语言最常用的动态字符串查找):

方法1:

0040C0CF  00 00 00 00 40 D7 A2 B2 E1 C2 EB B2 BB B6 D4 C5  ....@注册码不对
0040C0DF  B6 2E 3F D4 D9 C5 AC C1 A6 CF C2 2C 21 23 D7 A2  ??再努力下,!#注
0040C0EF  B2 E1 B3 C9 B9 A6 C1 CB 2E 2C C0 F7 BA A6 2C 2C  册成功了.,厉害,,

有时有注册错误的提示,有时没有任何提示。据此判断作者对用户名和注册码
有限制条件的判断,比如最常见的位数判断。我故意输入:
用户名:N
注册码:1

0040C0CF  00 00 00 00处设内存访问断点(猜是无提示的地方,如果无效
我会尝试字符串最后的....),最后来到:

1002977A    55              push    ebp

逆向追踪到:
0040DC3F    E8 ED000000     call    0040DD31

设断0040DC3F和1002977A,

1002977A    55              push    ebp          ;点注册断在此处

根据堆栈信息追到:

0040D26F    E8 BD0A0000     call    0040DD31                        

发现这就是关键算法段。

方法2:
用户名:NBA2005
注册码:1234567890

0040C0D4  D7 A2 B2 E1 C2 EB B2 BB B6 D4 C5 B6 2E 3F D4 D9  注册码不对哦.?再设

内存断点0040C0D4,来到:

0040DA1C    DD5D C4         fstp    qword ptr [ebp-3C]

逆向追踪到:

0040D5A9    E8 5E000000     call    0040D60C                  ;关键算法段之中

断法二:
用XP万能断点法,根据堆栈信息研读判断,直接跟踪来到:

0040D1CF    83C4 10         add     esp, 10                          ; (initial cpu selection)

序列号:5054A257      ;每台机器应该不一样。
用户名:NBA2005
注册码:82B66E9A6CED53CA5070507058D1
上传的附件:
2008-6-18 09:23
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
留个记号下次接着看完。。
2008-6-19 22:18
0
雪    币: 210
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好文章一定要支持,很久没有来了。
2008-6-21 15:06
0
雪    币: 177
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
后面的方法不错
呵呵
2008-6-21 20:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
很不错,正好可以好好学习
2008-6-22 16:08
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
很不错,正好可以好好学习
2008-10-15 17:17
0
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
强帖留名呵呵
2008-11-27 05:33
0
雪    币: 421
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
到今天才看到这个 Point H 大法
慢慢的开始有点体会了,拿了以前的几个CM试了下,此方法屡试不爽
2009-4-29 15:41
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
23
原来nba2005一直在整理东西
2009-4-29 15:54
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
24
被你发现了!.........
2009-4-29 17:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
不错,学习了
2009-5-2 14:35
0
游客
登录 | 注册 方可回帖
返回
//