24小时热门版块排行榜    

查看: 550  |  回复: 1
当前主题已经存档。

sdlj8051

金虫 (著名写手)

[交流] [转贴]POINT H收集翻译

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的能中断

[ Last edited by sdlj8051 on 2006-10-6 at 11:30 ]
回复此楼

» 猜你喜欢

» 本主题相关商家推荐: (我也要在这里推广)

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gph-rabbit

金虫 (小有名气)

2楼2006-12-29 01:16:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 sdlj8051 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见