-
-
POINT H收集翻译
-
发表于:
2005-2-5 01:44
14552
-
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的能中断。请教大虾们指导一下。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!