POINT H,2K/XP下所谓的万能断点。从网上收集的点滴,翻译而成。以后遇到相关材料,还将继续补充。

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,但工作在2K/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的能中断。请教大虾们指导一下。

  • 标 题: 答复
  • 作 者:newsearch
  • 时 间:2005-02-05 14:26

引用:
最初由 laoqian 发布
搜索user32中:F3 A5 8B C8 83 E1 03 F3 A4 E8,什么意思?在哪里搜索?
我在USER32.dll里搜索只有F3 A5 8B C8 83 E1 03 F3 A4 eb,和F3 A5 8B C8 83 E1 03 F3 A4 E9,没有E8,怎么回事? 



搜索方法:
  菜单:查看->执行模块->双击USER32.DLL,在USER32模块窗口中:右键->搜索->二进制字符,在HEX里输入F3 A5 8B C8 83 E1 03 F3 A4 E8,就可以找到Point-H的位置了。我这里完全可以啊。XP+SP2